如何在我的 gitlab-ci.yml 中包含一个 script.py?

How to include a script.py on my gitlab-ci.yml?

我正在为我的项目实现一个 gitlab-ci.yml。在这个 yml 文件中,我需要执行一个 script.py 文件。这个 script.py 位于不同的项目中,是否可以在不将其上传到我的项目的情况下包含这个 python 脚本。

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

无法 'include' 不是管道定义模板的文件,但您仍然可以获取该文件。我这样做的方法是在前面的阶段添加第二个管道作业以克隆另一个存储库,然后将您需要的文件作为工件上传。然后在你需要文件的工作中,它会有可用的工件。

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

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 不要 clone/fetch 管道是 运行 的项目。如果作业正在执行诸如向 Slack 发送通知、点击另一个 API 等操作,这将非常有用
  3. 对于脚本,我们所做的就是克隆另一个项目,以便我们可以将文件作为工件上传。

第二份工作:

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