一光年

[Gitlab-CICD] 跨服务器部署执行gitlab-runner任务

2019.11.05

之前一直在单台服务器上部署gitlab和gitlab-runner,任务执行一切顺利。当配置多台服务器ABC,则情况稍有变化。例如以下:

  • 服务器集群公用ABC三台服务器
  • 服务器A搭载Gitlab服务
  • 服务器B和C部署多个不同的Web服务

部署之前我的预想是,Gitlab-Runner分别跑在服务器B和服务器C上,那么runner实例也应该是跑在各自的服务器环境上。那么只需要定义普通的shell执行器就可以正常运行。

但实际情况上,服务器B和服务器C上跑的gitlab-runner,runner实例仍然是运行在服务器A上。这就导致所有执行的命令,都是在服务器A上。

对于这种情况,runner在注册时提供了 [Executor - SSH] 的选项。即运行runner先通过ssh登录远程主机,再执行普通的shell类型操作。

官方参考

具体操作如下:

1.在服务器C运行gitlab-runner

关于gitlab-runner的安装和运行,可以参考这一篇文章。

2.注册gitlab-runner

与普通shell注册大同小异,区别在于选择executor时选择SSH,之后会提示输入SSH对象主机的地址、登录用户名和密码等。

也可以直接修改runner的配置文件

...
[[runners]]
  executor = "ssh"
  [runners.ssh]
    host = "example.com"
    port = "22"
    user = "root"
    password = "password"
    identity_file = "/path/to/identity/file"
...

3.启动Docker时权限问题

如果使用了docker,提交gitlab-ci.yml后,gitlab-runner执行时可能会遇到权限问题。

Get permission denied xxxxxxx

这是因为当前用户为gitlab-runner,而在SSH登录如果要启用docker则需要root组的权限。

解决办法参照以下:

# sudo groupadd docker           #添加docker用户组
# sudo gpasswd -a $USER docker   #将登陆用户加入到docker用户组中
# newgrp docker                  #更新用户组
# docker ps                      #测试docker命令是否可以使用sudo正常使用