如何在gitlab-ci.yml中引入其他项目的script.py脚本无需上传至当前项目
GitLab CI跨项目调用外部Python脚本的实现方案
首先明确:GitLab CI 的 include 关键字仅支持导入符合CI语法的YAML配置文件,无法直接引入Python脚本这类非配置文件,你可以通过以下几种方案实现需求,无需将脚本上传到当前项目:
方法1:作业运行时直接拉取脚本
在CI作业的script阶段直接通过curl或者git命令拉取目标脚本再执行即可,注意要使用脚本的原始内容链接(路径带raw而非blob)。
- 公开项目无需鉴权,直接拉取即可:
your_job: image: python:3.10-slim script: # 拉取目标项目的Python脚本原始内容 - curl -O https://gitlab.com/<目标项目命名空间>/<项目名>/-/raw/main/script.py # 执行脚本 - python3 script.py
- 私有项目可使用GitLab内置的
CI_JOB_TOKEN鉴权,无需单独配置密钥:- 先进入脚本所在项目的「设置」→「CI/CD」→「令牌访问」,将当前项目添加到允许访问的列表中
- 按照以下格式编写CI配置:
your_job: image: python:3.10-slim script: - curl --header "JOB-TOKEN: $CI_JOB_TOKEN" -O https://gitlab.com/<目标项目命名空间>/<项目名>/-/raw/main/script.py - python3 script.py
方法2:跨项目拉取CI制品
如果脚本所在项目已经配置了CI流水线,可以把script.py设置为对应作业的制品,当前项目直接通过needs:project关键字拉取制品即可:
your_job: image: python:3.10-slim needs: - project: <目标项目命名空间>/<项目名> job: <脚本所在项目中导出script.py为制品的作业名称> ref: main artifacts: true script: - python3 script.py
方法3:打包为Python依赖复用
如果该脚本是多个项目共用的通用工具,你可以把脚本所在项目打包为Python包,发布到GitLab自带的PyPI制品库,当前项目的CI作业中直接pip install安装对应包再调用功能即可,长期复用的场景下推荐使用该方案。
内容的提问来源于stack exchange,提问作者Khalil Azennoud
相关产品推荐
相关产品推荐

