国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當前位置: 首頁 > news >正文

禮品公司網(wǎng)站建設(shè)好的競價托管公司

禮品公司網(wǎng)站建設(shè),好的競價托管公司,小型服務(wù)器做網(wǎng)站,軟件技術(shù)專升本有哪些學(xué)校GitLAB & Jenkins 目錄 實踐:基于Jenkins提交流水線(測試成功)-2023.4.25 目的:掌握通過觸發(fā)器將GitLab和Jenkins集成,實現(xiàn)提交流水線。 1、觸發(fā)Jenkins構(gòu)建 安裝Generic Webhook Trigger插件 重啟后,進入一個Pipeline項目設(shè)…

GitLAB & Jenkins

image-20230423061727812

目錄

image-20230425201437649

實踐:基于Jenkins提交流水線(測試成功)-2023.4.25

目的:掌握通過觸發(fā)器將GitLab和Jenkins集成,實現(xiàn)提交流水線。

image-20220514100956964

image-20220512070753368

1、觸發(fā)Jenkins構(gòu)建

安裝Generic Webhook Trigger插件

tstmp_20230423061901

重啟后,進入一個Pipeline項目設(shè)置,已經(jīng)可以選擇這個觸發(fā)器了…

tstmp_20230423061918

插件文檔:https://plugins.jenkins.io/generic-webhook-trigger/

tstmp_20230423061936

Jenkins作業(yè)配置觸發(fā)器

啟動Generic Webhook觸發(fā)器后, 相當于給Jenkins加了一個新的接口(http://JENKINS_URL/generic-webhook-trigger/invoke)。

tstmp_20230423064219

image-20230423064513170

調(diào)用的時候:這里要把 JENKINS_URL 換成自己真實的Jenkins 服務(wù)器地址,有端口就加上端口,是域名就寫域名。下面是一個參考的URL:

http://192.168.1.200:8080/generic-webhook-trigger/invoke

Post content parameters: 獲取調(diào)用接口傳進來的數(shù)據(jù)

JsonPath語法文檔: https://github.com/json-path/JsonPath

tstmp_20230423064424

Header parameters: 獲取Header中的參數(shù)

tstmp_20230423064526

tstmp_20230423064534

Request parameters: 獲取URL中的請求參數(shù)

curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?runopts=gitlab

tstmp_20230423064602

Token: 給URL添加一個觸發(fā)的認證

curl http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops-service

tstmp_20230423064625

打印調(diào)試信息到日志中

tstmp_20230423064647

觸發(fā)條件過濾:僅滿足條件才能觸發(fā)此作業(yè)

tstmp_20230423064709

創(chuàng)建測試項目

  • 創(chuàng)建一個叫做devops-demo-service的jenkins作業(yè)(這里的作業(yè)名稱和gitlab里的項目名稱推薦保持一致)

image-20230423062615216

  • 要加一個唯一的token,不然會觸發(fā)所有token一樣的項目

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-2ZFLY8ZF-1682425393155)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230423062932520.png)]

  • 把這2個選項勾選上

image-20230423063138153

  • 此時在postman里測試觸發(fā)

觸發(fā)url http://172.29.9.101:8080/generic-webhook-trigger/invoke?token=devops-demo-service

image-20230423063612364

這里記得要加一個basic auth

image-20230423063634952

image-20230423063813220

image-20230423063828507

可以看到觸發(fā)成功了。

  • 演示將postman中的請求轉(zhuǎn)換curl方式。

image-20230423063911558

curl --location --request POST 'http://172.29.9.101:8080/generic-webhook-trigger/invoke?token=devops-demo-service' \
--header 'Authorization: Basic YWRtaW46YWRtaW4='

image-20230423064006576

image-20230423064023234

可以看到,也是能構(gòu)建成功的。

解析GET/POST請求數(shù)據(jù)

傳參注意,第一個參數(shù)使用?號連接, 后面的參數(shù)使用&符號連接。

?token=demo-pipeline-service&user=jenkins&a=1&b=2

解析GET數(shù)據(jù)

  • 客戶端發(fā)送Get請求, 帶有兩個參數(shù) versionusername 。
http://172.29.9.101:8080/generic-webhook-trigger/invoke?token=devops-demo-service&version=1.1.1&username=jenkins

image-20230423065438782

  • Jenkins 配置Generic hook,獲取請求參數(shù)versionusername參數(shù)名稱要一致

