2023-02-28 12:16:46 來(lái)源:騰訊云
背景:
cicd還是基于jenkins(spinnaker雖然也玩了,公司規(guī)模也小,簡(jiǎn)單jenkins可以走天下)其實(shí)很多場(chǎng)景還是手動(dòng)構(gòu)建的,基本沒(méi)有做自動(dòng)構(gòu)建的jenkins流程。今天就突然有了那么一個(gè)需求。合作方大爺要頻繁修改一個(gè)鏡像。恩他們構(gòu)建了鏡像上傳到倉(cāng)庫(kù)(倉(cāng)庫(kù)咱們的,對(duì)方木有),他們也不想第二次操作jenkins什么的...當(dāng)然了他們也不會(huì)把代碼倉(cāng)庫(kù)給到咱,然后我就想到了jenkins的構(gòu)建觸發(fā)器-Generic Webhook Trigger去觸發(fā)構(gòu)建。
jenkins-harbor webhook自動(dòng)觸發(fā)構(gòu)建
關(guān)于jenkins的觸發(fā)器插件:
搜索插件名稱(chēng):Generic Webhook Trigger
(相關(guān)資料圖)
重啟jenkins后,進(jìn)入一個(gè)Pipeline項(xiàng)目設(shè)置,已經(jīng)可以選擇這個(gè)觸發(fā)器了....
這里就忽略了,我這里早安裝了插件好多年了......
harbor or ccr倉(cāng)庫(kù)webhook
其實(shí)我的鏡像倉(cāng)庫(kù)使用了騰訊云的tcr鏡像倉(cāng)庫(kù),倉(cāng)庫(kù)可以配置觸發(fā)器
看了一眼文檔觸發(fā)器操作指南:
順便看了一眼harbor的示例:https://www.1nth.com/post/jenkins_webhook/
參數(shù)結(jié)構(gòu)目測(cè)都一樣的直接拿來(lái)用了!
jenkins Generic Webhook Trigger pipeline
jenkins創(chuàng)建pipeline
新建一個(gè)任務(wù),自定義任務(wù)名稱(chēng),選擇流水線(xiàn)pipeline方式:
直接寫(xiě)pipeline了:
pipeline { agent any triggers { GenericTrigger( genericVariables: [ [key: "harbor_type", value: "$.type", expressionType: "JSONPath"], [key: "harbor_image", value: "$.event_data.resources[0].resource_url", expressionType: "JSONPath"], [key: "image_tag", value: "$.event_data.resources[0].tag", expressionType: "JSONPath"], [key: "harbor_namespace", value: "$.event_data.repository.namespace", expressionType: "JSONPath"], [key: "repo_name", value: "$.event_data.repository.name", expressionType: "JSONPath"], ], token: "xxxxxxx" , causeString: " Triggered on $branch" , printContributedVariables: true, printPostContent: true, //regexpFilterText: "$ref", //regexpFilterExpression: "refs/heads/" + BRANCH_NAME regexpFilterText: "$harbor_type#$harbor_namespace#$repo_name", regexpFilterExpression: "pushImage#xxxx#xxxx" ) } stages { stage("Hello") { steps { sh """ echo harbor_type=$harbor_type echo harbor_image=$harbor_image echo harbor_image=$image_tag echo repo_name=$repo_name echo harbor_namespace=$harbor_namespace echo "do something..." #kubectl set image deployment.apps/$repo_name $repo_name=$harbor_image """ } } }}
鏡像倉(cāng)庫(kù)創(chuàng)建觸發(fā)器:
設(shè)置名稱(chēng),觸發(fā)動(dòng)作選擇了推送鏡像,命名空間,倉(cāng)庫(kù)名稱(chēng)設(shè)置好,版本tag空。url 的格式為:
https://jenkins.xxx.com/generic-webhook-trigger/invoke?token=xxxxxx
token為上面pipeline腳本中設(shè)置的token內(nèi)容
相對(duì)于https://www.1nth.com/post/jenkins_webhook/。我增加了一個(gè)image_tag 的字段。因?yàn)槲颐看味际切薷膖ag版本標(biāo)簽的。習(xí)慣這樣了.后面會(huì)用到這個(gè)image_tag(變量的名稱(chēng)其實(shí)都可以自定義,不一定用示例中的,我是偷懶,懶得改了)
構(gòu)建鏡像push 測(cè)試
隨手push一下鏡像到鏡像倉(cāng)庫(kù):
docker push xxxx.xxxx.com/xxxx/xxxx:v2
看了一眼騰訊云鏡像倉(cāng)庫(kù)的觸發(fā)器:
jenkins自動(dòng)觸發(fā)構(gòu)建成功:
下一步完善到kubernetes發(fā)布:
步驟就是sed修改tpl到y(tǒng)aml 文件然后apply yaml文件發(fā)布!
繼續(xù)完善一下pipeline:
pipeline { agent any triggers { GenericTrigger( genericVariables: [ [key: "harbor_type", value: "$.type", expressionType: "JSONPath"], [key: "harbor_image", value: "$.event_data.resources[0].resource_url", expressionType: "JSONPath"], [key: "image_tag", value: "$.event_data.resources[0].tag", expressionType: "JSONPath"], [key: "harbor_namespace", value: "$.event_data.repository.namespace", expressionType: "JSONPath"], [key: "repo_name", value: "$.event_data.repository.name", expressionType: "JSONPath"], ], token: "xxxxx" , causeString: " Triggered on $branch" , printContributedVariables: true, printPostContent: true, //regexpFilterText: "$ref", //regexpFilterExpression: "refs/heads/" + BRANCH_NAME regexpFilterText: "$harbor_type#$harbor_namespace#$repo_name", regexpFilterExpression: "pushImage#xxxx#xxxx" ) } stages { stage("Hello") { agent { label "xxxx" } steps { sh "sed -e "s/{image_tag}/$image_tag/g" /home/xxxx/jenkins/yaml/xxxx/xxxx.tpl > /home/xxxx/jenkins/yaml/xxxx/xxxx.yaml" sh "sudo kubectl apply -f /home/xxxx/jenkins/yaml/xxxx/xxxx.yaml --namespace=xxxx" // sh """ // echo harbor_type=$harbor_type // echo harbor_image=$harbor_image // echo harbor_image=$image_tag // echo repo_name=$repo_name // echo harbor_namespace=$harbor_namespace // echo "do something..." // #kubectl set image deployment.apps/$repo_name $repo_name=$harbor_image // """ } } }}
注意:regexpFilterExpression: "pushImage#xxxx#xxxx" 的格式??梢宰约宏P(guān)注一下Optional filter正則匹配(其實(shí)也可以偷懶不加,看個(gè)人吧)
演示先屏蔽了apply過(guò)程。只sed修改tpl文件為yaml文件:
xxx.tpl模板
apiVersion: apps/v1kind: Deploymentmetadata: name: xxxxspec: replicas: 1 strategy: rollingUpdate: maxSurge: 0 maxUnavailable: 1 selector: matchLabels: app: xxxx template: metadata: labels: app: xxxx spec: containers: - name: xxxx image: xxxx.xxxx.com/xxxx/xxxx:{image_tag} envFrom: - configMapRef: name: xxxx ports: - containerPort: 3000 protocol: TCP resources: requests: memory: "256M" cpu: "250m" limits: memory: "2048M" cpu: "2000m" imagePullSecrets: - name: xxxx
看一下生成的yaml文件:
例子其實(shí)就是一個(gè)wiki項(xiàng)目。這樣基本就完了。當(dāng)然了我這里用的簡(jiǎn)單指定了執(zhí)行的agent
agent { label "xxxx" }
stage的名字也可以換一下,這里偷懶了hello都沒(méi)有修改
stage("Hello") {}
好久不用了觸發(fā)器,這里就記錄一下......
然后吐槽一下騰訊云tcr鏡像服務(wù)的觸發(fā)器:
任務(wù)狀態(tài)的排序
這里說(shuō)的是錯(cuò)誤or成功的排序,首先在觸發(fā)器任務(wù)重錯(cuò)誤的優(yōu)先級(jí)沒(méi)有那么高,所以將錯(cuò)誤排在前面完全沒(méi)有必要:
正常的排序也完全沒(méi)有規(guī)律
這任務(wù)的id排序完全沒(méi)有規(guī)律....感覺(jué)沒(méi)有處理好......
后來(lái)我又觸發(fā)了幾次任務(wù)順序更是可怕,這也沒(méi)有失敗的優(yōu)先了 ?怎么排序的?且排序的失敗的時(shí)間格式也與正常的不一致?
已經(jīng)反饋給相關(guān)人員期待能完善一下,就正常的任務(wù)排序就好了最多做一個(gè)成功失敗的勾選,這排序體驗(yàn)太差了.....
標(biāo)簽: Jenkins
- 加快虛擬仿真實(shí)訓(xùn)基地建設(shè) 啟動(dòng)職業(yè)學(xué)校信息化建設(shè)試點(diǎn)很必要
- “雙減”后如何在滿(mǎn)足學(xué)生多樣需求方面做“加法”?
- 處于生理活躍期且心理發(fā)展不成熟 高校開(kāi)設(shè)公共衛(wèi)生必修課很必要
- 價(jià)格低于相應(yīng)蔬菜零售價(jià) 西安投放約1萬(wàn)噸政府儲(chǔ)備蔬菜
- 深受年輕消費(fèi)群體所青睞 國(guó)潮風(fēng)商品成為年貨新選擇
知識(shí)
- 他把銀行卡賣(mài)給騙子,“黑吃黑”“截胡”十萬(wàn)元
- “老司機(jī)”4S店試駕豪車(chē) 結(jié)果油門(mén)當(dāng)剎車(chē)撞了
- 新開(kāi)工改造城鎮(zhèn)老舊小區(qū)5.34萬(wàn)個(gè)
- 發(fā)動(dòng)巡河志愿者2萬(wàn)余名 “用心護(hù)好每一條河”
- 假客服的套路:偽裝成大平臺(tái)客服,層層布局引人上鉤
人物
- 浙江兩輪核酸檢測(cè)結(jié)果均為陰性 無(wú)新增本土陽(yáng)性感染者
- 新疆阿克蘇地區(qū)庫(kù)車(chē)市發(fā)生4.1級(jí)地震 震源深度18千米
- 抵返哈爾濱人員須持48小時(shí)內(nèi)核酸檢測(cè)陰性證明
- 浙大紫金港校區(qū)已解封 有7337人有序離開(kāi)該校區(qū)
- 2021年廣東省第七屆風(fēng)箏錦標(biāo)賽落幕
- 黑龍江訥河市啟動(dòng)全員核酸檢測(cè) 目前訥河市全員核酸檢測(cè)結(jié)果均為陰性
- 【同心粵港澳 攜手大灣區(qū)】南頭古城,搭建深港澳三地文化創(chuàng)意活動(dòng)交流平臺(tái)
- 重慶入河排污口整治工作推進(jìn)至全市26個(gè)區(qū)縣
- 四川省第二批政法隊(duì)伍教育整頓:立案審查調(diào)查省級(jí)政法機(jī)關(guān)干警58人
- 長(zhǎng)三角區(qū)域生態(tài)環(huán)境部門(mén)“云簽約”長(zhǎng)江大保護(hù)倡議書(shū)
- 古老長(zhǎng)城重?zé)ㄐ律鷻C(jī)
- 藏不住了!你同事里有許多“武林高手”……
- 浙江杭州2例無(wú)癥狀感染者系感染德?tīng)査儺愔?/a>
- 喜馬拉雅的深情和誓言
- 浪漫之城打造山海城一體新地標(biāo)
- 讓老年人更適應(yīng)數(shù)字生活
- 內(nèi)蒙古通遼市新增1例本土確診病例、1例無(wú)癥狀感染者
- 徐州無(wú)新增確診病例 核酸檢測(cè)55515人結(jié)果均為陰性
- 甘肅培樹(shù)“農(nóng)家巧娘”增技能:返鄉(xiāng)創(chuàng)業(yè)掌勺又“掌柜”
- 內(nèi)蒙古通遼市科爾沁區(qū)一地調(diào)整為中風(fēng)險(xiǎn)地區(qū)
- 上海本輪疫情涉及閉環(huán)管理的醫(yī)療機(jī)構(gòu)全面恢復(fù)門(mén)急診
- 青年學(xué)生成艾滋病感染高發(fā)人群 “社會(huì)疫苗”如何打?
- 內(nèi)蒙古滿(mǎn)洲里新增本土確診病例1例 當(dāng)?shù)亻_(kāi)展第二輪大規(guī)模核酸檢測(cè)
- 江西無(wú)新增本土確診病例 上饒全面恢復(fù)正常生產(chǎn)生活秩序
- 中老鐵路上會(huì)四國(guó)語(yǔ)言的列車(chē)長(zhǎng):用心維護(hù)中老友誼的橋梁
- 海南首次發(fā)現(xiàn)有環(huán)志的世界極危鳥(niǎo)種勺嘴鷸
- 一場(chǎng)“網(wǎng)絡(luò)勸生者”和“網(wǎng)絡(luò)勸死者”的戰(zhàn)役
- 內(nèi)蒙古通遼新增本土確診和無(wú)癥狀感染者各1例 軌跡公布
- 江西中煙工業(yè)有限責(zé)任公司原總經(jīng)理姚慶艷接受審查調(diào)查
- 寧夏45例新冠肺炎確診病例均已治愈出院
- 內(nèi)蒙古通遼市科爾沁區(qū)發(fā)現(xiàn)2名初篩陽(yáng)性人員
- 生活在鬧鐘里的丈夫:自己遲一秒,漸凍癥妻子就會(huì)多一分疼
- 遼寧新冠肺炎確診病例零新增
- 11月28日16-24時(shí),內(nèi)蒙古新增本土確診病例1例
- 奧密克戎毒株為何“需要關(guān)注”?現(xiàn)有防疫工具還有效嗎?
- 黑龍江新增本土無(wú)癥狀感染者1例
- 這輩子一定要去趟這個(gè)公園 在這里“有種愛(ài)叫放手”
- 那年今日 | 一張漫畫(huà)漲知識(shí)之11月29日
- 寒潮預(yù)警!我國(guó)中東部迎大范圍降溫 黑龍江等地降幅可達(dá)12℃
- 冷空氣繼續(xù)影響我國(guó)中東部 華北黃淮等地有霧和霾天氣