最近因为公司的容器云心环境调整,要将之前稳定运行的 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…