安装和配置Gitlab Runner
前言
上节中提到了Gitlab CI执行过程中需要寻找匹配的Runner,这里我们就动手配置下Gitlab Runner。
在开始之前,假设你已经有了:
- 一台Linux服务器,已经安装好Docker服务。
- 一个有管理权限的Gitlab工程。
如果英文水平不错的话,可参考官方文档:
下面我讲下我安装和配置Gitlab Runner时的过程:
安装Gitlab Runner
选择安装方式
安装方式有多种,比如使用deb包、rpm包,或者直接下载二进制文件。
为了简便,我用的直接下载二进制包的做法。
一般现在用的都是x64的机器,所以直接下载amd64版本的可执行文件即可。如果是其他架构的,可对应选择其它的版本。
amd64版本的gitlab-runner下载地址为:https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-linux-amd64
可选的其它版本还有:
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-linux-386
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-linux-amd64
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-linux-arm
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-linux-s390x
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-darwin-amd64
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-windows-386.exe
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-windows-amd64.exe
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-freebsd-386
- https://s3.amazonaws.com/gitlab-runner-downloads/master/binaries/gitlab-runner-freebsd-amd64
下载下来之后,会得到一个gitlab-runner-linux-amd64
的文件,为它添加可执行权限,并将其移动到一个系统目录中:
1chmod a+x ./gitlab-runner-linux-amd64 2sudo mv ./gitlab-runner-linux-amd64 /usr/local/bin/gitlab-runner 3 4# 添加gitlab runner用户 5sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash 6 7# 安装 8sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner 9 10# 启动 11sudo gitlab-runner start
之后就可以运行gitlab-runner
来测试下效果了。
配置Gitlab Runner
注册Runner到Gitlab项目中
Gitlab服务器与Runner之间的通信,是通过Runner建立的长连接。首先Runner将自身注册进Gitlab服务器中,填好相应的配置,然后在它启动时,会主动地与Gitlab服务器建立连接。Gitlab后续派发任务时,就是通过这个长连接进行。
这个模式的好处是不需要Runner有公网地址,因为它是作为一个客户端的角色存在的,而不是一个服务端。
这个模式会要求Runner将自身的信息注册给Gitlab服务器,下面我们就讲下注册的过程。
打开Gitlab项目控制端,找到CI/CD。
打开项目中的"Settings->CI/CD",一般对应的URL是 <Git服务地址>/<组或用户名>/<项目名>/settings/ci_cd
。会看到一个如下的页面:
左侧部分,给出了注册的流程,右侧部分是共享的runner,一般由git管理员指定,设定一个或多个通用的Runner,共享给不同的项目,这里可以忽略。
记住这个图里面的2、3两个步骤中的URL和Token,后面会用到。
在服务器中注册信息
继续回到刚安装好 gitlab-runner 的服务器上,运行下面的命令:
1sudo gitlab-runner register
这时会出现一个提示框Please enter the gitlab-ci coordinator URL
,输入上面复制的Git服务器地址,回车即可。
接下来会提示Please enter the gitlab-ci token for this runner:
,输入上面复制的Token,回车即可。
接下来就会询问名称Please enter the gitlab-ci description for this runner
,随便起一个名字或直接回车均可。
再接下来会提示Please enter the gitlab-ci tags for this runner (comma separated):
,这里要输入tag列表,英文逗号分隔,如 build,test,deploy 或 foo,bar等均随意定义即可。这里的tag列表要和.gitlab-ci.yml
文件中的tags保持匹配,后面也可以改,这里不确定的话,随便填一两个就行了。
再接下来会让选择runner执行器的类型Please enter the executor: docker, docker-ssh, ssh, docker-ssh+machine, kubernetes, custom, parallels, shell, virtualbox, docker+machine:
,可选值就是上面列出的这些。
关于各种executor的区别,可查看官方文档:Executors
简单来说,最常用的executor是docker和shell。它俩的区别是docker类型依赖docker服务,shell直接用服务器当前系统。docker类型的好处是比较安全,shell类型的不安全,相当于在服务器上开了后门,.gitlab-ci.yml
中就算配置了rm -rf
,也会照单接收,执行不误的。
这里我选择的是docker
,这也是为什么一开始配置服务器那里,要安装好docker service。
选择docker之后,还会让输入基础镜像,即每次执行CI任务时,以哪个镜像作为基础镜像,这个就完全看个人需求了。比如说执行环境需要有node.js,那可以使用node镜像,需要python,可用python镜像,需要有docker,可选docker镜像等。比较常见的情况,还是自定义一个镜像,安装上自己需要的各种软件。
到这个步骤之后,Runner就注册成功了,可以在 "Settings->CI/CD"中看到它了。
配置Runner属性
Tags
在上图中,小锁按钮旁边有个编辑按钮。点击它就会进入到这个Runner的详细配置页面。
图中的"Tags"中可以随时更改这个Runner关联的Tag。使它能匹配到不同的job。
Active
同样是在上图中,Active是个复选框,勾除它可以暂时禁用这个Runner。
其它比较重要的属性,就需要在运行Runner的服务器上,修改它的配置文件了。
配置文件路径一般为/etc/gitlab-runner/config.toml
,访问它需要提升权限,示例内容为:
1concurrent = 3 2check_interval = 0 3 4[session_server] 5 session_timeout = 1800 6 7[[runners]] 8 name = "foo" 9 limit = 1 10 url = "http://git.mycompnay.com/" 11 token = "af95bc59242a89b4efe24c66332a57" 12 executor = "docker" 13 [runners.custom_build_dir] 14 [runners.docker] 15 tls_verify = false 16 image = "docker" 17 privileged = false 18 disable_entrypoint_overwrite = false 19 oom_kill_disable = false 20 disable_cache = false 21 volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"] 22 shm_size = 0 23 [runners.cache] 24 [runners.cache.s3] 25 [runners.cache.gcs] 26 27[[runners]] 28 name = "bar" 29 limit = 1 30 url = "http://git.mycompany.com/" 31 token = "eeee0ae4851d71fda2fb9d4354fff6" 32 executor = "docker" 33 [runners.custom_build_dir] 34 [runners.docker] 35 tls_verify = false 36 image = "docker" 37 privileged = false 38 disable_entrypoint_overwrite = false 39 oom_kill_disable = false 40 disable_cache = false 41 volumes = ["/cache", "/var/run/docker.sock:/var/run/docker.sock"] 42 shm_size = 0 43 [runners.cache] 44 [runners.cache.s3] 45 [runners.cache.gcs]
这里面的关键属性解释一下:
- concurrent是并发数量,代表能并发运行的最大job数量。一般需要限制concurrent的场景,是为了限制资源占用率、或为了保证顺序性。它是一个全局控制。
- [[runners]] 每运行一次
gitlab-runner register
并成功注册,就会在[[runners]]中生成一项记录。代表此runner的配置。 - limit是runner内部的并发限制,只有同时满足limit限制和全局concurrent限制时,才能够分配资源给job。
- executor、url、token等是注册时就配置的信息,不再赘述。token是处理过的token,和gitlab项目中显示的token不是同一个。
- [runners.docker] 当executor是docker的时候,这项配置会生效,代表对Docker runner的配置
- [runners.docker] 中的 image 属性是基础镜像
- [runners.docker] 中的volumes可用来挂载运行时volume,默认只有"/cache",多加了一个"/var/run/docker.sock"是为了能够在Docker容器内部再继续调用Docker服务。
关于更高级的配置细节,检阅Gitlab的官方文档:https://docs.gitlab.com/runner/configuration/advanced-configuration.html