zoukankan      html  css  js  c++  java
  • jenkins+git构建jar包并把jar包运行在docker容器自动化部署

    这篇博客的目的实现:使用jenkins从git仓库拉取java项目代码,并打成jar,然后在jenkins把jar包运行在docker容器里

    (重点:有了这套自动化部署,不用再跑到服务器上打包上传,使用命令运行项目了。而是直接上传代码到git仓库,然后登录jenkins点击构建,项目便发布成功)

    准备工作:

      1、在CentOs7服务器上安装好jenkins  (怎么安装请看之前的博客:https://www.cnblogs.com/spll/p/10020597.html)

      2、在jenkins上做好全局配置jdk和maven  (怎么配置,请看之前的博客:https://www.cnblogs.com/spll/p/9935891.html)

    (需要注意:我本来想用docker安装jenkins,并运行jenkins,奈何在jenkins里配置jdk和maven总是配置不上,百度了其他博客后发现docker运行的jenkins容器确定配置起来好麻烦,所以才用服务器直接安装jenkins,这样配置起jdk和maven来确实方便多了)

    接下来进入正题:

      借鉴博客:https://www.cnblogs.com/sxdcgaq8080/p/10599166.html

      一、jenkins上jdk和maven都配置好了,直接新建任务,输入名称,选择下面的构建一个maven项目

      二、在任务配置页面,源码管理这配置git,我的git仓库地址用的码云,连接的账号密码在下面添加一个就行

      三、如果maven配置好了,Build这里直接填上pom.xml,clean package

        四、在配置Post Steps这里输入一行shell命令,这个命令执行了一个shell命令文件:dockerRun.sh,这个脚本文件里的目的就是通过shell命令把jenkins构建时生成的jar包移动到我们指定的目录,然后在指定目录里根据此jar包创建docker的镜像,然后运行命令创建容器并启动

        4.1、dockerRun.sh文件我放在/home/javaProject目录下,此目录下需要两个文件,一个dockerfile用来生成docker镜像,另一个就是dockerRun.sh脚本命令文件,如下:

         

        4.2、创建dockerfile文件:vi dockerfile,并内容如下:

    FROM java:8
    VOLUME /tmp
    Add test01.jar test01.jar
    EXPOSE 8080
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/test01.jar"]

      add test01.jar  test01.jar     第一个jar是当前所在目录下的项目jar包,第二个是重命名

        4.3、创建dockerRun.sh脚本文件内容如下:

    #=====================================================================================
    #=================================1、定义初始化变量======================================
    #=====================================================================================
    
    #操作/项目路径(Dockerfile存放的路径)
    BASE_PATH=/home/javaProject
    
    #项目名称
    SERVER_NAME=test01
    
    #获此项目的取容器id
    CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
    
    #获取此项目的镜像id
    IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')
    
    
    
    
    
    #=====================================================================================
    #=========================2、移动jenkins已经构建好的jar包到Dockerfile所在目录=========================
    #=====================================================================================
    
    # 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录
    function transfer(){
        echo "=========================>>>>>>>移动jenkins构建好的jar到Dockerfile所在目录,并重命名为test01.jar"
    
            mv /var/lib/jenkins/workspace/test01/target/jz-project-0.0.1-SNAPSHOT.jar /home/javaProject/test01.jar
    
        echo "=========================>>>>>>>迁移完成Success"
    
    }
    
    
    
    #=====================================================================================
    #==================================3、构建最新镜像=======================================
    #=====================================================================================
    
    # 构建docker镜像
    function build(){
    
        #无论镜像存在与否,都停止原容器服务,并移除原容器服务
        echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
        docker stop $CID
    
        echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
        docker rm $CID
    
        #无论如何,都去构建新的镜像
        #构建新的镜像之前,移除旧的镜像
        if [ -n "$IID" ]; then
            echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"
    
    
            echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
            docker rmi $IID
    
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"
    
        else
            echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"
    
    
            cd $BASE_PATH
            docker build -t $SERVER_NAME .
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
        fi
    }
    
    
    
    #=====================================================================================
    #==============================4、最后运行docker容器,启动服务===============================
    #=====================================================================================
    
    # 运行docker容器
    # 先备份老的jar包
    # 再移动新的jar包到Dockerfile文件所在目录
    # 接着,构建新的镜像
    # 最后运行最新容器,启动服务
    function run(){
        transfer
        build
    
        docker run -d --restart=always --name $SERVER_NAME -v /usr/local/apps/docker-demo/logs:/home/javaProject/logs
    -p 8080:8080 $SERVER_NAME
    
    }
    
    #入口
    run

        如此一个构建任务的所有配置就算弄好了。。。

        

        保存后点构建,控制台输出日志成功如下:完美,日志上也没报错信息

      再看服务器,查看正在运行的容器:docker ps,成功如下:

       打开浏览器访问服务器地址,成功如下:

    。。。

  • 相关阅读:
    JavaScript设计模式(策略模式)
    JavaScript设计模式(单例模式)
    react中数据持久化缓存redux-persist
    webpack编写一个plugin插件
    webpack自定义loader并发布
    Vue用递归实现一个消除输入框表情符的自定义directive
    Spring MVC表单防重复提交
    @Controller,@Service,@Repository,@Component详解
    Spring Enable*高级应用及原理
    Spring Aware容器感知技术
  • 原文地址:https://www.cnblogs.com/spll/p/15549739.html
Copyright © 2011-2022 走看看