備注
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部署該服務
- 1、登錄Rancher:https://172.18.0.115/
- 2、選擇集群和項目
- 3、不同項目最好使用不同的命名空間,首次部署,最好創建自己的命名空間(比如當前創建的為wiki空間)
- 4、進入集群下的項目,准備部署服務
- 5、點擊“部署服務”按鈕
- 6、配置完成后,點擊“啟動”