jenkins+docker+springboot 持续化集成

       最近听到最多的词就是devops,能真正玩转devopo的个人觉得他真的是一个全能战士。现在很多公司都在推devops,devops到底是干啥的?我们也经常听到只言片语如:自动化运维,运维开发工程师,容器化虚拟化,敏捷开发,研发运营一体化等,觉得他们知流程管理,晓开发运维,悉技术框架总之很厉害得感觉。最近在学习devops容器化技术,下面以公司的项目为例记录下这几天学习docker在持续集成运用的过程。

一.持续集成方案图

二.服务器部署详情

在三台虚拟机上进行的,并在虚拟机上安装docker(yum install -y docker)

                  虚拟机                         用途               搭建
     centos7    192.168.137.3              私有docker镜像仓库        使用docker镜像搭建
     centos7    192.168.137.4                    应用服务器        vmware虚拟机宿主机
     centos7    192.168.137.5                    jenkins服务器         使用docker镜像搭建

三.服务器搭建

1.docker repository

    通过docker pull repository下载仓库镜像

    运行docker repository镜像:

    docker run -d -p 5000:5000 --name myregistry -v /home/docker-registry:/var/lib/registry docker.io/registry

    这里我将宿主机的/home/docker-registry映射到容器的/var/lib/registry,容器端口5000映射出来

2.jenkins

    通过docker pull jenkins下载仓库镜像

    运行jenkins镜像:

    docker run -p 8080:8080  -v /usr/local/docker_volume/jenkins:/var/jenkins_home --name my_jenkins -d docker.io/jenkins

    这里我将宿主机的/usr/local/docker_volume/jenkins映射到容器的/var/jenkins_home(容器中jenkins的目录,目的是方便以后迁移和手动安装jenkins工具),容器端口8080映      射出来

    访问jenkins:http://192.168.137.5:8080 

3.jenkins 配置环境

     以公司spring boot项目为例配置maven和jdk

     将maven和jdk1.8包放到宿主机目录/usr/local/docker_volume/jenkins,由于映射目录的原因容器/var/jenkins_home目录下也       会存在。

     jdk和maven在jenkins全局工具配置如下:

      

     

      setting中maven仓库地址也配置在映射目录下 

/var/jenkins_home/.m2/repository

四.项目配置

     1.构建配置

          

     2.构建后操作配置

           

      3.部署项目

         这里是构建后的操作大致步骤就是通过docker.sh脚本进行如下操作:

         a.生成新的项目docker镜像

         b.停止并删除正在运行的项目容器

         c.启动新版本的项目           

         d.push docker镜像版本到docker仓库

         ssh server配置中的远程目录/home/docker目录下如下文件及文件夹

           cortp-cortpweb-1.0.0.jar  maven构建后的项目jar包
           Dockerfile  用于构建镜像的dockerfile
           docker.sh   处理脚本
           jdk-8u152-linux-x64.tar.gz  镜像所需jdk

           log   项目日志文件目录(将容器/log日志文件夹映射到这个目录下)
           web  项目的静态资源目录(将其目录映射到容器目录中方便更新)

  构建镜像的Dockerfile文件

#Dockerfile文件
FROM centos:latest   #基础镜像
MAINTAINER modian([email protected])
ADD jdk-8u152-linux-x64.tar.gz /usr/local/jdk8  #配置容器jdk
ENV JAVA_HOME /usr/local/jdk8/jdk1.8.0_152
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH :$JAVA_HOME/lib:$JRE_HOME/lib 
ENV PATH $PATH:$JAVA_HOME/bin
#基础镜像同步当前日期
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ADD cortp-cortpweb-1.0.0.jar app.jar  #拷贝项目jar包为app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.profiles.active=sit"]   #运行项目jar包

 docker.sh脚本文件

#!/bin/bash   
Build_id=$1      #构建id号
Container_name=spring-boot  #容器名
Image_name=centos/$Container_name  #镜像名
#build images
docker build . -t $Image_name:$Build_id  #生成镜像
#delet container and run
docker ps -a | grep spring-boot   #下面的if判断删除现有正在运行的容器
ret=$?
if [ $ret -eq 0 ];then
  docker stop $Container_name
  container_id=`docker ps -a | grep spring-boot | awk -F " " '{print $1}'`
  docker rm $container_id
fi
docker run -itd -p 8081:8081 -v /home/docker/web:/usr/local/java/web -v /home/docker/log:/log --name $Container_name $Image_name:$Build_id
#push docke registry
docker push $Image_name  #push 镜像到仓库

       这里其实只是一个简单的持续化集成的小试验,真正持续化集成和交付还需要一个更有效且完整的方案,现在比较成熟的大公司用的vSphere虚拟化技术+docker容器化技术+容器编排工具等

        

     

你可能感兴趣的:(配置管理,Linux)