Gitlab Runner 实现内网自动部署
最近出差支持项目上线,我们的部署流程是Gitlab CI打包Docker
镜像上传到云镜像服务,现场部署由于内网无法访问公网,没办法直接使用脚本实现自动部署(Runner没办法连接~)。目前的情况是,客户提供了一台可访问外网的机器(不提供也可以使用本机),并且在同一个网段,也算是放开一个口子,可以基于这一台机器去实现不同操作,以下便是提供的一种解决思路,减少工作量。
Ubuntu安装Gitlab Runner
添加Gitlab Runner仓库
首先,添加Gitlab Runner的官方仓库,运行一下命令添加:
1 | curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash |
安装Gitlab Runner
使用apt
包管理器安装Gitlab Runner
1 | sudo apt-get install gitlab-runner |
检查Gitlab Runner状态
1 | sudo gitlab-runner status |
查看Runner运行状态
1 | root@runner:/home/jonty# sudo gitlab-runner status |
成功在Ubuntu安装Gitlab Runner
卸载Gitlab Runner
停止服务:
1 | gitlab-runner stop |
卸载服务:
1 | gitlab-runner uninstall |
注册Gitlab Runner
将Runner注册到Gitlab项目中
1、获取Gitlab项目注册令牌:
- 仓库RUL地址
- 仓库注册令牌
2、 注册Gitlab Runner
1 | sudo gitlab-runner register |
按照提示输入Gitlab 示例的URL、项目的注册令牌以及Runner描述信息、Tag
这里executor
选择shell
3、激活Gitlab Runner
1 | sudo gitlab-runner verify |
在项目Runner中可以看到已经注册完成:
4、Gitlab Runner后台运行
使用“&”将在后台启动,即使关闭 SSH 会话,它仍然存在,只有在服务器重新启动或关闭时才会停止
1 | sudo gitlab-runner run& |
定义Job
在.gitlab-ci.yml
中定义Job
script
执行runner
宿主机/bin/bash /images_194/deploy_194.sh
脚本,实现曲线救国
1 | deploy_dev: |
最后贴出连接局域网另一台机器部署的脚本:
- 拉取公网镜像,重新打Tag,推送到内网
Registry
- ssh连接到内网机器,执行部署脚本
- 完成部署
1 |
|
问题
如果Runner
在执行服务器脚本时报错,如下:
1 | Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/auth: dial unix /var/run/docker.sock: connect: permission denied |
解决方案:
授予运行作业的用户访问 Docker 资源的权限
1 | usermod -a -G docker gitlab-runner |
参考:How to fix Gitlab Runner ‘dial unix /var/run/docker.sock: connect: permission denied’ | TechOverflow