【问题标题】:How to include a script.py on my gitlab-ci.yml?如何在我的 gitlab-ci.yml 中包含 script.py?
【发布时间】:2021-09-02 10:30:48
【问题描述】:

我正在为我的项目实施 gitlab-ci.yml。在这个 yml 文件中,我需要执行一个 script.py 文件。这个 script.py 位于不同的项目中,无论如何要包含这个 python 脚本而不将它上传到我的项目中。

类似:“包括:'https://gitlab.com/khalilazennoud3//-/blob/main/script.py'

【问题讨论】:

    标签: include gitlab-ci script


    【解决方案1】:

    没有办法“包含”不是管道定义模板的文件,但您仍然可以获取该文件。我这样做的方法是在前一阶段添加第二个管道作业以克隆其他存储库,然后上传您需要的文件作为工件。然后在您需要该文件的作业中,它将提供可用的工件。

    这是一个仅包含这两个作业的示例管道:

    stages:
      - "Setup other Project Files" # or whatever
      - Build
    
    Grab Python Script from Other Repo:
      stage: "Setup other Project Files"
      image: gitscm/git
      variables:
        GIT_STRATEGY: none
      script:
        - git clone git@gitlab.example.com:user/project.git
      artifacts:
        paths:
          - path/to/script.py.
        when: on_success # since if the clone fails, there's nothing to upload
        expire_in: 1 week # or whatever makes sense
    
    Build Job:
      stage: Build
      image: python
      dependencies: ['Grab Python Script from Other Repo']
      script:
        - ls -la # this will show `script.py` from the first step along with the contents of "this" project where the pipeline is running
        - ./do_something_with_the_file.sh
    

    让我们逐行浏览这些内容。第一份工作:

    1. 我们正在使用 Git 映像,因为我们需要的只是 git
    2. GIT_STRATEGY: none 变量告诉 Gitlab Runner 不要克隆/获取管道正在运行的项目。如果工作正在执行诸如向 Slack 发送通知、访问另一个 API 等操作,这将非常有用。
    3. 对于脚本,我们所做的只是克隆另一个项目,以便我们可以将文件作为工件上传。

    第二份工作:

    1. 照常使用您在此作业中使用的任何图像
    2. dependencies 关键字控制之前阶段的哪些工件将是 1) 需要和 2) 为该特定作业下载的。默认情况下,会为所有作业下载所有可用的工件。这个关键字控制,因为我们只需要script.py 文件。
    3. 在脚本中,我们只是确保文件存在,无论如何这只是一个临时的东西,然后您可以根据需要使用它。

    【讨论】:

    • 我在我的项目中尝试了这个配置,它成功了,谢谢。
    • 很高兴它成功了!如果可以,您介意将此答案标记为已接受的答案吗?它将帮助解决此问题的其他人看到它有答案。
    猜你喜欢
    • 2019-09-27
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2023-01-23
    相关资源
    最近更新 更多