如何使用GitLab CI中的包含功能从另一个项目中的文件运行脚本?

时间:2020-09-01 17:59:25

标签: gitlab-ci

我试图通过我的包含文件从另一个项目中的模板文件运行shell脚本。

应如何配置才能工作?下面的脚本是我的代码的简化版本。

项目A

template.yml

deploy:
  before_script:
    - chmod +x ./.run.sh
    - source ./.run.sh

项目B

gitlab-ci.yml

include:
 - project: 'project-a'
    ref: master
    file: '/template.yml'

stages:
  - deploy

很明显,命令实际上是从模板所在的 ProjectB 运行的,而不是 ProjectA 运行的。可以通过在模板文件中添加ls -a来进一步确认。

那我们应该怎么打run.sh?这两个项目都在不同组中的同一GitLab实例上。

1 个答案:

答案 0 :(得分:0)

如果您有权访问项目A和B,则可以使用multi-project pipelines。您trigger从项目B到项目A中的管道。

在项目A中,克隆项目B并运行脚本。

项目B

job 1:
  variables:
    PROJECT_PATH: "$CI_PROJECT_PATH"
    RELEASE_BRANCH: "$CI_COMMIT_BRANCH"
  trigger:
    project: project-a
    strategy: depend

项目A

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