Docker CI持续集成

一、引言

  项目部署:

    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
  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。

  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页面

            

           

   

  导入包

  

   

  

   创建一个本地的gitlab仓库

           

           

    添加到暂存区

           

      添加到本地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编写的内容

      

      

六、CI持续集成实现

  1、编写.gitlab-ci.yml

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

复制代码

stages:
  - test
test:
  stage:
  script:
    - echo first test ci
    - /usr/local/maven/apache-maven-3.5.3/bin/mvn package

复制代码

    提交代码至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端口就能看到项目效果了。

 

 

注意:本文有不理解之处,加QQ:1300536862,探讨

推荐:需要租用云服务器,域名等其他服务的可以扫描下方二维码,云服务器免费领取使用,华为云服务

        

猜你喜欢

转载自blog.csdn.net/qq_33648367/article/details/112600304
今日推荐