tstmp_20230423065144

  • 驗證測試(Jenkins日志中能夠打印出獲取的值,則正常

image-20230423065442246

image-20230423065453824

哎,這里怎么沒顯示一些變量呢??

image-20230423065529929

這里簡單寫一個pipeline把。

image-20230423065824723

image-20230423065804019

可以看到效果了。

  • 通過jenkinsfile讀取傳遞的參數(shù),再次觸發(fā)
currentBuild.displayName = "${version}"println("${version}")
println("${username}")pipeline {agent anystages {stage('Hello') {steps {echo 'Hello World'}}}
}

再次postman觸發(fā),觀察效果:(符合預(yù)期)

image-20230423070111659

image-20230423070131842

解析HEADER參數(shù)數(shù)據(jù)

  • 客戶端發(fā)送請求(什么請求都可以,這里的header與請求類型無關(guān)), 帶有兩個參數(shù) devops和 tool-name。

image-20230423073947672

  • Jenkins 配置Generic hook,獲取請求參數(shù)devops和 tool-name 。

image-20230423073742460

  • 通過jenkinsfile讀取傳遞的參數(shù)

注意,這里的pipeline代碼如果打印tool-name變量的話,會報錯的

image-20230423074147969

image-20230423074130589

這里要使用下劃線來替換橫杠:

image-20230423074348398

image-20230423074251891

再次觸發(fā),就正常了,符合預(yù)期。

image-20230423074331148

解析POST數(shù)據(jù)

  • 客戶端發(fā)送POST請求, 參數(shù)存儲在body體中(參考POSTMAN中的樣例

image-20230423075425757

  • Jenkins 配置觸發(fā)器來獲取Post參數(shù)。

刪除之前測試的header參數(shù),request參數(shù)。

$代表/,獲取所有數(shù)據(jù)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-nYZuhkun-1682425393160)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230423075557421.png)]

獲取name字段

image-20230423075615899

  • Jenkinsfile中使用參數(shù)

image-20230423075714076

觸發(fā):

image-20230423075743209

驗證:

image-20230423075810592

image-20230423075832618

擴展流水線解析JSON數(shù)據(jù)

  • 安裝插件: Pipeline Utility Steps

image-20230423121825709

  • readJSON: 處理json數(shù)據(jù)
currentBuild.displayName = "${name}"println("${Data}")NewData = readJSON text: "${Data}"
envName = NewData["envName"]
appsName = NewData["apps"]["name"]pipeline {agent anystages {stage('Hello') {steps {script {println("${envName}")println("${appsName}")}}}}
}

再次構(gòu)建:

驗證:(符合預(yù)期)

image-20230423123103473

image-20230423122848208

Rebuilder插件使用

可以直接攜帶原觸發(fā)參數(shù)進行觸發(fā),不用重復(fù)觸發(fā)(不用在重復(fù)的提交代碼了)

tstmp_20230423071021

進入某一次構(gòu)建后,可以點擊rebuild。

tstmp_20230423071045

2、獲取觸發(fā)參數(shù)

1.觸發(fā)器配置

Jenkins開啟trigger

目的: 開啟trigger后,就可以實現(xiàn)其他系統(tǒng)通過一個指定的URL進行自動觸發(fā)構(gòu)建了;

新建一個文件夾存放對應(yīng)GitLab倉庫組中的流水線。這里建議用倉庫組的名稱作為文件夾的名稱devops03;

用Gitlab項目名稱與流水線命名; devops03-demo-service項目;

tstmp_20230423210432

tstmp_20230423210444

  • 開啟Generic webhook;
  • 配置觸發(fā)Token,例如:作業(yè)名稱devops03-demo-service (這個token是流水線觸發(fā)需要傳遞的);
  • 生成的觸發(fā)URL;

tstmp_20230423210537

http://192.168.1.200:8080/generic-webhook-trigger/invoke?token=devops03-demo-service

(此時,已經(jīng)生成了觸發(fā)URL,接著可以使用Curl或者Postman進行觸發(fā)測試了!)

自己本次的這部分配置已經(jīng)配置完成了。

  • 這里還原下,刪除之前的變量,這里只保留Data。

image-20230423205253027

  • 修改下pipeline代碼

image-20230423210735163

println("${Data}")NewData = readJSON text: "${Data}"
// envName = NewData["envName"]
// appsName = NewData["apps"]["name"]
println("${NewData}")pipeline {agent anystages {stage('Hello') {steps {script {println("${NewData}")}}}}
}

