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上点击运行才可以,因为它是一个手动运行作业。