Gitlab-如何允许多项目管道在触发器仓库中创建分支

时间:2019-12-02 06:15:09

标签: gitlab gitlab-ci gitlab-api

我有一个仓库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

中的管道

1 个答案:

答案 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:
  - ...