Gitlab ci 调试笔记 (一)

Gitlab ci 调试笔记 (一)

通常情况下,我们对ci的认识都停留在构建工具这一层面,对于许多使用方面的细节并不关注,所以我想写一下近段时间修改ci文件的一些细节。

1.release分支的问题

build_prod:
  stage: build_prod
  only:
    - /^release-.+/

通常我们会这样写线上的构建条件,但如果某些情况下,有一个分支被命名为release-xxx,就会错误的触发线上环境构建。

我们可以这样修改:

build_prod:
  stage: build_prod
  only:
    variables:
      - $CI_COMMIT_TAG =~ /^release-.+/

如果构建分支有tag,则ci会自动设置”CI_COMMIT_TAG”这个环境变量,在only中使用环境变量去判断,从而确保只有release-xxx的tag会触发构建。

2.手动操作

ci作为一款自动化工具,通常情况下所有的操作都由某些事件的触发而自动执行和完成,但有时,我们希望能受控的执行一些操作

deploy_prod:
  when: manual
  only:
    variables:
      - $CI_BUILD_TAG =~ /^release-.+/

只需要添加”when: manual”即可达到我们的期望,满足条件时,在ci/cd面板上会显示执行按钮,点击该按钮来执行我们期望的操作。

3.使用ssh密钥

ci能执行shell,那么,能不能ssh连接其他服务器,执行一些操作呢,显然是可以的,只需要配置一下。

使用ssh有一些前提,比如ssh密钥,同时还需要信任服务器(这一步我们在本地通常都是随手输入y信任)

我们将ssh密钥预先生成好,并放置到环境变量里待用,同时将KNOWN_HOSTS也放置到环境变量里。

publish:
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts

似乎有点长,我们来解读一下。

首先判断一下ssh-agent是否存在,不存在则安装一下,
安装完成后运行ssh-agent,并将密钥和HOSTS添加进来,就完成了配置工作,接下来做什么就自行发挥了,帮你commit & push代码也是可以的。


本期内容不多,等下期再完善一下