docker CI操作演示分享(第四期)

引言

java项目:

1、将项目通过maven进行编译打包

2、将文件上传到指定的服务器中

3、将war包放到tomcat的目录中

4、通过Dockerfile将tomcat和war包转成一个镜像,由docker-compose去运行容器

项目更新后:将上述流程再次的从头到尾的执行一次
go项目:

1、将项目通过go build编译成二进制执行文件打包(或者直接将项目代码打包压缩)

2、将文件上传到指定的服务器中

3、解压文件到指定目录

4、通过Dockerfile将go build后的二进制文件转成一个镜像,由docker-compose去运行容器 项目更新后:将上述流程再次的从头到尾的执行一次

CI介绍和实现

CI (continuous intergration) 持续集成

持续集成:编写代码时,完成一个功能后,立即提交代码到git仓库中,将项目重新构建并测试。

1、快速发现错误

2、阻止代码偏离主分支

实现持续集成

搭建gitlab服务器

1、创建一个全新的虚拟机,并且只是指定4G运行内存

2、安装docker以及docker-compose

3、docker-compose.yml文件去安装gitlab(下载和运行的时间比较长)

4、将ssh的默认端口22修改为60022 vim /etc/ssh/sshd_config 修改 port 22 --> 60022 systemctl restart sshd

docker-compose.yml文件

复制代码
version: '2'
services:
  gitlab:
    image: 'gitlab/gitlab-ce:12.4.1-ce.0'
    restart: always
    container_name: gitlab
    hostname: 'gitlab'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://47.119.16.196'
        nginx['enable'] = true
        nginx['redirect_http_to_https'] = true
        nginx['redirect_http_to_https_port'] = 80
        # 开启 pages 功能
        pages_external_url 'http://47.119.16.196'
        gitlab_pages['inplace_chroot'] = true
        gitlab_rails['lfs_enabled'] = true
        # 设置时区为北京时间
        gitlab_rails['time_zone'] = 'PRC'
        gitlab_rails['gitlab_email_enabled'] = true
        gitlab_rails['gitlab_email_from'] = 'code@example.com'
        gitlab_rails['gitlab_email_display_name'] = 'code'
        gitlab_rails['gitlab_email_reply_to'] = 'code@example.com'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['smtp_address'] = 'smtp.exmail.qq.com'
        gitlab_rails['smtp_port'] = 465
        gitlab_rails['smtp_user_name'] = 'code@example.com'
        gitlab_rails['smtp_password'] = '******'
        gitlab_rails['smtp_domain'] = 'exmail.qq.com'
        gitlab_rails['smtp_authentication'] = 'login'
        gitlab_rails['smtp_enable_starttls_auto'] = true
        gitlab_rails['smtp_tls'] = true
        unicorn['worker_processes'] = 2
        unicorn['worker_timeout'] = 60
        sidekiq['concurrency'] = 4
        # 解决 GitLab 响应 Forbidden
        gitlab_rails['rack_attack_git_basic_auth'] = {'enabled' => true, 'ip_whitelist' => ["0.0.0.0"], 'maxretry' => 300, 'findtime' => 5, 'bantime' => 60}
    # 内存和CPU限制,worker_processes 配置声明使用2核CPU
    mem_limit: 5500m
    cpu_shares: 200 #2核
    ports:
      - '443:443'
      - '80:80'
      - '22:22'
    volumes:
      # 挂载宿主机目录可以根据实际情况挂载
      - '/opt/gitlab-docker/config:/etc/gitlab'
      - '/opt/gitlab-docker/logs:/var/log/gitlab'
      - '/opt/gitlab-docker/data:/var/opt/gitlab'
      - '/etc/localtime:/etc/localtime'

执行命令

bash 复制代码
docker-compose up -d

搭建gitlab-runner

步骤:

1、环境准备

创建目录:/opt/gitlab-runner

配置daemon.json,私有化仓库

bash 复制代码
{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ],
  "insecure-registries": [
    "39.108.227.113:5000"
  ]
}

复制这个daemon.json 到/etc/docker/,并执行下面命令

bash 复制代码
systemctl daemon-reload
systemctl restart docker

2、在/opt/gitlab-runner目录下创建一个docker-compose.yml文件

bash 复制代码
version: 'v2.2.2'
services:
  gitlab-runner:
    image: gitlab/gitlab-runner
    restart: always
    container_name: gitlab-runner
    privileged: true
    volumes:
      - ./config:/etc/gitlab-runner
      - /var/run/docker.sock:/var/run/docker.sock

然后执行命令

bash 复制代码
sudo chown root:root /var/run/docker.sock

最后启动容器

bash 复制代码
docker-compose up -d --build

3、添加容器权限

保证容器可以使用宿主机器的docker,执行下面命令

bash 复制代码
docker exec -it gitlab-runner usermod -aG root gitlab-runner

4、注册Runner信息到gitlab

bash 复制代码
docker exec -it gitlab-runner gitlab-runner register

#输入gitlab地址
Please enter the gitlab-ci coordinator URL
http://106.55.229.11/

#输入gitlab token
Please enter the gitlab-ci token for this runner:
xXapfgMsA_6eG5YUzTKb

#输入runner 说明,这里取个名字就可以了

#设置tag,可以用于指定在构建规定的tag时触发ci
Please enter the gitlab-ci tags for this runner : 
deploy

。。。