改进了一版,可以看详细的教程:基于 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

  1. 安装 Docker Compose
  2. 创建一个 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'
  1. 确保您与以下目录位于同一目录中,docker-compose.yml 然后启动GitLab。使用 -p 自定义服务名,使用目录名为默认服务名可能会出冲突。
$ docker-compose -p gitlab-ee up -d
  1. 启动后查看 docker 容器里的日志,启动成功后就可以访问了。第一次访问需要设置密码,账户名默认为 root。
  2. docker gitlab 包括数据 迁移 gitlab ci docker in docker_git

  3. 配置 ssh ,测试连通性
  4. 我们自己的服务器如果不希望用户注册,那可以配置不开通注册功能,只能通过管理员添加。

Nginx 配置

现在我们的 gitlab 只能通过 IP 访问,这里我们通过配置 nginx 和域名的解析来实现子域名访问,例如 gitlab.wenjw.cn。

  1. 首先在阿里云配置域名解析,如下是我的域名解析配置。
  2. docker gitlab 包括数据 迁移 gitlab ci docker in docker_nginx_02

  3. 然后在服务器配置 nginx,访问对应域名的时候指向对应的服务。这里我们在 nginx_serve 目录下创建两个文件:nginx.confdocker-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;
  }
}
  1. 然后启动 nginx 服务。
$ sudo docker-compose -p nginx_serve up -d
  1. 现在我们可以在子域名访问到我们的 gitlab 服务了。

gitlab-runner

接下来配置 gitlab-runner 用来支持 CI/CD。

  1. 首先创建 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
  1. 启动 docker 容器。
$ sudo docker-compose -p gitlab-runner up -d
  1. 查看 runner 信息。
  2. 进入容器内进行注册。
$ sudo docker exec -it [Container ID] gitlab-ci-multi-runner register
  1. 注册流程,按提示输入内容。
  2. 刷新刚才查看信息的页面后,可以看到我们刚才注册的 runner。
  3. 接下来在项目中配置 .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 流程。

docker gitlab 包括数据 迁移 gitlab ci docker in docker_docker_03


点击部署以后,就可以看到我们配置的脚本的执行日志。现在流程已经全部打通,接下来只需要自定义文件中的 script 字段就可以实现完整的自动化部署流程。

docker gitlab 包括数据 迁移 gitlab ci docker in docker_nginx_04

常见错误

  1. ssh 已经配置好,但还是需要输入密码?
    ssh 的默认端口是 22,如果做了其他端口的映射,需要配置 GITLAB_OMNIBUS_CONFIG(或 gitlab.rb) 下的 gitlab_rails['gitlab_shell_ssh_port']=2222
  2. 容器启动失败?
    失败的原因有好多,关注以下步骤是否出错。1、首先查看 gitlab volumes 设置的目录,确保当前用户有操作他的权限。2、df -i 查看系统的内存使用情况,如果运行内存满了的话也不能成功启动。