配置GitLab WebHook

進入GitLab項目設(shè)置, 進入 webhook配置頁面;

  • 配置要觸發(fā)的URL,即Jenkins觸發(fā)器接口URL;

  • 選擇發(fā)生哪種GitLab事件后觸發(fā)此Webhook;例如:Push提交代碼、Tag創(chuàng)建標簽等等;

  • 在gitlab的項目里配置好webhook

http://172.29.9.101:8080/generic-webhook-trigger/invoke?token=devops-demo-service

image-20230423205606399

image-20230423205641544

事件:

  • Push 提交事件

  • Tag Push 創(chuàng)建事件

  • MergeRequest 合并事件

  • Issue 問題創(chuàng)建更新事件

  • 測試模擬觸發(fā)

模擬事件觸發(fā),點擊test按鈕選擇push事件,此時去看下Jenkins是否成功被觸發(fā)。

這里稍微測試下:

點擊Test

image-20230423205744825

觸發(fā)成功則提示: Hook executed successfully: HTTP 200, 此時可以看下Jenkins是否已經(jīng)觸發(fā)了一次構(gòu)建;

image-20230423205757026

image-20230423211029028

Webhook問題排查調(diào)試

進入webhook添加頁面的最下方,點擊你所創(chuàng)建的webhook的 Edit按鈕 ;

image-20230423211150162

webhook歷史記錄: 此記錄可以判斷,當前動作提交是否產(chǎn)生了webhook。

image-20230423211127448

點擊 View details 可以看到此webhook發(fā)送給對端Jenkins的數(shù)據(jù)信息,和請求狀態(tài)。

  • 200: 表示觸發(fā)Jenkins請求成功;
  • Resend Request: 重新發(fā)送請求;(此處便于排查調(diào)試錯誤)
  • RequestBody: GitLab傳遞給Jenkins的數(shù)據(jù)信息;

image-20230423211316059

假如請求由于xxx原因?qū)е聸]有觸發(fā)jenkins構(gòu)建, 可以在這里點擊 Resend Request 按鈕進行重新發(fā)送請求,而不是再次提交代碼。

image-20230423211351860

如果Jenkins觸發(fā)成功了之后,我們可以在Jenkins的構(gòu)建日志中查看效果。 這些數(shù)據(jù)就是gitlab post傳遞過來的。

image-20230423211409172

到此:你基本上已經(jīng)知道了Gitlab如何觸發(fā)Jenkins的了。(多看幾遍,多練習幾遍)

2.提交流水線優(yōu)化

過濾新建分支和tag的觸發(fā)

你可能發(fā)現(xiàn)問題了,新建一個分支或者標簽也會出現(xiàn)構(gòu)建,這個構(gòu)建是沒有意義的。我們需要排除掉。沒錯,jenkins 的 Generic webHook 也是支持的。

參考官方的說明:https://github.com/jenkinsci/generic-webhook-trigger-plugin/blob/master/src/test/resources/org/jenkinsci/plugins/gwt/bdd/gitlab/gitlab-push-ignore-create-remove-branch.feature

tstmp_20230424064510

添加三個變量,獲取當前的提交信息 $object_kind $before $after

此步驟一定要注意下參數(shù)名和值后面的空格,要去掉

tstmp_20230424064538

通過正則表達式配置觸發(fā)條件:Expression ^push\s(?!0{40}).{40}\s(?!0{40}).{40}$ Text $object_kind $before $after。 push請求只有after和before的值都不是40個0的時候觸發(fā)構(gòu)建(為40個0的情況是刪除分支或者新建分支)

tstmp_20230424064614

本次測試過程:

  • 我們在gitlab上新創(chuàng)建一個分支

image-20230424064755074

可以看到,gitlab上新創(chuàng)建一個分支后,就會觸發(fā)jenkins流水線,這不是我們所期望的,因此下面將進一步優(yōu)化。

image-20230424064821698

  • 在jenlins側(cè)如何過濾出一些構(gòu)建:

before如果是40個0的話,那么可能是創(chuàng)建分支;

after如果是40個0的話,那么可能是合并分支;

image-20230424065115566

image-20230424065148774

  • 這里先編輯jenkins上流水線的觸發(fā)過濾條件

tstmp_20230424065530

