我正在尝试通过我的包含从位于另一个项目中的模板文件运行 shell 脚本。
这应该如何配置才能工作?下面的脚本是我的代码的简化版本。
template.yml
deploy:
before_script:
- chmod +x ./.run.sh
- source ./.run.sh
Run Code Online (Sandbox Code Playgroud)
gitlab-ci.yml
include:
- project: 'project-a'
ref: master
file: '/template.yml'
stages:
- deploy
Run Code Online (Sandbox Code Playgroud)
显然,这些命令实际上是从ProjectB而不是模板所在的ProjectA中运行的。这可以通过添加ls -a模板文件进一步确认。
那么我们应该如何调用run.sh呢?两个项目都在不同组下的同一个 GitLab 实例上。
Bal*_*ung 16
如果您有权访问项目 A 和 B,则可以使用多项目管道。您从项目 B触发项目 A 中的管道。
在项目 A 中,您克隆项目 B 并运行脚本。
job 1:
variables:
PROJECT_PATH: "$CI_PROJECT_PATH"
RELEASE_BRANCH: "$CI_COMMIT_BRANCH"
trigger:
project: project-a
strategy: depend
Run Code Online (Sandbox Code Playgroud)
job 2:
rules:
- if: '$CI_PIPELINE_SOURCE == "pipeline" && $PROJECT_PATH && $RELEASE_BRANCH'
script:
- git clone -b "${RELEASE_BRANCH}" --depth 50 https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}/${PROJECT_PATH}.git $(basename ${PROJECT_PATH})
- cd $(basename ${PROJECT_PATH})
- chmod +x ../.run.sh
- source ../.run.sh
Run Code Online (Sandbox Code Playgroud)
小智 13
我们也遇到了这个问题,有点希望 Gitlab 允许include“导入”非 yaml 文件。尽管如此,我们发现的最简单的解决方法是在存储库 A 中构建一个小型 docker 映像,其中包含您要运行的脚本,然后存储库 B 的工作使用该 docker 映像作为image,因此该文件run.sh可用:)
最小 Dockerfile:
FROM bash:latest
COPY run.sh /usr/local/bin/
CMD run.sh
Run Code Online (Sandbox Code Playgroud)
chmod +x run.sh(注意:在构建图像之前请确保您,或者添加一个RUN chmod +x /usr/local/bin/run.sh步骤)
然后,您只需将其添加到您的项目 B 中.gitlab-ci.yml:
stages:
- deploy
deploy:
image: registry.gitlab.com/... # Wherever you pushed your docker image to
script: run.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5513 次 |
| 最近记录: |