輕量級CI/CD發布部署環境搭建及使用_07_jenkins配置pipeline
盡自己的綿薄之力,為開源技術分享添磚加瓦
1,設定pipeline
2,設定git倉庫地址、用戶名、密碼

3,生成流水線腳本

4,撰寫pipeline_配置發布服務器、harbor、jar包目錄等

5,撰寫pipeline_配置dockerfile、docker編譯命令等

6,撰寫pipeline_配置連接部署服務器、docker啟動、洗掉容器命令等
============================部署后端pieplie范例腳本============================
相關變數都以xxx代替,請自行替換
1 pipeline{ 2 agent any 3 environment { 4 HARBOR_HOST = "192.168.xxx.xxx:xxx" 5 HARBOR_USER = "xxx" 6 HARBOR_PASSWORD = "xxx" 7 HARBOR_PROJECT = "xxx" 8 PROJECT_NAME = "xxx" 9 DEPLOY_ENV = "test" 10 DEPLOY_PORT = "xxx" 11 PACKAGE_PATH = "./xxx/xxx/xxx.jar" 12 BUILD_VERSION = createVersion() 13 CLEAR_NONE_SSH = "n=`docker images | grep '<none>' | wc -l`; if [ \$n -gt 0 ]; then docker rmi `docker images | grep '<none>' | awk '{print \$3}'`; fi" 14 DEPLOY_REMOTE_01 = "192.168.100.xxx" 15 DEPLOY_REMOTE_02 = "192.168.100.xxx" 16 } 17 tools{ 18 // 添加環境,名稱為Jenkins全域配置中自己定義的別名 19 jdk 'jdk1.8.0_11' 20 maven 'apache-maven-3.6.2' 21 } 22 stages{ 23 stage("拉取代碼"){ 24 //check CODE 25 steps { 26 checkout([$class: 'GitSCM', branches: [[name: '$Tag']], extensions: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'http://xxx:xxx/xxx/xxx.git']]]) 27 } 28 } 29 stage("maven構建"){ 30 steps { 31 sh "mvn clean package -P ${DEPLOY_ENV} -P jdk8 -Dmaven.test.skip=true" 32 } 33 } 34 stage("構建docker鏡像,并push到harbor當中"){ 35 //docker push 36 steps { 37 sh '''cat << EOF > Dockerfile 38 FROM openjdk:8-jre 39 MAINTAINER hawksoft [email protected] 40 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone 41 COPY ${PACKAGE_PATH} /app.jar 42 ENTRYPOINT ["java", "-Xmx512m", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar"] 43 CMD ["--spring.profiles.active=${DEPLOY_ENV}"] 44 ''' 45 sh 'cat Dockerfile' 46 sh 'ls -l' 47 sh "docker build -t ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION ." 48 sh "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}" 49 sh "docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 50 sh "docker rmi ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 51 } 52 } 53 stage("拉取docker鏡像,并部署發布"){ 54 steps { 55 deployAndRun("${DEPLOY_REMOTE_01}") 56 deployAndRun("${DEPLOY_REMOTE_02}") 57 } 58 } 59 } 60 } 61 62 // 定義一個版本號作為當次構建的版本,輸出結果 20221209248576_103 63 def createVersion() { 64 return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}" 65 } 66 67 // 宣告一個方法,其中 withCredentials 是 Jenkins 憑據管理中添加過的憑據 68 def conRemote(ip){ 69 def remote = [:] 70 remote.name = "test--->>>${PROJECT_NAME}------>>>>>>>${ip}" 71 remote.host = ip 72 remote.port = xxx 73 remote.allowAnyHosts = true 74 withCredentials([usernamePassword(credentialsId: 'xxx', passwordVariable: 'password', usernameVariable: 'userName')]) { 75 remote.user = "${userName}" 76 remote.password = "${password}" 77 } 78 return remote 79 } 80 81 // 部署運行 82 def deployAndRun(ip){ 83 // 登錄harbor 84 sshCommand remote: conRemote(ip), command: "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}" 85 // 更新或下載鏡像 86 sshCommand remote: conRemote(ip), command: "docker pull ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 87 // 列印所有鏡像 88 sshCommand remote: conRemote(ip), command: "docker images" 89 try{ 90 // 停止指定名稱容器 91 sshCommand remote: conRemote(ip), command: "docker stop ${PROJECT_NAME}" 92 // 洗掉指定名稱容器 93 sshCommand remote: conRemote(ip), command: "docker rm ${PROJECT_NAME}" 94 // 啟動容器 95 sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:xxx -v /home/docker/${PROJECT_NAME}/logs:/logs ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 96 // 洗掉未使用到的鏡像 97 sshCommand remote: conRemote(ip), command: "docker image prune -a -f" 98 // 清理none鏡像 99 sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}" 100 } 101 catch (e){ 102 // 啟動容器 103 sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:xxx -v /home/docker/${PROJECT_NAME}/logs:/logs ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 104 // 洗掉未使用到的鏡像 105 sshCommand remote: conRemote(ip), command: "docker image prune -a -f" 106 // 清理none鏡像 107 sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}" 108 } 109 }
============================部署前端pieplie范例腳本============================
相關變數都以xxx代替,請自行替換
1 pipeline{ 2 agent any 3 environment { 4 HARBOR_HOST = "192.168.100.xxx:xxx" 5 HARBOR_USER = "xxx" 6 HARBOR_PASSWORD = "xxx" 7 HARBOR_PROJECT = "xxx" 8 PROJECT_NAME = "xxx" 9 DEPLOY_ENV = "test" 10 PACKAGE_PATH = "./dist" 11 BUILD_VERSION = createVersion() 12 CLEAR_NONE_SSH = "n=`docker images | grep '<none>' | wc -l`; if [ \$n -gt 0 ]; then docker rmi `docker images | grep '<none>' | awk '{print \$3}'`; fi" 13 DEPLOY_REMOTE_01 = "192.168.xxx.xxx" 14 DEPLOY_PORT = "xxx" 15 } 16 tools{ 17 // 添加環境,名稱為Jenkins全域配置中自己定義的別名 18 nodejs 'node-v14.17.6' 19 } 20 stages{ 21 stage("拉取代碼"){ 22 //check CODE 23 steps { 24 checkout([$class: 'GitSCM', branches: [[name: '$Tag']], extensions: [], userRemoteConfigs: [[credentialsId: 'xxx', url: 'http://xxx/xxx/xxx.git']]]) 25 } 26 } 27 stage("build構建"){ 28 steps { 29 sh ''' 30 cnpm install 31 cnpm run build:${DEPLOY_ENV} 32 ''' 33 } 34 } 35 stage("構建docker鏡像,并push到harbor當中"){ 36 //docker push 37 steps { 38 sh 'pwd' 39 sh '''cat << EOF > Dockerfile 40 # 設定基礎鏡像 41 FROM nginx:latest 42 # 將dist檔案中的內容復制到 /usr/share/nginx/html/ 這個目錄下面 43 COPY ${PACKAGE_PATH} /usr/share/nginx/html/ 44 EXPOSE 80 45 CMD ["nginx", "-g", "daemon off;"] 46 ''' 47 sh 'cat Dockerfile' 48 sh 'ls -l' 49 sh "docker build -t ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION ." 50 sh "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}" 51 sh "docker push ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 52 sh "docker rmi ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 53 } 54 } 55 stage("拉取docker鏡像,并部署發布"){ 56 steps { 57 deployAndRun("${DEPLOY_REMOTE_01}") 58 } 59 } 60 } 61 } 62 63 // 定義一個版本號作為當次構建的版本,輸出結果 20211029532456_17 64 def createVersion() { 65 return new Date().format('yyyyMMddHHmmss') + "_${env.BUILD_ID}" 66 } 67 68 // 宣告一個方法,其中 withCredentials 是 Jenkins 憑據管理中添加過的憑據 69 def conRemote(ip){ 70 def remote = [:] 71 remote.name = "dev-${PROJECT_NAME}------>>>>>>>${ip}" 72 remote.host = ip 73 remote.port = xxx 74 remote.allowAnyHosts = true 75 withCredentials([usernamePassword(credentialsId: 'xxx', passwordVariable: 'password', usernameVariable: 'userName')]) { 76 remote.user = "${userName}" 77 remote.password = "${password}" 78 } 79 return remote 80 } 81 82 // 部署運行 83 def deployAndRun(ip){ 84 // 登錄harbor 85 sshCommand remote: conRemote(ip), command: "docker login -u ${HARBOR_USER} -p '${HARBOR_PASSWORD}'" + " ${HARBOR_HOST}" 86 // 更新或下載鏡像 87 sshCommand remote: conRemote(ip), command: "docker pull ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 88 // 列印所有鏡像 89 sshCommand remote: conRemote(ip), command: "docker images" 90 try{ 91 // 停止指定名稱容器 92 sshCommand remote: conRemote(ip), command: "docker stop ${PROJECT_NAME}" 93 // 洗掉指定名稱容器 94 sshCommand remote: conRemote(ip), command: "docker rm ${PROJECT_NAME}" 95 // 啟動容器 96 sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:80 ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 97 // 洗掉未使用到的鏡像 98 sshCommand remote: conRemote(ip), command: "docker image prune -a -f" 99 // 清理none鏡像 100 sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}" 101 } 102 catch (e){ 103 // 啟動容器 104 sshCommand remote: conRemote(ip), command: "docker run -idt --name ${PROJECT_NAME} --restart=always -p ${DEPLOY_PORT}:80 ${HARBOR_HOST}/${HARBOR_PROJECT}/${PROJECT_NAME}:$BUILD_VERSION" 105 // 洗掉未使用到的鏡像 106 sshCommand remote: conRemote(ip), command: "docker image prune -a -f" 107 // 清理none鏡像 108 sshCommand remote: conRemote(ip), command: "${CLEAR_NONE_SSH}" 109 } 110 }
7,執行構建
第一次進入時只有master,需要先選master構建,而后下次構建時就會出現可供選擇的branch或tag了

8,通過發布日志、harbor、portainer驗證及查看發布情況




至此,輕量級CI/CD發布部署環境搭建及使用_07_jenkins配置pipeline
輕量級CI/CD發布部署環境搭建及使用_01_基本介紹 輕量級CI/CD發布部署環境搭建及使用_02_docker安裝jenkins 輕量級CI/CD發布部署環境搭建及使用_03_docker安裝harbor 輕量級CI/CD發布部署環境搭建及使用_04_docker安裝nexus3 輕量級CI/CD發布部署環境搭建及使用_05_jenkins配置jdk、nodejs、maven、python2 輕量級CI/CD發布部署環境搭建及使用_06_jenkins配置git、harbor、部署機器等憑證 撰寫不易,如需轉載,請注明出處轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/546248.html
標籤:其他
上一篇:輕量級CI/CD發布部署環境搭建及使用_06_jenkins配置git、harbor、部署機器等憑證
下一篇:KVM虛擬化工具簡介及安裝
