一文學會jenkins pipline自動化構建

中文線上文件:https://www。jenkins。io/zh/doc/book/pipeline/

還有一個:

https://www。w3cschool。cn/jenkins/jenkins-qc8a28op。html

01

Pipeline流水線基本語法

首先建立

在jenkins上建立一個pipeline的流水線任務

新建ITEM-->選擇流水線

基本pipeline指令碼結構

pipeline { //agent 表示要執行的節點,any表示任意節點 agent any //stages表示任務執行時的所有步驟集合 stages { //stage就表示一個步驟,括號裡是步驟名稱 stage(‘拉取專案原始碼’){ //每一個stage都可以定義自己執行的節點,如果沒定義,則用最上方的 agent { // label 後跟的是節點的標籤名稱 label ‘mall-server’ } steps { echo ‘這是拉取程式碼這一步’ echo “Running ${env。BUILD_ID} on ${env。JENKINS_URL} ${env。JOB_NAME}” echo “${currentBuild。result} sdsdd” sh ‘pwd’ //如果當前節點是windows,我想執行windows下的命令 //bat ‘dir’ } } stage(‘靜態程式碼掃描’){ steps { echo ‘這是靜態程式碼掃描’ } } stage(‘單元測試’){ steps { echo ‘執行jacoco單元測試’ } } stage(‘打包依賴服務’){ steps { echo ‘打包依賴服務’ } } stage(‘打包當前服務’){ steps { echo ‘打包當前服務’ } } stage(‘部署環境’){ steps { echo ‘部署環境’ } } stage(‘介面自動化測試’){ agent { label ‘auto_test’ } steps { echo ‘介面自動化測試’ } } stage(‘ui自動化’){ steps { echo ‘ui自動化’ } } }}

02

針對mall微服務專案編寫pipeline指令碼

對於pipeline指令碼來說我們不用去記那麼多的東西,可以開啟自己的pipeline任務,

點選流水線語法後,使用下面兩個選單幫我們生成部分指令碼

一文學會jenkins pipline自動化構建

對於一個專案來說可能具備多服務多環境的現象

所以我們要

建立環境節點引數、服務名稱引數

在pipeline指令碼的最上方增加如下:

//定義了兩組選項引數

parameters

{

choice choices:

[‘mall-admin’, ‘mall-demo’, ‘mall-auth’, ‘mall-serach’],

name:‘servername’

choice choices:

[‘mall-server’, ‘mall-dev’, ‘mall-prod’],

name: ‘node_env’

}

配好後先執行一次任務

選擇專案部署的節點

因為部署的節點環境根據上一步的引數來的,使用者選什麼我們就執行什麼,所以

label的值是一個變數

agent

{

label

“${node_env}”

}

拉取專案程式碼

複製生成的指令碼,

放在拉程式碼的階段的steps下

stage

(‘拉取專案原始碼’){

steps

{

echo

‘這是拉取程式碼這一步’

git

credentialsId: ‘

4c1003ef-ac70-4271-8649-1759e79d430a

’, url: ‘

http://192。168。0。109/shamo/mall-swarm-master。git

}

}

單元測試覆蓋率

由於mall這個專案原本沒有整合jacoco相關的覆蓋率統計,因此我們先對專案做些修改

① 修改整個專案最根的pom.xml檔案

false

② 修改各個子模組服務的pom.xml

org。jacoco jacoco-maven-plugin 0。8。6

org。jacoco jacoco-maven-plugin 0。8。6 target/coverage-reports/jacoco-unit。exec target/coverage-reports/jacoco-unit。exec jacoco-initialize prepare-agent jacoco-site test report

③ 編寫pipeline

一文學會jenkins pipline自動化構建

複製生成的jacoco指令,填入相應的steps裡

stage(‘單元測試’){ steps { echo ‘執行jacoco單元測試’ sh ‘’‘ cd “${servername}” mvn test ’‘’ jacoco changeBuildStatus: true, maximumBranchCoverage: ‘100’, maximumClassCoverage: ‘100’, maximumComplexityCoverage: ‘100’, maximumInstructionCoverage: ‘100’, maximumLineCoverage: ‘100’, maximumMethodCoverage: ‘100’, minimumBranchCoverage: ‘90’, minimumClassCoverage: ‘90’, minimumComplexityCoverage: ‘90’, minimumInstructionCoverage: ‘90’, minimumLineCoverage: ‘90’, minimumMethodCoverage: ‘90’ } }

靜態程式碼掃描

複製生成的到靜態掃描的stage的steps裡,

再補充sonar掃描的指令

stage(‘靜態程式碼掃描’){ steps { echo ‘這是靜態程式碼掃描’ withSonarQubeEnv(credentialsId: ‘1d74c7e8-5b27-4772-9a21-41e17eb87b7d’, installationName: ‘sonar’) { // 執行sonar掃描的指令 sh ‘’‘ cd “${servername}” mvn sonar:sonar \ -Dsonar。projectKey=${JOB_NAME}-${servername}$BUILD_NUMBER \ -Dsonar。projectName=mall \ -Dsonar。language=java \ -Dsonar。sourceEncoding=UTF-8 \ ’‘’ } }}

打包並部署

stage(‘服務打包並部署’){ steps { echo ‘打包依賴服務’ //打包每個服務都依賴的模組 sh ‘mvn clean install -pl mall-common,mall-mbg -am’ //打包我要部署的這個服務模組 sh ‘’‘ cd “${servername}” mvn clean package ’‘’ //執行部署指令碼檔案 sh ‘/mydata/sh/${servername}。sh’ } }

釘釘通知

釘釘通知在每個階段其實都可以加的,我們把他

載入部署裡

stage(‘服務打包並部署’){ steps { echo ‘打包依賴服務’ //打包每個服務都依賴的模組 sh ‘mvn clean install -pl mall-common,mall-mbg -am’ //打包我要部署的這個服務模組 sh ‘’‘ cd “${servername}” mvn clean package ’‘’ //執行部署指令碼檔案 sh ‘/mydata/sh/${servername}。sh’ //部署完成後釘釘通知專案組 dingtalk( robot:‘dd001’,//robot指的是你在系統配置中配的釘釘機器人的id type:‘MARKDOWN’, atAll: false, title: “${servername} 部署成功”, text: [“#### ‘${JOB_NAME}’專案掃描部署 \n - 任務:第‘${BUILD_NUMBER}’次\n - 狀態:‘${currentBuild。result}’ \n - 執行人: ‘${user}’ \n \n[檢視控制檯](‘${BUILD_URL}’)”] ) } }

配置自動化任務allure外掛的指令碼生成如下:

郵件的指令碼生成如下:

stage(‘介面自動化測試’){ //如果之前的步驟執行時失敗了改動了當前任務的結果,那麼自動化測試沒有必要執行 //下面的判斷指的是沒結果時或者結果是成功時 when { expression { currentBuild。result==null||currentBuild。result == ‘SUCCESS’ } } //使用自動化執行的節點 agent { label ‘auto_test’ } steps { echo ‘介面自動化測試’ //拉取自動化指令碼 git credentialsId:‘4c1003efac70-4271-8649-1759e79d430a’, url: ‘http://192。168。0。109/shamo/mallapitest1。git’ //執行自動化測試,由於這個節點是windows的,所以採用bat xxx來執行命令操作 bat ‘python run。py’ //生成測試報告 allure includeProperties: false, jdk: ‘’, results: [[path: ‘report/shop’]] //傳送結果郵件 emailext body: ‘’‘<!DOCTYPE html> $PROJECT_NAME-第$BUILD_NUMBER次構建日誌


構建資訊

’‘’, subject: ‘$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!’, to: ‘2879897713@qq。com’ } }

最後執行