我们有以下本地场景:开发人员在 Bitbucket 中从事应用程序工作,运维人员在 Gitlab 中从事“Gtops”工作。我们希望通过 Gitlab 管道自动化构建和部署,并寻找实施方法。构建部分已经可以工作了。但我们想区分分支 - 并非每个分支都应该部署 - 特别是生产将手动部署。
由于 webhook 包含我尝试在部署阶段设置的分支:
only:
- dev
也
rules:
- if: '$TOKEN_BRANCH != $PROD_BRANCH'
但在这两种方式中,部署管道仍然会被触发。
我想到了两个解决方法:
一种选择是通过“提交后钩子”镜像 bitbucket 存储库 - 但一方面这个插件是有成本的,另一方面你需要第二个插件来进行镜像 - 而且我能找到的唯一一个没有维护任何插件更长。
第二种选择是授权 Gitlab Ultimate 能够使用“拉取镜像”,这也可以通过 Bitbucket webhook 触发。
由于我们没有使用存储库镜像,唯一的用例是能够在“本地存储库”上使用 Gitlab 管道,其中所有上述区分部署分支的方法都应该有效 - 我更愿意找到一个与现有资源的方式。
很高兴听到您对此的想法!
编辑: 管道的部分:
variables:
PROD_BRANCH: main
before_script:
- TOKEN_BRANCH=$(cat $TRIGGER_PAYLOAD | jq -r '.changes[0].ref.displayId')
deploy:
stage: deploy
tags:
- openshift
rules:
- if: $TOKEN_BRANCH != $PROD_BRANCH
- echo $TOKEN_BRANCH 返回“main”。
- 在规则中:仅当以下语句为真时才会触发管道的这一部分。
- 由于“main == main”而不是“!=”,因此不应执行管道的“部署”阶段。但它是...
几种变体
rules:
- if: '$TOKEN_BRANCH !~ $PROD_BRANCH'
rules:
- if: '$TOKEN_BRANCH =~ $PROD_BRANCH'
when: never
在这些情况下,会发生相反的情况 - 管道永远不会有部署阶段 - 它甚至不会在 Gitlab 的“管道”视图中显示该阶段。
找到了一个可行的解决方案:
在“规则”不起作用之后,我现在在部署阶段的脚本部分使用“if 循环”。因此,每次都会触发部署阶段,但仅当令牌包含相应阶段时才会完成逻辑(=部署)。