在 Gitlab CI/CD 中使用 Push Option
最近因为公司的容器云心环境调整,要将之前稳定运行的 CI/CD 配置文件适配新的运行环境。修改了 CI/CD 中的配置文件后,我自信满满的执行了 git push
。结果当然是没有通过,否则也不会有这篇文章了……
因为之前已经稳定运行了,所以部署时没有开启 verbose
模式。以至于 CI/CD 执行失败的具体原因无法得知。我又不想一直开启 verbose
模式,于是我就在 Gitlab 的文档中翻阅,看是否能通过环境变量来控制是否开启 verbose
模式。
这一查果然让我找到了可行的方案,而且还有其它收获。
Push option⌗
这个功能是 Git 提供的,可以在执行 git push
命令时附带用户定义的 Push option,在 Gitlab 的文档中我发现可以使用这个功能来跳过 CI/CD。为什么要这样做呢?比如当我们在频繁的 Debug 的时候并不希望每一次的 Push 都会触发 CI/CD,那么我们就可以使用下面这个命令来实现跳过 CI/CD 的流水线。
git push -o ci.skip
ci.skip 是 Gitlab 约定好的选项,还有更多的选项可以看 Gitlab 的官方文档.
使用自定义变量⌗
既然 Gitlab 能接收 Git Push option 的值,那么我有个大胆的想法:我们是不是可以通过自定义的环境变量,来控制是否开启 verbose
模式呢?
于是我在项目的 .gitlab-ci.yml
配置文件中增加了如下配置:
stages:
- deploy
variables:
VERBOSE: "" # 这里给的默认值是空字符串
deploy:preview:
image: betterde/deployer:6.8.0
only:
refs:
- develop
stage: deploy
tags:
- DevOps
script:
- deployer deploy preview $VERBOSE
VERBOSE
就是我们用来接收 -vvv
参数的,这里需要注意的是在配置文件中给改变量设置字符串空值,在 script
块中直接使用 $VERBOSE
来获取环境变量值即可(不要用双引号包裹,否则即使为空,也会被识别为一个参数)。
我们只需要执行如下命令就可以实现是否开启 verbose
模式:
# 默认不开启
git push
# 当调试需要开启时
git push -o ci.variable="VERBOSE=-vvv"
# 如果需要传多个参数:
git push -o ci.variable="ONE=1" -o ci.variable="TWO=2"
到这里就算实现了对 CI/CD 的更细粒度的控制,那么让那个解放出来的双手去做更多有意义的事情把!
I hope this is helpful, Happy hacking…