一、引言

  项目部署:

    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端口

  

docker 洗白 docker ci_docker

       

docker 洗白 docker ci_docker_02

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

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

version: '3'
 
services:
  gitlab:
    image: 'gitlab/gitlab-ce'
    container_name: "gitlab"
    restart: always                  
    hostname: 'harbor'
    environment:
      TZ: 'Asia/Shanghai'       
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.5.189:1080'  # web站点访问地址
        gitlab_rails['time_zone'] = 'Asia/Shanghai'
        gitlab_rails['smtp_enable'] = true
        gitlab_rails['initial_root_password'] = 'Admin@123456' 
    ports:
      - '1080:1080' # 注意宿主机和容器内部的端口要一致,否则external_url无法访问
      - '1443:443'
      - '1022:22'
    volumes:
      - ./config:/etc/gitlab
      - ./data:/var/opt/gitlab
      - ./logs:/var/log/gitlab
    logging: 
      driver: "json-file"
      options: 
        max-size: "2g"
        max-file: "2"

  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创建项目

        

docker 洗白 docker ci_docker 洗白_03

 

  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!

 

docker 洗白 docker ci_maven_04

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

 

docker 洗白 docker ci_docker_05

 

 

docker 洗白 docker ci_maven_06

五、整合项目入门测试

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

         

docker 洗白 docker ci_docker_07

     创建一个简单的maven工程

           

docker 洗白 docker ci_git_08

           

docker 洗白 docker ci_git_09

     填写项目名称

          

docker 洗白 docker ci_git_10

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

    

docker 洗白 docker ci_maven_11

    

docker 洗白 docker ci_git_12

    复制这个目录

    

docker 洗白 docker ci_maven_13

 

      替换这个这个目录

    

docker 洗白 docker ci_git_14

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

           

docker 洗白 docker ci_docker_15

           

docker 洗白 docker ci_docker_16

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

   

docker 洗白 docker ci_docker_17

  导入包

  

docker 洗白 docker ci_docker_17

 

 

   

docker 洗白 docker ci_docker_19

  

docker 洗白 docker ci_docker 洗白_20

   创建一个本地的gitlab仓库

           

docker 洗白 docker ci_maven_21

           

docker 洗白 docker ci_docker_22

    添加到暂存区

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

           

docker 洗白 docker ci_git_23

      添加到本地gitlab仓库

     

docker 洗白 docker ci_git_24

          

docker 洗白 docker ci_docker_25

 

docker 洗白 docker ci_git_26

  2、将maven工程推送到gitlab中

         

docker 洗白 docker ci_maven_27

      

docker 洗白 docker ci_docker_28

    输入刚才复制的http的路径

    

docker 洗白 docker ci_docker_29

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

    

docker 洗白 docker ci_maven_30

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

 3、编写gitlab-ci.yml文件

       

docker 洗白 docker ci_docker_31

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

   

docker 洗白 docker ci_git_32

    添加一下内容

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

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

         

docker 洗白 docker ci_docker_33

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

      

docker 洗白 docker ci_docker_34

      

docker 洗白 docker ci_maven_35

  注意:记得把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 ci_docker_36

   项目中创建一个docker目录

       

docker 洗白 docker ci_docker_37

   

docker 洗白 docker ci_docker 洗白_38

   在docker下创建一个Dockerfile文件

  

docker 洗白 docker ci_maven_39

   添加如下内容

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

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

docker 洗白 docker ci_maven_40

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的镜像

docker 洗白 docker ci_docker_41

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

 

docker 洗白 docker ci_maven_42

 

 

docker 洗白 docker ci_maven_43