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

网友投稿 2887 2022-05-30

简介

本篇文章介绍三个关键词,用于指定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

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

如果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

如果你要使用一个私有仓库的镜像,那么首先需要配置Docker授权,可以使用静态授权,即账号密码登录私有库,

也可以使用Docker的秘钥。

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

使用下面命令生成秘钥

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

参考资料

https://docs.gitlab.com/ee/ci/yaml/#image

https://docs.gitlab.com/ee/ci/docker/using_docker_images.html

https://docs.gitlab.com/ee/ci/docker/using_docker_images.html#override-the-entrypoint-of-an-image

DevOps Git

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:技术分享 | 测试人员必须掌握的测试用例
下一篇:SAP Analytics Cloud和SAP Cloud for Customer的集成
相关文章