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:\n$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、配置完成后,點擊“啟動”

                


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM