日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

自动化集成:Pipeline流水语法详解

發(fā)布時間:2025/3/16 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 自动化集成:Pipeline流水语法详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:該系列文章,圍繞持續(xù)集成:Jenkins+Docker+K8S相關組件,實現(xiàn)自動化管理源碼編譯、打包、鏡像構建、部署等操作;本篇文章主要描述Pipeline流水線用法

一、Webhook原理

Pipeline流水線任務通常情況下都是自動觸發(fā)的,在Git倉庫中配置源碼改動后通知的地址即可。

例如在Gitee倉庫中,基于WebHook的配置,可以在向倉庫push代碼后,自動回調預先設定的請求地址,從而觸發(fā)代碼更新后的打包動作,基本流程如下:

這里涉及到兩個核心配置:

  • Gitee回調:即倉庫接收到push請求后的通知地址;在倉庫管理的WebHooks選項中;
  • Jenkins流程:編寫流水線任務,處理代碼提交后的自動化流程;這里需要Jenkins地址可以在外網訪問,網上的組件很多,自行選擇搭建即可;

注意:可以先隨意設置回調地址,在請求日志中直接拷貝請求參數,在postman中去觸發(fā)Jenkins任務,這樣在測試時會方便很多。

這里結合Gitee的幫助文檔,去分析不同push動作的參數標識,可以判斷分支的創(chuàng)建、推送、刪除等操作,例如:

"after": "1c50471k92owjuh37dsadfs76ae06b79b6b66c57", "before": "0000000000000000000000000000000000000000",

創(chuàng)建分支:before字符都是0;刪除分支:after字符都是0;

二、流水線配置

1、插件安裝

在Jenkins插件管理中,安裝Generic-Webhook-Trigger插件,流水線pipeline相關組件在Jenkins初始化的時候已經安裝了。

2、創(chuàng)建流水線

新建Item,輸入任務名稱,選擇pipeline選項即可:

選擇Webhook選項,頁面提示了觸發(fā)的方式。

3、觸發(fā)流水線

http://用戶名:密碼@JENKINS_URL/generic-webhook-trigger/invoke

基于如上方式通過認證,觸發(fā)流水線執(zhí)行,會生成任務日志,即流程是通順的。

三、Pipeline語法

1、結構語法

  • triggers:基于hook模式觸發(fā)流水線任務;
  • environment:聲明全局通用的環(huán)境變量;
  • stages:定義任務步驟,即流程分段處理;
  • post.always:最終執(zhí)行的動作;

常規(guī)流程中的整體結構如下:

pipeline {agent anytriggers {}environment {}stages {}post { always {}} }

把各個節(jié)點下的腳本配置進去,就會生成一個自動化的流水線任務。注意這里不勾選使用Groovy沙盒選項。

2、參數解析

這里說的參數解析是指,Gitee通過hook機制請求Jenkins服務攜帶的參數,這里主要解析post參數即可,解析方式看說明:

這里從hook回調的參數中選了幾個流程中使用的參數,下面看具體解析方式,在上圖中點擊新增:

{"ref":"refs/heads/master","repository":{"name":"butte-auto-parent","git_http_url":"倉庫地址-URL"},"head_commit":{"committer":{"user_name":"提交人名稱",}},"before":"277bf91ba85996da6c","after":"178d56ae06b79b6b66c" }

把上述參數依次做好配置即可,這樣在工作流中就可以使用這些參數。

3、觸發(fā)器節(jié)點

這里即triggers模塊配置,核心作用是加載觸發(fā)流程的一些參數,后續(xù)在腳本中使用,其他相關配置按需選擇即可,注意這里的參數需要在上個步驟中配置:

