首页 > 技术文章 > Docker教程---CI持续集成

aqicheng 2020-08-05 11:02 原文

一、引言

  项目部署:

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

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

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

    4、通过Dockerfile将Tomcat和war包转成一个镜像,由DockerCompose去运行容器

二、CI介绍

  CI(continuous intergration)持续集成

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

  优点:

    快速发现错误

    防止代码偏离主分支

 三、实现持续集成

  1、创建一个全新的虚拟机,并且至少4G的运行内存 IP地址:10.0.0.11

  2、安装docker以及docker-compose

systemctl disable firewalld
systemctl stop firewalld
setenforce 0
yum -y install yum-utils device-mapper-persisten-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makacache fast
yum -y install docker-ce
systemctl start docker                  启动docker
systemctl enable docker                 设置开机自启
docker run hello-world                  测试
安装docker-compose见上一篇文章

  3、docker-compose.yml文件去安装gitlab

mkdir /opt/docker_gitlab
vim docker-compose.yml

version: '3.1'
services:
 gitlad:
  image: 'twang2218/gitlab-ce-zh:11.1.4'
  container_name: "gitlab"
  restart: always
  privileged: true
  hostname: 'gitlab'
  environment:
   TZ: 'Asia/Shanghai'
   GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://10.0.0.11'
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['gitlab_shell_ssh_port'] = 22
    #gitlab_rails['initial_root_password'] = 'Admin@123456'   #官网镜像需要设置密码,此镜像不需要
  ports:
   - '80:80'
   - '443:443'
   - '22:22'
  volumes:
   - /opt/docker_gitlab/config:/etc/gitlab
   - /opt/docker_gitlab/data:/var/opt/gitlab
   - /opt/docker_gitlab/logs:/var/log/gitlab
  vim /etc/ssh/sshd_config 修改ssh监听端口号为60022,解决映射冲突
  Port 60022

  systemctl restart sshd   重启服务

  docker-compose up -d     docker构建gitlab服务(下载和运行是比较慢的)

   验证,默认使用80端口

  

       

     设置密码,并登录,默认账户是root,密码我设置得是password。

        新版本有修改端口号得看下面得配置文件

version: '3.1'
services:
 gitlad:
  image: 'gitlab/gitlab-ce'
  container_name: "gitlab"
  restart: always
  privileged: true
  hostname: 'gitlab'
  environment:
   TZ: 'Asia/Shanghai'
   GITLAB_OMNIBUS_CONFIG: |
    external_url 'http://172.24.174.20:20080'
    gitlab_rails['time_zone'] = 'Asia/Shanghai'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['gitlab_shell_ssh_port'] = 20022
    gitlab_rails['initial_root_password'] = 'Admin@123456'
  ports:
   - '20080:20080'
   - '20443:443'
   - '20022:20022'
  volumes:
   - /data/docker/docker_gitlab/config:/etc/gitlab
   - /data/docker/docker_gitlab/data:/var/opt/gitlab
   - /data/docker/docker_gitlab/logs:/var/log/gitlab

  4、安装gitlab-tunner

    使用IP:10.0.0.31

    安装apache-maven、jdk

http://49.233.184.186/fdb/soft1/jdk-8u251-linux-x64.tar.gz?cr=2508131169&r=0.31045177099010024
tar -zxvf jdk-8u251-linux-x64.tar.gz
rm -rf jdk-8u251-linux-x64.tar.gz

wget https://raw.githubusercontent.com/topsale/resources/master/maven/apache-maven-3.5.3-bin.tar.gz
cp apache
-maven-3.5.3-bin.tar.gz /usr/local/maven
tar
-zxvf apache-maven-3.5.3-bin.tar.gz
rm -fr apache-maven-3.5.3-bin.tar.gz

    配置环境变量

JAVA_HOME=/usr/local/java/jdk1.8.0_251
MAVEN_HOME=/usr/local/maven/apache-maven-3.5.3
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:/usr/local/bin/

    安装gitlab-runner服务,并在容器里面配置环境变量,使其可以运行命令

mkdir /opt/docker_gitlab-runner
cd /opt/docker_gitlab-runner
vim docker-compose.yml

version: '3.1'
services:
 runner:
  image: 'gitlab/gitlab-runner:v11.4.2'
  container_name: gitlab-runner
  restart: always
  volumes:
   - /opt/docker_gitlab-runner/config:/etc/gitlab-runner
   - /var/run/docker.sock:/var/run/docker.sock
   - /usr/local/maven/apache-maven-3.5.3:/usr/local/maven/apache-maven-3.5.3
   - /usr/local/java/jdk1.8.0_251:/usr/local/java/jdk1.8.0_251
   - /usr/local/bin:/usr/local/bin
   - /usr/bin/docker:/usr/bin/docker

  在宿主机启动docker程序后先执行,如果重启过docker,重新执行