通過正則表達式配置觸發(fā)條件:Expression ^push\s(?!0{40}).{40}\s(?!0{40}).{40}$ Text $object_kind $before $after。 push請求只有after和before的值都不是40個0的時候觸發(fā)構(gòu)建(為40個0的情況是刪除分支或者新建分支)

\s是空格

tstmp_20230424065601

配置完成后,保存。

gitlab上再新建分支,觀察是否會觸發(fā)jenkins?

image-20230424065732263

可以看到gitlab上已經(jīng)成功觸發(fā)了,但是被jenkins過濾掉了,符合預(yù)期。😘

image-20230424065748614

image-20230424065812170

如何支持多個分支觸發(fā)構(gòu)建?

方法1:創(chuàng)建多個gitlab webhook, 設(shè)置不同的分支,最終指向同一個jenkins 作業(yè);

tstmp_20230424070102

方法2:過濾

gitlab上設(shè)置,只允許feature開頭的分支才可以進行觸發(fā):

image-20220512161043337

編輯gitlab上的webhook配置:

image-20220512161217000

3、自動觸發(fā)Pipeline

  • 這里寫下代碼

獲取項目地址:

image-20230423214458124

image-20230423214451643

獲取分支名:

image-20230423214649532

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Zds29h2j-1682425393170)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230423214640427.png)]

下載代碼:

利用片段生成器生成代碼:

image-20230424061051864

創(chuàng)建gitlab-root憑據(jù):

image-20230424060852593

image-20230424061127147

生成代碼:

checkout([$class: 'GitSCM', branches: [[name: 'main']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: 'srcUrl']]])

繼續(xù)編寫代碼:

println("${Data}")NewData = readJSON text: "${Data}"
// envName = NewData["envName"]
// appsName = NewData["apps"]["name"]
println("${NewData}")// Get git repo url 項目地址
srcUrl = NewData["project"]["git_http_url"]// Get git repo branch
branchName = NewData["ref"] - "refs/heads/"// current build desc
currentBuild.displayName = "${branchName}"
currentBuild.description = "src: ${srcUrl}"pipeline {agent anystages {stage('CheckOut') {steps {script {println("Checkout: ${srcUrl} ${branchName}")checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${srcUrl}"]]])sh 'ls -l'}}}}
}

image-20230424062941803

將寫好的代碼保存到j(luò)ekins里。

  • 在gitlab任意分支做個提交:

我們先拉取下代碼:

image-20230424062044964

feature-dev-01編輯README.md文件并推送。

Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ cat README.md
情出自愿-事過無悔Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ echo>> README.mdWin@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ git add .
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches itWin@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ git commit -m "佳"
[feature-dev-01 683b378]1 file changed, 1 insertion(+)Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ git push origin feature-dev-01
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 287 bytes | 287.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for feature-dev-01, visit:
remote:   http://172.29.9.101:8076/devops6/devops-demo-service/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature-dev-01
remote:
To http://172.29.9.101:8076/devops6/devops-demo-service.git7cf5639..683b378  feature-dev-01 -> feature-dev-01Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$
  • 此時可以看到j(luò)enkins里的流水線被觸發(fā)了

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aqRmpjvu-1682425393171)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424063019832.png)]

image-20230424063039348

  • 這里再在新建一個分支,用于測試,看是否會觸發(fā)jebnkins流水線
Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-dev-01)
$ git checkout -b feature-003
Switched to a new branch 'feature-003'Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$ ls
HELP.md  README.md  mvnw*  mvnw.cmd  pom.xml  src/Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$ echo "i am very hurt" > README.mdWin@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$ git add .
warning: in the working copy of 'README.md', LF will be replaced by CRLF the next time Git touches itWin@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$ git commit -m "hurt"
[feature-003 1de466b] hurt1 file changed, 1 insertion(+), 2 deletions(-)Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$ git push origin feature-003
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 262 bytes | 262.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for feature-003, visit:
remote:   http://172.29.9.101:8076/devops6/devops-demo-service/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature-003
remote:
To http://172.29.9.101:8076/devops6/devops-demo-service.git* [new branch]      feature-003 -> feature-003Win@DESKTOP-VUMV922 MINGW64 ~/Desktop/demo (feature-003)
$

可以看到,jenkins流水線被觸發(fā)了。

image-20230424063343728

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uKeDH3jU-1682425393172)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424063427563.png)]

🍀 之前代碼

tstmp_20230424073517