triggers {GenericTrigger(genericVariables: [[key: 'ref', value: '$.ref'],[key: 'repository_name', value: '$.repository.name'],[key: 'repository_git_url', value: '$.repository.git_http_url'],[key: 'committer_name', value: '$.head_commit.committer.user_name'],[key: 'before', value: '$.before'],[key: 'after', value: '$.after']],// causeString: ' Triggered on $ref' ,// printContributedVariables: true,// 打印請求參數// printPostContent: true) }

4、環(huán)境變量

聲明一些全局的環(huán)境變量,也可以直接定義,在流程中用${變量}的方式引用:

environment {branch = env.ref.split("/")[2].trim()is_master_branch = "master".equals(branch)is_create_branch = env.before.replace('0','').trim().equals("")is_delete_branch = env.after.replace('0','').trim().equals("")is_success = false }

這里根據hook請求參數,解析出分支的操作類型:是否創(chuàng)建、是否刪除、是否主干分支,以及定義一個is_success流程是否成功的標識。

5、分段流程

這里主要分為五個步驟:解析數據、拉取分支、處理Pom文件、分支推送、項目打包;

stages {// 解析倉庫信息stage('Parse') {steps {echo "倉庫分支 : ${branch} \n倉庫名稱 : ${repository_name} \n倉庫地址 : ${repository_git_url} \n提交用戶 : ${committer_name}"script {if ("true".equals(is_master_branch)) {echo "保護分支 : ${branch}"}if ("true".equals(is_create_branch)) {echo "創(chuàng)建分支 : ${branch}"}if ("true".equals(is_delete_branch)) {echo "刪除分支 : ${branch}"}}}}// 拉取倉庫分支stage('GitPull') {steps {script {if ("false".equals(is_delete_branch)) {echo "拉取分支 : ${branch}"git branch: "${branch}",url: "${repository_git_url}"}}}}// 解析倉庫Pom文件stage('MvnPom') {steps {script {// 解析Pom文件內容def pom = readMavenPom file: 'pom.xml'def version = "${pom.version}"def encode = pom.getProperties().get("project.build.sourceEncoding")echo "Pom版本 : "+ versionecho "Pom編碼 : "+ encodedef devVersion = "${branch}-"+versiondef jarName = "${branch}-"+version+".jar"echo "Now版本 : "+ devVersionecho "Jar名稱 : "+ jarName// 修改Pom文件內容// pom.getProperties().put("dev.version","${devVersion}".trim().toString())// writeMavenPom file: 'pom.xml', model: pomecho "update pom success"}}}// 推送倉庫分支stage('GitPush') {steps {script {echo "git push success"}}}// 本地打包流程stage('Package') {steps {script {sh 'mvn clean package -Dmaven.test.skip=true'is_success = true}}} }
  • 解析數據:解析并輸出部分參數信息;
  • 拉取分支:結合Git命令,拉取分支代碼;
  • 處理Pom文件:對pom文件的讀取和修改;
  • 分支推送:結合Git命令,推送分支代碼;
  • 項目打包:結合Mvn命令,完成項目打包;

注意:這里在本地測試流程時,并沒有推送代碼;在項目打包完成后,結合shell腳本完成服務的啟動發(fā)布。

6、消息通知

在流程的最后,識別任務的執(zhí)行標識is_success,通知相關人員是否打包成功,這里的通知方式可以選擇郵件或者其他API推送的通知類型,不過多描述:

post {always {script {echo "notify : ${committer_name} , pipeline is success : ${is_success}"}} }

7、執(zhí)行日志

完成上面pipeline流水線腳本開發(fā)后,通過postman工具不斷發(fā)送請求,完成腳本調試:

這里也可以點擊流程里的不同模塊,查看該模塊下的日志信息:

說明:完整的pipeline腳本內容放在末尾的Gitee開源倉庫中,有需要的自行獲取。


同系列推薦

  • Jenkins管理工具詳解
  • 分布式服務部署發(fā)布
  • 微服務灰度發(fā)布原理
  • 服務自動化部署和管理
  • 微服務組件二次淺封裝

四、源代碼地址

GitEE·地址 https://gitee.com/cicadasmile/butte-auto-parent Wiki·地址 https://gitee.com/cicadasmile/butte-java-note

總結

以上是生活随笔為你收集整理的自动化集成:Pipeline流水语法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。