改进了一版,可以看详细的教程:基于 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.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 查看系统的内存使用情况,如果运行内存满了的话也不能成功启动。