chown root:root /var/run/docker.sock

  在/opt/docker_gitlab-runner目录中执行

docker-compose up -d --build

  添加容器权限,保证容器可以使用宿主机的docker

docker exec -it gitlab-runner usermod -aG root gitlab-runner

四、关联gitlab项目

  1、gitlab创建项目

        

 

  2、注册gitlab-runner

[root@computer ~]# docker exec -it gitlab-runner gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=25 revision=cf91d5e1 version=11.4.2
Running in system-mode.                            
                                                   
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):             项目集成CI地址
http://10.0.0.11/ 
Please enter the gitlab-ci token for this runner:                                  项目集成CI注册令牌
ickaCtLRCympzbEwtyoH
Please enter the gitlab-ci description for this runner:                            添加描述
[b0e7c9960f0b]: testcijicheng
Please enter the gitlab-ci tags for this runner (comma separated):                 添加tag
deploy
Registering runner... succeeded                     runner=ickaCtLR
Please enter the executor: shell, virtualbox, kubernetes, docker, docker-ssh, parallels, ssh, docker+machine, docker-ssh+machine:   以什么方式执行,选sehll
shell
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded! 

 

刷新页面,再次点击展开Runner

 

 

 

五、整合项目入门测试

  1、创建maven工程,编写html页面

         

     创建一个简单的maven工程

           

           

     填写项目名称

          

    指定打包方式,在右下角导入包

    

    

    复制这个目录

    

 

      替换这个这个目录

    

    在webapp下面新建一个inde.html页面

           

           

    记得在这一步前:先配置好intellij IDEA和tomcat、jdk

   

  导入包

  

 

 

   

  

   创建一个本地的gitlab仓库

           

           

    添加到暂存区

   记得在这一步前:先配置好intellij IDEA和git

           

      添加到本地gitlab仓库

     

          

 

  2、将maven工程推送到gitlab中

         

      

    输入刚才复制的http的路径

    

     接着输入账户和密码:root/password。

    

     刷新页面,就能看到刚提交的代码

 3、编写gitlab-ci.yml文件

       

         项目添加.gitlab-ci.yml文件

   

    添加一下内容

stages:
  - test
test:
  stage:
  script:
    - echo first test ci

    然后提交到到gitlab上,刷新gitlab服务器内容

         

  4、可以在gitlab中查看到gitlab-ci.yml编写的内容

      

      

  注意:记得把jdk、mvn安装路径写入容器得环境变量里面,mvn打包运行需要mvn

docker exec -it  gitlab-runner  /bin/bash
apt-get update
apt-get install -y vim
vim /etc/profile
JAVA_HOME=/usr/local/java/jdk1.8.0_251
MAVEN_HOME=/usr/local/maven/apache-maven-3.5.3
PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin:/usr/local/bin/
source /etc/profile

六、CI持续集成实现

  1、编写.gitlab-ci.yml

    找到mvn打包得路径,添加打包命令

stages:
  - dev
  - test
  - deploy
dev:
  stage: dev     ###执行阶段
  tags:
    - "dev"      #指定带有dev标签的gitlab-runner运行此步骤
  script:
    - echo first test ci
    - /usr/local/maven/apache-maven-3.5.3/bin/mvn package
  only:
    - tags   #只有配置了tags号才能触发这个步骤

    提交代码至gitlab上,自动执行流水线

      

   项目中创建一个docker目录

       

   

   在docker下创建一个Dockerfile文件

  

   添加如下内容

FROM daocloud.io/library/tomcat:8.5.15-jre8
COPY testci.war /usr/local/tomcat/webapps

  同级目录下创建docker-compose.yml文件

version : "3.1"
services:
  testci:
    build: docker
    restart: always
    container_name: testci
    ports:
      - 8080:8080

  在.gitlab-ci.yml下添加如下内容

  - cp target/testci-1.0-SNAPSHOT.war docker/testci.war           复制war
  - docker-compose down                                             先删除正在运行得容器
  - docker-compose up -d --build                                    启动一个新容器
  - docker rmi $(docker images -qf dangling=true)                   删除所有名字为none的镜像

  提交代码之后,访问浏览器:http://ip:8080端口就能看到项目效果了。

 

 

 

推荐阅读