改进了一版,可以看详细的教程:基于 Docker 的 CI/CD
Gitlab
整理自官方文档,Docker 配置 Gitlab。
先觉条件
首先需要安装 Docker,官方安装文档。
设置卷的位置
此处可以设置环境变量,也可以在配置文件中直接填写对应的地址。
# linux
$ export GITLAB_HOME=/srv/gitlab
# Mac
$ export GITLAB_HOME=$HOME/gitlab
设置环境变量 $GITLAB_HOME
,该变量指向配置,日志和数据文件将驻留的目录。GitLab容器使用主机安装的卷来存储持久数据。
本地路径 | 容器路径 | 用法 |
$GITLAB_HOME/data | /var/opt/gitlab | 用于存储应用程序数据。 |
$GITLAB_HOME/logs | /var/log/gitlab | 用于存储日志。 |
$GITLAB_HOME/config | /etc/gitlab | 用于存储GitLab配置文件。 |
使用 Docker Compose 安装 GitLab
- 安装 Docker Compose。
- 创建一个 docker-compose.yml 文件,这里
gitlab-ce
是个人版,ee
是企业版。
gitlab:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.wenjw.cn'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.wenjw.cn/'
gitlab_rails['gitlab_shell_ssh_port']=2222
ports:
- '8003:80'
- '2222:22'
volumes:
- '/home/wjw/www/srv/gitlab/config:/etc/gitlab'
- '/home/wjw/www/srv/gitlab/logs:/var/log/gitlab'
- '/home/wjw/www/srv/gitlab/data:/var/opt/gitlab'
- 确保您与以下目录位于同一目录中,
docker-compose.yml
然后启动GitLab。使用 -p 自定义服务名,使用目录名为默认服务名可能会出冲突。
$ docker-compose -p gitlab-ee up -d
- 启动后查看 docker 容器里的日志,启动成功后就可以访问了。第一次访问需要设置密码,账户名默认为 root。
- 配置 ssh ,测试连通性
- 我们自己的服务器如果不希望用户注册,那可以配置不开通注册功能,只能通过管理员添加。
Nginx 配置
现在我们的 gitlab 只能通过 IP 访问,这里我们通过配置 nginx 和域名的解析来实现子域名访问,例如 gitlab.wenjw.cn。
- 首先在阿里云配置域名解析,如下是我的域名解析配置。
- 然后在服务器配置 nginx,访问对应域名的时候指向对应的服务。这里我们在 nginx_serve 目录下创建两个文件:
nginx.conf
、docker-compose.yml
。
docker-compose.yml:
version: "3.5"
services:
nginx_serve:
image: nginx
ports:
- 80:80
container_name: "nginx_serve"
restart: unless-stopped
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
nginx.conf:
# gitlab-ce
server {
listen 80;
server_name gitlab.wenjw.com gitlab.wenjw.cn;
location / {
proxy_pass http://xx.xx.xx.xxx:8003;
}
}
- 然后启动 nginx 服务。
$ sudo docker-compose -p nginx_serve up -d
- 现在我们可以在子域名访问到我们的 gitlab 服务了。
gitlab-runner
接下来配置 gitlab-runner 用来支持 CI/CD。
- 首先创建 docker-compose.yml 文件。
version: "3"
services:
app:
image: gitlab/gitlab-runner
container_name: gitlab-runner-docker
restart: always
volumes:
- ./config:/etc/gitlab-runner
- /home/wjw/www/srv/gitlab-runner/docker.sock:/var/run/docker.sock
- 启动 docker 容器。
$ sudo docker-compose -p gitlab-runner up -d
- 查看 runner 信息。
- 进入容器内进行注册。
$ sudo docker exec -it [Container ID] gitlab-ci-multi-runner register
- 注册流程,按提示输入内容。
- 刷新刚才查看信息的页面后,可以看到我们刚才注册的 runner。
- 接下来在项目中配置
.gitlab-ci.yml
文件,用来测试我们的 ci 流程。配置参数可以看我以前写的一篇博客,gitlab 配置作业。
# .gitlab-ci.yml
stages:
- deploy
- rollback
# dev
deploy_develop:
stage: deploy
only:
- develop
tags:
- blog
script:
- echo $HOME
# 部署 production 环境
deploy_production:
stage: deploy
only:
- master
tags:
- blog
script:
- echo $HOME
when: manual
# 线上回滚
deploy_production_rollback:
stage: rollback
only:
- master
tags:
- social-h5
script:
- echo $HOME
when: manual
提交后就可以看到我们的 ci 流程。
点击部署以后,就可以看到我们配置的脚本的执行日志。现在流程已经全部打通,接下来只需要自定义文件中的 script 字段就可以实现完整的自动化部署流程。
常见错误
- ssh 已经配置好,但还是需要输入密码?
ssh 的默认端口是 22,如果做了其他端口的映射,需要配置GITLAB_OMNIBUS_CONFIG
(或 gitlab.rb) 下的gitlab_rails['gitlab_shell_ssh_port']=2222
。 - 容器启动失败?
失败的原因有好多,关注以下步骤是否出错。1、首先查看 gitlab volumes 设置的目录,确保当前用户有操作他的权限。2、df -i 查看系统的内存使用情况,如果运行内存满了的话也不能成功启动。