webhookData = readJSON text: "${webhook_data}"//分支名稱
env.branchName = webhookData["ref"] - "refs/heads/"
env.projectUrl = webhookData["project"]["git_http_url"]
env.userEmail = webhookData["user_email"]//修改描述信息
currentBuild.description = "BranchName: ${env.branchName}"
currentBuild.displayName = "${env.branchName}"pipeline {agent { label "build01"}stages {stage('Checkout') {steps {script{//checkout checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'd7e4e500-e5c6-4673-ae4b-d43bf4ff5d19', url: "${env.projectUrl}"]]])}}}stage('Build'){steps{script{sh "mvn clean package -DskipTests"}}}stage('test'){steps{script{sh "mvn test"}}}}post {always{script{EmailUser("${env.userEmail}",currentBuild.currentResult)}}}
}def EmailUser(userEmail,status){emailext body: """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <img src="http://192.168.1.200:8080/static/0eef74bf/images/headshot.png"><table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   <tr> <td><br /> <b><font color="#0B610B">構(gòu)建信息</font></b> </td> </tr> <tr> <td> <ul> <li>項目名稱:${JOB_NAME}</li>         <li>構(gòu)建編號:${BUILD_ID}</li> <li>構(gòu)建狀態(tài): ${status} </li>                         <li>項目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    <li>構(gòu)建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr>  </table> </body> </html>  """,subject: "Jenkins-${JOB_NAME}項目構(gòu)建信息 ",to: userEmail}
  • 進一步更新代碼

此時,想要commitId的前8位該如何取呢?

這樣處理就好:

image-20230425154819839

println("${Data}")NewData = readJSON text: "${Data}"
// envName = NewData["envName"]
// appsName = NewData["apps"]["name"]
println("${NewData}")// Get git repo url 項目地址
srcUrl = NewData["project"]["git_http_url"]// Get git repo branch
branchName = NewData["ref"] - "refs/heads/"// Get short commit id 想要commitId的前8位
env.commitId = NewData["checkout_sha"][0..7]// current build desc
currentBuild.displayName = "${branchName}:${env.commitId}"
currentBuild.description = "src: ${srcUrl}"pipeline {agent anystages {stage('CheckOut') {steps {script {println("Checkout: ${srcUrl} ${branchName}")checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${srcUrl}"]]])sh 'ls -l'}}}}
}

觸發(fā)測試:(符合預(yù)期)

image-20230425154646725

4、手動觸發(fā)流水線

很簡單的,就是在jenkins項目里添加一些選項參數(shù),把這些變量寫死在選項參數(shù)里就好。

自動觸發(fā)和手動觸發(fā)的可以并存的,例如寫一些If ……else,但是不推薦。

手動觸發(fā):例如有一些版本分支,這些分支名是會變的,因此不是很方便;但是如果不想每次提交都觸發(fā)流水線,而是等到一個小版本后再觸發(fā),這個用手動觸發(fā)也是可以的哦。

tstmp_20230424073934


//修改描述信息
currentBuild.description = "BranchName: ${env.branchName}"
currentBuild.displayName = "${env.branchName}"pipeline {agent { label "build01"}stages {stage('Checkout') {steps {script{//checkout checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'd7e4e500-e5c6-4673-ae4b-d43bf4ff5d19', url: "${env.projectUrl}"]]])}}}stage('Build'){steps{script{sh "mvn clean package -DskipTests"}}}stage('test'){steps{script{sh "mvn test"}}}}
}

這里做下測試:

  • jenkins上創(chuàng)建項目gitlab-jenkins-service-manual,配置好選項參數(shù)。

image-20230425065842085

image-20230425065859778

  • 編寫pipeline代碼
//修改描述信息
currentBuild.description = "BranchName: ${env.branchName}"
currentBuild.displayName = "${env.branchName}"pipeline {agent { label "build01"}stages {stage('CheckOut') {steps {script {println("Checkout: ${projectUrl} ${branchName}")checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${projectUrl}"]]])sh 'ls -l'}}}        stage('Build'){steps{script{println("mvn clean package -DskipTests") }}}stage('test'){steps{script{println("mvn test")}}}}
}

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZWq1xNg3-1682425393173)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230425065947246.png)]

  • 準備好一個gitlab項目就好。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0jdHoDId-1682425393173)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230425070037754.png)]

  • 測試(符合預(yù)期)

image-20230425070134247

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4dfgOONl-1682425393173)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230425065814820.png)]

5、Jenkins消息通知

添加郵箱

郵箱是標配吧。(釘釘機器人也是可以的)

  • 默認情況可能每個Gitlab用戶沒有配置郵箱的, 需要Gitlab用戶要配置好郵箱。

image-20230424123744541

  • 點擊頭像進入 edit profile

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-oU6PqOcc-1682425393174)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424123355.png)]

添加自己郵箱:

image-20230424123532445

這里需要登錄到自己的郵箱去確認下:

方法1:或者按如下方式直接配置好自己的gitlab郵箱為qq郵箱:(強制更改本次是強制更改的。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-j1VidOF8-1682425393174)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424204730808.png)]

點擊Edit

image-20230424204803668

這里配置好自己的郵箱,點擊保存:

image-20230424204854790

可以看到這里的郵箱被確認了:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-CTNLrvSR-1682425393175)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424205009192.png)]

