Gitlab ci 如何使用include in GitLab CI从另一个项目中的文件运行脚本?
我正试图通过include从另一个项目中的模板文件运行shell脚本 这应该如何配置才能工作?下面的脚本是我的代码的简化版本 项目AGitlab ci 如何使用include in GitLab CI从另一个项目中的文件运行脚本?,gitlab-ci,Gitlab Ci,我正试图通过include从另一个项目中的模板文件运行shell脚本 这应该如何配置才能工作?下面的脚本是我的代码的简化版本 项目A template.yml deploy: before_script: - chmod +x ./.run.sh - source ./.run.sh include: - project: 'project-a' ref: master file: '/template.yml' stages: - deploy
template.yml
deploy:
before_script:
- chmod +x ./.run.sh
- source ./.run.sh
include:
- project: 'project-a'
ref: master
file: '/template.yml'
stages:
- deploy
项目B
gitlab ci.yml
deploy:
before_script:
- chmod +x ./.run.sh
- source ./.run.sh
include:
- project: 'project-a'
ref: master
file: '/template.yml'
stages:
- deploy
显然,这些命令实际上是从ProjectB而不是模板所在的ProjectA运行的。这可以通过在模板文件中添加ls-a
进一步确认
那么我们应该如何调用
run.sh
?两个项目都位于不同组下的同一GitLab实例上。如果您有权访问项目A和B,则可以使用。您可以从项目B创建项目a中的管道
在项目A中,克隆项目B并运行脚本
项目B
作业1:
变量:
项目路径:“$CI项目路径”
发布分支:“$CI\U提交分支”
触发:
项目:项目a
策略:依赖
项目A
作业2:
规则:
-如果:“$CI_PIPELINE_SOURCE==”PIPELINE“&&&$PROJECT_PATH&&&$RELEASE_BRANCH”
脚本:
-git克隆-b“${RELEASE_BRANCH}”--深度50https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/${PROJECT_PATH}.git$(basename${PROJECT_PATH})
-cd$(basename${PROJECT\u PATH})
-chmod+x../.run.sh
-source../.run.sh
那么您想通过项目B
管道执行shell脚本,但在项目A
的范围内?例如,ls-a
应该在项目B
中运行的管道中打印项目a
中的文件?我的理解正确吗?@rkm正确。在我的示例中,项目A包含run.sh
。但由于我在项目B中包含template.yml
,所以它无法看到run.sh
。我正在尝试包含项目A及其依赖项。谢谢!我就是这样做到的。它工作得非常好,我不知道这个功能。现在我有了一个CI存储库,可以为一系列其他项目(构建、部署等)完成我所有的工作。这真是太棒了。如果有人想知道,您也可以设置触发器分支。我发现这对于不同的版本或语言非常有用(例如,我有一个适用于不同语言的build
项目,一个用于构建python
的python
分支和一个用于构建nodejs
的分支)。