• Jenkins配置构建Maven项目并打包Docker镜像推送至私仓


    备注

    Jenkins构建Maven项目需要安装Maven插件,安装后Maven插件默认配置文件路径为:/root/jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3/conf/settings.xml。

    需要将本地maven settings.xml配置信息配置至该settings.xml中,否则Jenkins构建项目因为无法下载相关jar包而失败

      

    一、配置构建任务

           新增任务,选择“构建一个maven项目”

          

    二、配置构建任务

            

    2.1 源码管理

                配置项目git地址,认证可手动添加,为git的登录账户和密码,指定分支填写需要构建的分支

               

    2.2 Pre Steps

            可执行Jenkins构建前的脚本,可增加更多的bulid step,例如:

            

    2.3 Build

            设置POM文件以及执行的相关安装命令等,如果需要跳过Maven的test,则增加-Dmaven.test.skip=true配置

          

    2.4 Post Steps

             项目构建完成后,执行的脚本,当前打包镜像以及推送私仓主要通过该step完成。

            

       

    三、网关通过Jenkins打包发布镜像脚本

    #!/bin/bash
     
    # jenkins配置的构建任务名称
    PROJECT_NAME="gateway-jenkins"
     
    # jenkins默认编译后jar包位置
    JAR_PATH="/var/jenkins_home/workspace/$PROJECT_NAME/target/"
     
    # jar包名称,需要与pom.xml中的jar包坐标信息保持一致
    JAR_NAME="zkxy-api-gateway-0.0.1-SNAPSHOT.jar"
     
    # 应用启动端口
    PORT=7979
     
    # Dockerfile maintainer
    EMAIL="zouxd@chip-cloud.com"
     
    # docker image名称
    IMAGE_NAME="zkxy-api-gateway"
     
    # docker私仓地址
    PRIVATE_REPOSITORY="172.18.0.116:31134"
     
    # Dockerfile
    DOCKERFILE_NAME="Dockerfile"
     
    # echo输出标识,方便日志查看
    LOG_TAG="CHIP_AUTO"
     
    # -----------------------------------------------------
    # 删除zkxy-api-gateway docker镜像,使用新编译的zkxy-api-gateway jar包
    # 重新生成新的zkxy-api-gateway docker镜像
    # -----------------------------------------------------
    function afterJenkins(){
        echo "[$LOG_TAG]===========gateway-jenkins end,begin to execute shell==========="
        gatewayImages=`docker images|grep -i $IMAGE_NAME`
        echo -e "[$LOG_TAG]Current existed gateway images:
    $gatewayImages"
        if [ -n "$gatewayImages" ];then
            gatewayImagesId=`docker images|grep -i $IMAGE_NAME|awk '{print $3}'`
            if [ -n "$gatewayImagesId" ];then
                imageIdArr=($gatewayImagesId)
                for ele in ${imageIdArr[@]}
                    do
                        imageId=$ele
                        echo "[$LOG_TAG]Delete image id:$imageId"
                        docker rmi -f $imageId
                        if [ $? -eq 0 ];then
                            echo "[$LOG_TAG]Delete image id:$imageId success!"
                        else
                            echo "[$LOG_TAG]Delete image id:$imageId fail!"
                        fi
                    done
            fi
        else
            echo "[$LOG_TAG]No existed gateway images!"
        fi
    }
     
    # -----------------------------------------------------
    # 打包docker镜像,推送至私仓
    # -----------------------------------------------------
    function packDockerImage(){
        if [ -d $JAR_PATH ];then
            cd $JAR_PATH
            echo "[$LOG_TAG]Current path:`pwd`"
            dockerfile=`ls -l|grep $DOCKERFILE_NAME`
            if [ -n "$dockerfile" ];then
                echo "[$LOG_TAG]Dockerfile has existed!"
            else
                touch $DOCKERFILE_NAME
                echo "FROM java:8-jre" >> $DOCKERFILE_NAME
                echo "MAINTAINER $EMAIL" >> $DOCKERFILE_NAME
                echo "ADD $JAR_NAME /$JAR_NAME" >> $DOCKERFILE_NAME
                echo "EXPOSE $PORT" >> $DOCKERFILE_NAME
                echo "ENTRYPOINT ["/usr/bin/java","-jar","$JAR_NAME"]" >> $DOCKERFILE_NAME
            fi
            docker build -t $IMAGE_NAME .
            if [ $? -eq 0 ];then
                echo "[$LOG_TAG]$IMAGE_NAME image build success!"
                imagesId=`docker images|grep -i $IMAGE_NAME|awk '{print $3}'`
                if [ -n "$imagesId" ];then
                    imageIdArr=($imagesId)
                    for ele in ${imageIdArr[@]}
                        do
                            imageId=$ele
                            echo "[$LOG_TAG]Latest $IMAGE_NAME image id:$imageId"
                        done
                fi
                docker tag $IMAGE_NAME $PRIVATE_REPOSITORY/$IMAGE_NAME:latest
                docker push $PRIVATE_REPOSITORY/$IMAGE_NAME:latest
                if [ $? -eq 0 ];then
                    echo "[$LOG_TAG]Execute->docker push $PRIVATE_REPOSITORY/$IMAGE_NAME:latest success!"
                else
                    echo "[$LOG_TAG]Execute->docker push $PRIVATE_REPOSITORY/$IMAGE_NAME:latest fail!"
                fi
            else
                echo "[$LOG_TAG]$IMAGE_NAME image build fail!"
            fi
        else
            echo "[$LOG_TAG]Path:$JAR_PATH not existed!"
        fi
    }
     
    afterJenkins
    packDockerImage
    

      

    四、镜像文件查看

             执行构建任务时(以zkxy-api-gateway为例),构建日志提示以下类似信息,说明docker镜像已推送至私仓:

             

            访问Docker镜像私仓地址:http://172.18.0.116:31134/v2/_catalog,看是否有对应的镜像名称:

            

             以及访问http://172.18.0.117:31134/v2/{IMAGE_NAME}/tags/list,看是否镜像的tags正确:

            

    五、通过Rancher部署该服务

                    

    • 3、不同项目最好使用不同的命名空间,首次部署,最好创建自己的命名空间(比如当前创建的为wiki空间)

                    

    • 4、进入集群下的项目,准备部署服务

                  

    • 5、点击“部署服务”按钮

                   

    • 6、配置完成后,点击“启动”

                    

  • 相关阅读:
    转移到新的个人独立博客。
    hdu5618 (三维偏序,cdq分治)
    平衡树维护动态凸包
    poj1986 LCA
    hdu2586 LCA
    LCA最近公共祖先 ST+RMQ在线算法
    hdu 3401 单调队列优化DP
    【转】单调队列优化DP
    CodeForces 548D 单调栈
    hdu3530 单调队列
  • 原文地址:https://www.cnblogs.com/Java-Script/p/13901102.html
Copyright © 2020-2023  润新知