方法2:在自己的郵箱里確認。

  • 奇怪,我這里怎么163、qq郵箱都收不到確認郵件呢??😥

image-20220512222617386

  • 經(jīng)過百度,發(fā)現(xiàn)是在gitlab里的配置文件要做下配置的:
[root@devops ~]#docker ps
CONTAINER ID   IMAGE                                  COMMAND                  CREATED       STATUS                  PORTS                                                                                      NAMES
11a54a1f4a2a   gitlab/gitlab-ce:14.9.3-ce.0           "/assets/wrapper"        6 days ago    Up 28 hours (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:2222->22/tcp                             devops_tutorial_gitlab
f3f039aa667a   jenkins/jenkins:2.332.2-centos7-jdk8   "/sbin/tini -- /usr/…"   4 weeks ago   Up 24 hours             0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp   jenkins
[root@devops ~]#docker exec -it devops_tutorial_gitlab bash
root@11a54a1f4a2a:/# vi /etc/gitlab/gitlab.rb
#搜索smtp
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "onexlforyou@163.com"
gitlab_rails['smtp_password'] = "NVSMOUfffAxxxccEMXAB"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = 'onexlforyou@163.com'root@11a54a1f4a2a:/# gitlab-ctl reconfigure

image-20220512230631903

image-20220512232120119

image-20220512231434198

  • 此時,發(fā)下就可以正常識別到自己的郵箱了:

image-20220512231704671

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-SZ6LEB58-1682425393176)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20220512231531784.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-QZxrlTV3-1682425393176)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20220512231618636.png)]

  • 參考鏈接:

http://t.zoukankan.com/zgz345-p-9122146.html

image-20220512232258888

  • 在這個頁面配置好郵箱地址,最好這幾個email都配置上吧…最后img

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yTiQhTTT-1682425393177)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424205222529.png)]

  • 這里在gitlab上提交一次代碼,確認post請求里的數(shù)據(jù)體是否含user_email信息

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-G0nCvZFA-1682425393177)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424205446256.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-31XOyYPn-1682425393177)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424205511731.png)]

image-20230424205529691

可以看到,這里的user_email數(shù)據(jù)是有了。

安裝Email Extension插件

  • Jenkins需要配置郵件通知,安裝插件Email Extension安裝后重啟Jenkins。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ItnszpQZ-1682425393178)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424205619.png)]

  • 然后進入系統(tǒng)管理-> 系統(tǒng)設(shè)置 , 先配置下全局的admin的郵箱地址。(最后配置下不然可能會出錯的)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Pm9S1M6c-1682425393178)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424205904038.png)]

拿到郵箱授權(quán)碼

  • 登入郵箱拿到授權(quán)碼

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Hj46fHWs-1682425393178)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424210549.png)]

zpnchpffffgggvnfgfeqwggzhgecef

發(fā)送短信之后獲取授權(quán)碼

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uMNFQ6Ov-1682425393178)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424210610.png)]

配置Email Extension

  • ->Extended E-email Notification。設(shè)置郵件系統(tǒng)配置信息。

這里我使用的是QQ郵箱,填寫SMTP服務(wù)器地址smtp.qq.com 和端口 465注意要開啟SSL,密碼為授權(quán)碼。

這里寫下自己的qq的授權(quán)碼憑證:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yq5sxTb9-1682425393179)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424211243147.png)]

  • 換個選項注意下: 不選擇 HTML 就是普通的文本, HTML 可以支持html網(wǎng)頁,更加美觀。這里選擇 HTML

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5hAAXK4j-1682425393179)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424211401396.png)]

