我有一个仓库A
(上游)和一个仓库B
(下游)。在回购A
中完成一些工作之后;我想触发仓库B
中的一些作业。我能够做到这一点。
trigger_repo_B:
stage: trigger_repo_B
trigger:
project: test/repo_B
我无法弄清的是-我该如何为仓库B中不存在的分支触发仓库B作业。例如,我可以为特定分支C
触发仓库B中的作业。如果C
存在,但如果C
不存在,则管道处于pending
状态。我希望能够在B
中创建分支,然后在分支B
不存在的情况下在C
中运行作业。
trigger_repo_B:
stage: trigger_repo_B
trigger:
project: test/repo_B
branch: C
有什么想法吗?我认为它起作用的唯一方法是执行一个before_script
,在其中克隆存储库并创建分支,然后再触发B
答案 0 :(得分:0)
而不是在触发器配置中列出分支名称,而是传递一个变量,其中值是您要创建的分支。然后,在下游管道中,您可以添加一个要运行的阶段和作业,然后再执行其他检查变量是否存在的检查。如果不是,则仅exit 0
并让管道照常继续。但是,如果已设置,请创建分支,然后继续。
可能看起来像这样:
#repo_A .gitlab-ci.yml
stages:
- trigger_repo_B
trigger:
stage: trigger_repo_B
variables:
BRANCH_TO_CREATE: branch_name
trigger:
- project: test/repo_B
#repo_B .gitlab-ci.yml
stages:
- prep_work
- build
Create Branch:
stage: prep_work
script:
- if [ -z ${BRANCH_TO_CREATE+x} ]; then git checkout -b $BRANCH_TO_CREATE; fi
# see https://stackoverflow.com/questions/3601515/how-to-check-if-a-variable-is-set-in-bash to explain the conditional above
Build:
stage: build
script:
- ...