GitLab CI/CD关键词(四):指定runner tags,镜像image,运行条件when


转载自:https://cloud.tencent.com/developer/article/1978774

简介

本篇文章介绍三个关键词,用于指定runner的tags,使用镜像来构建运行作业,以及规定合适触发作业的when关键词。这些都是非常使用的基础关键词。对于我们编写流水线非常有帮助。

指定runner tags

tags是用于指定作业运行的runner,开发者在注册runner时,会指定runner的tag,这是一个逗号分割的列表,在注册后开发者也可以在gitlab上进行修改。

假如一个runner的tag为[Sona, Galio],那么如果作业要使用该runner运行脚本的话可以这样写

GarenJob:
  script: echo 'The only limit to our realization of tomorrow will be our doubts of today.'
  tags:
    - Sona
    - Galio

如果runner有二个tag,你可以指定一个tag,也可以指定2个。如果指定一个,并且该tag在多个runner中都存在,那么作业会在二个runner随机调度到其中一个。为了确保指定到固定的runner,建议在注册runner时使用不同的tag,并且在作业下指定tag时,列出runner的所有tag。

在作业上tags并不是必填项,如果一个作业没有配置tags那么该作业会去寻找该项目下所有可以使用的runner,并且runner配置为不必指定tag也可以调用。

镜像image

如果你的流水线要使用Docker镜像来运行,或提供基础服务,那么使用关键词image将变的很简单。

以下是一个使用image的例子

InstallJob:
  image: node:latest
  script: npm install

上面的例子就是使用nodejs的官方镜像node来进行项目构建的。注意image在shell执行器下是不生效的。即使主机上已经安装了Docker。

image的值可以是一个完整的镜像地址,如registry.example.com/my/image:latest。image除了指定镜像名外,还可以重置镜像的入口即 entrypoint,重置镜像入口该配置对于一些二进制文件镜像非常有用,比如 bitnami/kubectl 可以参考一下我的这篇文章: 使用GitLab CI/CD部署应用到Kubernetes集群的方案

deploy_k8s:
  image:
    name: bitnami/kubectl
    entrypoint: [""]
  script:
    - kubectl version

一般情况下使用的镜像都是公开的,但也并不排除有需要使用私有镜像的情况。这里介绍一下如何使用私有镜像。

使用下面命令生成秘钥

echo -n "my_username:my_password" | base64

my_username 与my_password都是登录私有镜像库的账号和密码。

执行后会生成一个base64的字符串。然后创建一个变量DOCKER_AUTH_CONFIG, DOCKER_AUTH_CONFIG变量的值为

{
    "auths": {
        "<私有镜像的域名>": {
            "auth": "上面生成的base64的字符串"
        }
    }
}

然后就可以放心大胆地使用私有镜像了。

还有一种方式是直接在GitLab Runner的配置文件里这样写

  environment = ["DOCKER_AUTH_CONFIG={\"auths\":{\"registry.example.com:5000\":{\"auth\":\"bXlfdXNlcm5hbWU6bXlfcGFzc3dvcmQ=\"}}}"]

更多方式可以查看这个文档

运行条件when

关键词when是用于配置满足何种条件下作业才会运行。一共有6个值:

  • on_success (默认): 当前一阶段的所有作业运行成功后,才会运行该作业
  • manual: 手动触发作业
  • always: 不管前面作业的状态如何,都会运行
  • on_failure: 当前面有一个作业运行失败才会运行该作业
  • delayed:延迟运行该作业
  • never: 绝不运行该作业

使用案例

stages:
  - build
  - cleanup_build
  - test
  - deploy
  - cleanup

build_job:
  stage: build
  script:
    - make build

cleanup_build_job:
  stage: cleanup_build
  script:
    - cleanup build when failed
  when: on_failure

test_job:
  stage: test
  script:
    - make test

deploy_job:
  stage: deploy
  script:
    - make deploy
  when: manual

cleanup_job:
  stage: cleanup
  script:
    - cleanup after jobs
  when: always

当build_job 失败后,cleanup_build_job 作业将会运行. 在流水线结束时总是执行cleanup_job 作业,无论前面的作业是成功或失败.要想执行deploy_job 作业,必须在GitLab UI上点击运行才可以,因为它是一个手动运行作业。

相关