編寫代碼

  • pipeline as code , 進入片段生成器,生成郵件通知代碼。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-AmNU2xzm-1682425393179)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424211508.png)]

emailext body: 'hello world!....jenkins', subject: 'test.....', to: '2560350642@qq.com'

然后我們將此段代碼加入到Jenkins pipeline 中運行, 可以看到效果:

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-88VOg56c-1682425393179)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/tstmp_20230424211545.png)]

  • jenkins as code 將email 寫成一個函數(shù)。這個通知信息是一個html格式的。

def EmailUser(userEmail,status){emailext body: """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <img src="http://192.168.1.200:8080/static/0eef74bf/images/headshot.png"><table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   <tr> <td><br /> <b><font color="#0B610B">構(gòu)建信息</font></b> </td> </tr> <tr> <td> <ul> <li>項目名稱:${JOB_NAME}</li>         <li>構(gòu)建編號:${BUILD_ID}</li> <li>構(gòu)建狀態(tài): ${status} </li>                         <li>項目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    <li>構(gòu)建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr>  </table> </body> </html>  """,subject: "Jenkins-${JOB_NAME}項目構(gòu)建信息 ",to: userEmail}
  • 這里繼續(xù)編寫下代碼

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uyXhJU4i-1682425393179)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424212344209.png)]

