欢迎您, 来到 宁时修博客.^_^

Jenkins Pipeline+Gitlab+Docker自动化构建Tomcat容器运行Java项目

2018/12/05 言则行 Docker,Jenkins 1404
Jenkins Pipeline+Gitlab+Docker自动化构建Tomcat容器运行Java项目

一、环境

    系统都是CentOS 7,Jenkins、Gitlab、Docker都是yum安装的。

IP服务备注
192.168.184.122Jenkins+Docker服务拉取代码,构建镜像
192.168.184.123Gitlab服务存放代码
192.168.184.124Docker拉取镜像,运行容器
192.168.184.36Docker+Harbor服务镜像仓库


二、大致流程

    1、给代码打Tag,push到Gitlab;

    2、输入Tag号给Jenkins;

    3、Jenkins拉取此tag版本的代码,然后编译好代码;

    4、Jenkins构建Tomcat镜像,连带代码一起打包成镜像;

    5、Jenkins将构建好的镜像push到Harbor仓库;

    6、Jenkins服务器 SSH连接到Docker服务器拉取镜像,停止旧版本容器,运行新版本容器。



三、实战

    1、提交代码

    提交代码到Gitlab,并打Tag,以Tag作为代码版本:

cd solo
git add .
git commit -m "test01"
git tag 1.0.0
git push origin 1.0.0


    Gitlab上查看:

        905.png



    2、Harbor上建项目

    以便上传、下载构建好的镜像。

    658.png



    3、Jenkins上操作

    新建流水线任务:

        203.png


    配置参数化构建过程:

    4438.png


    写pipeline脚本:

    5022222.png

    脚本内容如下:

node {
    stage('git pull code') {
        //根据Tag拉取Java代码
        checkout([$class: 'GitSCM', branches: [[name: '$Tag']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'git@192.168.184.123:root/solo.git']]])
   }
   
    stage('build solo') {
        //编译Java代码
        sh '/usr/bin/mvn clean package -Dmaven.test.skip=true'
   }

    stage('build and push Image') {
        //构建镜像并上传至Harbor仓库
        sh '''
REPOSITORY=192.168.184.124/blog-solo/solo:${Tag}
cat > Dockerfile <<EOF
FROM tomcat:8.5.35
RUN rm -fr /usr/local/tomcat/webapps/*
COPY target/solo.war /usr/local/tomcat/webapps/
EXPOSE 8080
CMD ["catalina.sh", "run"]
EOF
docker build -t $REPOSITORY .
docker login -u admin -p Harbor12345 192.168.184.124
docker push $REPOSITORY
        '''
   }
	
    stage('deploy') {
        //SSH连到其它Docker宿主机,pull镜像,停止老版本容器,运行新版本容器
        sh '''
        REPOSITORY=192.168.184.124/blog-solo/solo:${Tag}
        ssh root@192.168.184.124 "
        docker container stop blog-solo|true && \
        docker container rm blog-solo|true && \
        docker image rm $REPOSITORY|true && \
        docker login -u admin -p Harbor12345 192.168.184.124 && \
        docker pull $REPOSITORY && \
        docker run -d --name blog-solo -p 8080:8080 $REPOSITORY"
        '''
   }
}


    保存就可以构建了。

    注意:这个Jenkins是yum安装的,所以工作目录在/var/lib/jenkins,拉取的代码在/var/lib/jenkins/workspace下,以jenkins任务名称为目录名。创建的Dockerfile文件和代码在一起,也是在这个目录里编译Java代码、构建docker镜像。

        81205025508.png


    在构建时填写Tag:

    4651.png


    在构建中Jenkins报错:

657.png657.png

    没有权限运行docker命令,怎么回事了?

    Jenkins服务是使用jenkins用户拉取代码,并运行docker命令。而Docker守护程序始终以root用户身份运行,其它用户使用只能sudo,如果不想在docker命令前加上sudo,需要创建一个名为docker的组并向其添加用户。

    将jenkins用户加入docker组并重启Jenkins服务:

gpasswd -a jenkins docker
systemctl restart jenkins

    然后再重新构建。


    4、检测

    Jenkins pipeline已经做了分发镜像并运行容器,这里测试只用了一台。

    去 192.168.184.124上查看镜像与容器:

[root@web ~]# docker image ls
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
192.168.184.124/blog-solo/solo   1.0.4               07c5e5696fab        16 minutes ago      513MB
192.168.184.124/blog-solo/solo   1.0.3               40c94c91316a        About an hour ago   507MB
192.168.184.124/blog-solo/solo   1.0.2               cbd7cbb3709e        About an hour ago   507MB
192.168.184.124/blog-solo/solo   1.0.1               ddc9240574d0        2 hours ago         507MB
[root@web ~]# docker container ls
CONTAINER ID   IMAGE                                  COMMAND             CREATED          STATUS                       PORTS                    NAMES
10a9fa409839   192.168.184.124/blog-solo/solo:1.0.4   "catalina.sh run"   17 minutes ago   Up 17 minutes  0.0.0.0:8080->8080/tcp   blog-solo


    查看启动日志:

[root@web ~]# docker logs blog-solo


    浏览器打开网站:

    844.png


    大致就是这样了,只有动手实践,才能发现问题。

点赞
说说你的看法

所有评论: (0)

# 加入组织

1、用手机QQ扫左侧二维码

2、搜Q群:1058582137

3、点击 宁时修博客交流群