docker部署gitlab以及runner实现CICD
一、前言
二、安装配置Gitlab
ps: 全部配置均在gitlab.rb上,不用gitlab.yml。

Gitlab大概流程,由于我是禁止gitlab自带Nginx,因此我们只需要两个端口,一个是github服务监听地址端口,一个是ssh端口
启动Gitlab
mkdir -p /mount/gitlab/{config,logs,data} |
有关Docker容器端口映射,可以参考理解Docker容器端口映射
修改gitlab.rb文件
vim /mount/gitlab/config/gitlab.rb |
修改这些配置之后达到的效果:
gitlab 自带的 nginx 关闭了,换成了监听 tcp 80 端口,这样就能使用前置 nginx 反向代理该端口。
配置了域名地址和 ssh 地址,端口,这样页面上的克隆地址就会是这里配置的地址,ssh 端口使用 2022是到时候 nginx 上面会使用的端口,gitlab 本身还是 22 的 ssh 端口①。
①来源参考于使用 Nginx 代理内网 GitLab..
重新配置docker exec -it gitlab gitlab-ctl reconfigure
配置Nginx反向代理
如果是使用oneinstack、lnmp等,请新建网站并申请证书。在网站的配置文件添加反代内容
#PROXY-START |
注意,反向代理一定需要配置:proxy_set_header X-Forwarded-Ssl on; 否则会出现登录 422 的问题!client_max_body_size 100m; 配置上传大小,还有就是如果使用oneinstack等,配置文件会拦截README .git*等等文件,造成不能显示和在线修改保存,自行取消就好了
location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) { |
自此Gitlab已配置完成,自行测试
git remote -v |
三、部署Gitlab Runner
CI/CD 即持续集成、持续部署。我们也采用Docker快速部署。
运行:
docker run -d --name gitlab-runner --restart always \ |
配置Runner
Runner是为GitLab接收和执行CI/CD工作的进程。你可以将Runner注册成单独的用户,Runner可以部署在其他的服务器上,以及在你的本地机器上。你可以根据自己的需要注册任意数量的Runner。
Runners 有几种形式,我测试方便就是用共享(shared)
- shared - Runs jobs from all unassigned projects.
- group - Runs jobs from all unassigned projects in its group.
- specific - Runs jobs from assigned projects.
- locked - Cannot be assigned to other projects.
- paused - Not available to run jobs.
在部署runner机器上执行docker exec -it gitlab-runner gitlab-runner register 如图所示:

Gitlab instance URL:部署gitlab绑定的域名
Registration token: 注册token,我要搭建的是共享Runner,在管理面板下的Runner找到,域名路径
https://domain/admin/runnerstags:Runner标签,多个标签用英文逗号分隔。这个标签会在以后写 CI 配置文件时用到,用来指定一个 Job 让哪个 Runner 来执行。
executor:执行器,我们选择docker
Docker image:我们选择轻量的alpine
提示成功之后,我们刷新刚才的Runner页面,查看

优化Runner
修改config.toml文件 |
自此Runner部署完成,自行参考gitlan文档编写CI

四、备份Gitlab
Gitlab自带备份命令,具体参考官方文档Back up and restore GitLab
这里介绍的是利用rclone备份到OneDrive、Google Drive等等,gitlab默认配置第三方云储存只支持AWS、Google Cloud。
docker部署的gitlab,备份文件在/mount/gitlab/data/backups。我使用的是秋大的backup脚本,去除mysql备份和ftp,添加gitlab备份处理,这里备份都是使用秋大备份目录结构,默认gitlab备份目录只保持最新的。
增加gitlab_backup函数,docker exec -t ${DOCKER_NAME} gitlab-backup create Gitlab 12.1低版本使用docker exec -t <container name> gitlab-rake gitlab:backup:create命令
# gitlab-backup |
添加定时任务
# gitlab_backup.sh |
以上没有在另一台机器做过还原测试,仅在本地做解密和验证文件完整性,仅供参考。