【问题标题】:Stage optional for other branches but mandatory for master阶段对于其他分支是可选的,但对于主分支是强制性的
【发布时间】:2020-10-27 16:18:56
【问题描述】:
目前我们在 GitLab CI 管道中有 4 个阶段。
当有人与 master 分支合并时,所有 4 个阶段确实是强制性的。
我可以将最后一个阶段设置为“only:master”,这会将其从非主分支推送的管道中取出,并将其放入管道中以合并到主分支。
有没有办法让非主分支推送的最后阶段成为可选/可选。在少数情况下,我们希望在常规分支推送上运行此阶段。我设想开始能够进入分支推送的管道,并能够单击最后一个阶段以“启用”它以进行此推送和仅此推送。
【问题讨论】:
标签:
gitlab
gitlab-ci
gitlab-ci-runner
【解决方案1】:
我们最终制作了一个模板,并从中派生了 2 个步骤,每个步骤都有不同的规则。效果很好。
.tarball: &tarball
stage: package
script:
- whoami
- echo $PATH
- which git-lfs
- echo "Cloning Common/master"
- git clone -b master https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/abc/common.git Common
- echo "Cloning Ansible/${CI_COMMIT_REF_NAME}"
- git clone -b ${CI_COMMIT_REF_NAME} https://gitlab-ci-token:${CI_JOB_TOKEN}@gitlab.com/abc/ansible.git Ansible
- echo "Excluding the following from tar- ${TAR_EXCLUDES}"
- tar ${TAR_EXCLUDES} -czf ${TAR_ARCHIVE} Ansible Common
- tar -tf ${TAR_ARCHIVE} > manifest.txt
artifacts:
paths:
- ${TAR_ARCHIVE}
- manifest.txt
tags:
- shell
tarball_master:
<<: *tarball
only:
- master
tarball_other:
<<: *tarball
except:
- master
when: manual