我正在为我的项目实现 gitlab-ci.yml 。在此 yml 文件中,我需要执行 script.py 文件。这个 script.py 位于不同的项目中,有没有办法包含这个 python 脚本而不将其上传到我的项目?
类似:
include: 'https://gitlab.com/khalilazennoud3/<project-name>/-/blob/main/script.py
无法“包含”不是管道定义模板的文件,但您仍然可以获取该文件。我的方法是在前一阶段添加第二个管道作业来克隆其他存储库,然后将您需要的文件作为工件上传。然后在您需要该文件的作业中,它将具有可用的工件。
这是一个仅包含这两个作业的示例管道:
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 [email protected]: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
让我们逐行浏览这些内容。对于第一份工作:
git
GIT_STRATEGY: none
变量告诉 Gitlab Runner 不要克隆/获取管道正在运行的项目。如果工作正在执行诸如向 Slack 发送通知、访问另一个 API 等操作,这非常有用。第二份工作:
dependencies
关键字控制前一阶段的哪些工件将是 1) 必需的,2) 下载用于此特定作业。默认情况下,会下载所有作业的所有可用工件。该关键字控制这一点,因为我们只需要 script.py
文件。