println("${Data}")NewData = readJSON text: "${Data}"
// envName = NewData["envName"]
// appsName = NewData["apps"]["name"]
println("${NewData}")// Get git repo url 項目地址
srcUrl = NewData["project"]["git_http_url"]// Get git repo branch
branchName = NewData["ref"] - "refs/heads/"// Get git user email
userEmail = NewData["user_email"]// current build desc
currentBuild.displayName = "${branchName}"
currentBuild.description = "src: ${srcUrl}"pipeline {agent anystages {stage('CheckOut') {steps {script {println("Checkout: ${srcUrl} ${branchName}")checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${srcUrl}"]]])sh 'ls -l'}}}}post {always{script{EmailUser(userEmail,"${currentBuild.currentResult}")}}}}def EmailUser(userEmail,status){emailext body: """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <img src="http://192.168.1.200:8080/static/0eef74bf/images/headshot.png"><table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   <tr> <td><br /> <b><font color="#0B610B">構(gòu)建信息</font></b> </td> </tr> <tr> <td> <ul> <li>項目名稱:${JOB_NAME}</li>         <li>構(gòu)建編號:${BUILD_ID}</li> <li>構(gòu)建狀態(tài): ${status} </li>                         <li>項目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    <li>構(gòu)建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr>  </table> </body> </html>  """,subject: "Jenkins-${JOB_NAME}項目構(gòu)建信息 ",to: userEmail}

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-zMluC30w-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424220307725.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-EdJCbw0P-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424220258311.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Y1cjr9Vu-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424220237905.png)]

觸發(fā)測試

  • 提交下代碼,觸發(fā)下

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Me3WP333-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424212630637.png)]

  • 自己的測試現(xiàn)象(符合預(yù)期)

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aoccgQGI-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424214039852.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fM9J30cm-1682425393180)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424214104233.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-kE3BBZoj-1682425393181)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424214122673.png)]

解決默認圖片顯示異常問題

  • 可以看到這里的人圖片顯示異常,這里我們使用oss路徑來存儲圖片就可以了。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-rLK47nvC-1682425393181)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230424220342128.png)]

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZwsrlHfV-1682425393181)(https://bucket-hg.oss-cn-shanghai.aliyuncs.com/img/image-20230425161711144.png)]

本次最新代碼(測試成功)

//打印jenkins的Generic Webhook Trigger接收到的數(shù)據(jù),默認為字符串
println("${Data}")//格式化webhook接收的數(shù)據(jù)為json格式
NewData = readJSON text: "${Data}" //$表示全量數(shù)據(jù)
// envName = NewData["envName"]
// appsName = NewData["apps"]["name"]
println("${NewData}")// Get git repo url 項目地址
srcUrl = NewData["project"]["git_http_url"]// Get git repo branch 提交分支
branchName = NewData["ref"] - "refs/heads/"// Get git user email 
userEmail = NewData["user_email"]// Get short commit id 想要commitId的前8位 commit ID
env.commitId = NewData["checkout_sha"][0..7]
//env.commitId = NewData["checkout_sha"] // 提交人
env.commitUser = NewData["user_username"]  //這里為什么要使用env.定義變量呢? 因為全局變量保險些,便于后面所有階段間的引用;// current build desc
currentBuild.displayName = "${branchName}:${env.commitId}"
currentBuild.description = "src: ${srcUrl}"pipeline {agent anystages {stage('CheckOut') {steps {script {println("Checkout: ${srcUrl} ${branchName}")checkout([$class: 'GitSCM', branches: [[name: "${branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${srcUrl}"]]])sh 'ls -l'}}}// 代碼構(gòu)建stage("Build"){steps{script{echo "build"}}}//單元測試stage("UnitTest"){steps{script{echo "unit test"}}}//部署stage("deploy"){steps {script{echo "deploy"}}}}post {always{script{EmailUser(userEmail,"${currentBuild.currentResult}")}}}}def EmailUser(userEmail,status){emailext body: """<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> <img src="https://s1.ax1x.com/2023/04/25/p9usju8.jpg"><table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">   <tr> <td><br /> <b><font color="#0B610B">構(gòu)建信息</font></b> </td> </tr> <tr> <td> <ul> <li>項目名稱:${JOB_NAME}</li>         <li>構(gòu)建編號:${BUILD_ID}</li> <li>構(gòu)建狀態(tài): ${status} </li>                         <li>項目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    <li>構(gòu)建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li> </ul> </td> </tr> <tr>  </table> </body> </html>  """,subject: "Jenkins-${JOB_NAME}項目構(gòu)建信息 ",to: userEmail}
http://m.aloenet.com.cn/news/42391.html

相關(guān)文章:

  • 天津建設(shè)工程信息網(wǎng)專家sem 優(yōu)化價格
  • 網(wǎng)站上添加子欄目濰坊百度網(wǎng)站排名
  • 深圳網(wǎng)站建設(shè)公司是選擇寧波seo優(yōu)化公司
  • 備案上個人網(wǎng)站和企業(yè)網(wǎng)站的區(qū)別百度sem是什么意思
  • wordpress開啟多站點功網(wǎng)絡(luò)營銷有哪些特點
  • 網(wǎng)站優(yōu)化 代碼優(yōu)化互聯(lián)網(wǎng)優(yōu)化
  • 如何為網(wǎng)站開發(fā)app中公教育培訓(xùn)機構(gòu)官網(wǎng)
  • 便宜網(wǎng)站建設(shè)公司如何建立自己的網(wǎng)站平臺
  • 微信怎么做捐錢的網(wǎng)站網(wǎng)站推廣費用
  • 一站式裝修平臺杭州seo論壇
  • 網(wǎng)頁設(shè)計網(wǎng)站建設(shè)過程報告免費網(wǎng)站入口在哪
  • 石碣仿做網(wǎng)站seo技術(shù)分享博客
  • 知名跟單網(wǎng)站做信號提供方女教師網(wǎng)課入06654侵錄屏
  • 安徽做網(wǎng)站免費seo排名軟件
  • 石家莊便宜網(wǎng)站制作html底部友情鏈接代碼
  • 做動態(tài)網(wǎng)站的軟件有哪些最近軍事新聞熱點大事件
  • 為什么做民宿網(wǎng)站百度競價排名公式
  • 網(wǎng)站開發(fā)設(shè)計定制百度谷歌seo優(yōu)化
  • 開發(fā)一個網(wǎng)站測試要怎么做的seo平臺優(yōu)化服務(wù)
  • 上海網(wǎng)站建設(shè)品ui培訓(xùn)
  • 網(wǎng)站集約化建設(shè)情況匯報網(wǎng)絡(luò)營銷咨詢服務(wù)
  • 做網(wǎng)站域名 空間廣州競價托管
  • 學(xué)校網(wǎng)站群建設(shè)方案找個網(wǎng)站
  • 淘客請人做網(wǎng)站網(wǎng)站策劃書
  • 做網(wǎng)站大概要多外鏈怎么打開
  • 如何建設(shè)網(wǎng)站的管理平臺免費網(wǎng)站seo
  • 婁底網(wǎng)站建設(shè)工作室谷歌收錄查詢
  • 成都建設(shè)網(wǎng)站微營銷官網(wǎng)
  • 市局網(wǎng)站建設(shè)建議如何注冊自己的網(wǎng)站
  • 網(wǎng)站規(guī)劃與建設(shè)論文網(wǎng)站seo外包公司有哪些