11. Jenkins 觸發(fā)器及視圖

1 構(gòu)建觸發(fā)器(鉤子)

構(gòu)建觸發(fā)器(webhook)误续,有的人稱為鉤子吗跋,實際上是一個 HTTP 回調(diào),其用于在開發(fā)人員向 gitlab 提交代碼后能夠觸發(fā) jenkins 自動執(zhí)行代碼構(gòu)建操作斧抱。

以下為新建一個開發(fā)分支析命,只有在開發(fā)人員向開發(fā)(develop)分支提交代碼的時候才會觸發(fā)代碼構(gòu)建队丝,而向主分支提交的代碼不會自動構(gòu)建著榴,需要運維人員手動部署代碼到生產(chǎn)環(huán)境。

圖片.png

1.1 gitlab開發(fā)分支創(chuàng)建,代碼提交以及合并流程

  • 進(jìn)到gitlab項目里(web-02), 選擇新建分支
圖片.png
圖片.png
  • 向開發(fā)分支提交代碼
root@git-client:/opt/web-02# git branch
* master
root@git-client:/opt/web-02# git pull # 拉取最新代碼, 把devlop分支拉下來
Username for 'http://10.0.0.239': developer-01 
Password for 'http://developer-01@10.0.0.239': 
From http://10.0.0.239/qq/web-02
 * [new branch]      develop    -> origin/develop
Already up to date.
root@git-client:/opt/web-02# git branch
* master
root@git-client:/opt/web-02# git checkout develop # 切換到develop分支
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
Switched to a new branch 'develop'
root@git-client:/opt/web-02# git branch
* develop
  master

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>qq</title>
</head>
<body>
<h1>web-02-v.111111</h1>
<h1>web-02-v.222222</h1>
<h1>web-02-v.333333</h1>
<h1>web-02-v.444444</h1>
<h1>web-02-v.555555</h1>
<h1>web-02-v.666666</h1>
<h1>web-02-v.777777</h1>
<h1>web-02-v.888888</h1>
<h1>web-02-v.999999</h1>
<h1>web-02-v.10</h1>                                                                                                                                                        

</body>
</html>

root@git-client:/opt/web-02# git add index.html 
root@git-client:/opt/web-02# git commit -m "v10"
[develop 24d3539] v10
 1 file changed, 1 insertion(+)
root@git-client:/opt/web-02# git push -u origin
Username for 'http://10.0.0.239': developer-01
Password for 'http://developer-01@10.0.0.239': 
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 302 bytes | 302.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: 
remote: To create a merge request for develop, visit:
remote:   http://10.0.0.239/qq/web-02/-/merge_requests/new?merge_request%5Bsource_branch%5D=develop
remote: 
To http://10.0.0.239/qq/web-02.git
   9e27543..24d3539  develop -> develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
  • 此時master分支是v9版本, develop分支是v10版本
圖片.png
圖片.png
  • 模擬開發(fā)上傳代碼到develop分支后, 提交代碼合并申請, 由開發(fā)項目管理人員批準(zhǔn)合并

公司中一般都是由開發(fā)負(fù)責(zé)人去做代碼合并, 開發(fā)將代碼提交到開發(fā)分支后, 把master分支合并到develop上, 這樣develop分支就是最新的代碼, 之后部署到測試環(huán)境進(jìn)行測試, 當(dāng)測試沒問題后, 需要提交一個合并申請, 把開發(fā)分支的代碼合并到master分支, 然后由開發(fā)負(fù)責(zé)人進(jìn)行審批合并.

這里模擬developer-01為開發(fā)普通用戶, developer-02為開發(fā)負(fù)責(zé)人, 先給developer-02授權(quán)qq項目的owner. 權(quán)限設(shè)置的最小粒度是一個組, 不能對項目單獨授權(quán)

圖片.png
  • 假設(shè)developer-01提交了v10版本后, 測試沒問題, 之后提交merge request
圖片.png
圖片.png
圖片.png
圖片.png

因為developer-01本身就是管理員賬戶, 因此, 自己也會提示可以批準(zhǔn)申請, 工作中請求會被發(fā)給開發(fā)的負(fù)責(zé)人, 這里就是developer-02賬號

負(fù)責(zé)人登陸后會在右上角看到merge requests提示

圖片.png
圖片.png
圖片.png

點擊同意即可, 不用刪除原分支

圖片.png

開發(fā)回到gitlab, 驗證master分支升級到了v10版本

圖片.png

1.2 配置gitlab觸發(fā)器

1.2.1 jenkins安裝插件

Gitlab Authentication Plugin和Gitlab Hook Plugin

圖片.png

注意: 1.4.2版本的插件會有安全隱患, 所有的jenkins配置都是以明文保存, 具有jenkins服務(wù)器文件系統(tǒng)權(quán)限的用戶可以登錄并且修改配置, 造成構(gòu)建不可用, 還需要重新配置. 因此, jenkins服務(wù)器的用戶名和密碼不要和其他服務(wù)器一樣, 要妥善保管

圖片.png

1.2.2 修改jenkins用戶權(quán)限

如果想使用構(gòu)建觸發(fā)器, 那么需要修改用戶授權(quán)為登陸用戶可以做任何事, 并且匿名用戶具有可讀權(quán)限. 這樣之前設(shè)置的Roles-based就失效了, 任何用戶登陸都是超級管理員權(quán)限, 因此, 觸發(fā)器的配置可以在任意賬戶配置

圖片.png

啟動跨站請求偽造保護(hù)

圖片.png

早期的jenkins版本, 配置這些后, gitlab就可以跨站觸發(fā)構(gòu)建了, 不過新版本的jenkins還需要添加一個認(rèn)證字段, 否則會報錯, 不過可以直接用curl命令或者通過Python腳本觸發(fā)

openssl rand -hex 12
b8f29d278dc227ffbce317be # 通過shell命令生成一個令牌, 然后配置到j(luò)enkins上, gitlab訪問jenkins時需要攜帶這個令牌

1.2.3 配置jenkins項目觸發(fā)器

在需要自動觸發(fā)的項目里, 配置令牌

圖片.png

修改遠(yuǎn)程觸發(fā)jenkins構(gòu)建的URL

JENKINS_URL/job/projectA-web1/build?token=TOKEN_NAME
http://10.0.0.249:8080/job/projectA-web1/build?token=b8f29d278dc227ffbce317be

1.2.4 配置gitlab上的系統(tǒng)鉤子, 需要用root賬號登陸

圖片.png

圖片.png
  • 測試
圖片.png

這時會報錯, 因為新版的jenkins需要一個專門字段做認(rèn)證

圖片.png

1.2.5 解決報錯

方法1: 在Linux服務(wù)器上, 使用curl命令進(jìn)行觸發(fā), 此時是不需要認(rèn)證的. 只需指明在構(gòu)建觸發(fā)器中填寫的token即可

在任意終端執(zhí)行即可

root@git-client:/opt/web-02# curl http://10.0.0.249:8080/job/projectA-web1/build?token=b8f29d278dc227ffbce317be

執(zhí)行命令后, 會觸發(fā)項目構(gòu)建

圖片.png

驗證v10版本部署成功

這里web-02項目仍然部署的是master版本
圖片.png

方法2: 使用Python處理

pip3 install jenkinsapi


from jenkinsapi.jenkins import Jenkins

conn = Jenkins("http://10.0.0.249:8080", username="tom",password="ning0803030221",useCrumb="b8f29d278dc227ffbce317be")

conn.build_job("projectA-web1")

運行腳本后, 會立即觸發(fā)項目的構(gòu)建, userCrumb字段就是在構(gòu)建觸發(fā)器里填寫的Token

總結(jié): 對于Jenkins構(gòu)建觸發(fā)器, 如果是老版本Jenkins, 可以按照上述方法, 完成gitlab自動觸發(fā)jenkins構(gòu)建. 新版本可以在代碼上傳到開發(fā)分支后, 手動使用curl命令或者Python腳本實現(xiàn)構(gòu)建觸發(fā). 無論是自動觸發(fā)還是通過curl和Python, 都只適用于開發(fā)測試分支, 對于master分支的部署, 需要經(jīng)過測試后, 由運維人員到Jenkins手動構(gòu)建

2 構(gòu)建后項目關(guān)聯(lián)

用于多個 job 相互關(guān)聯(lián)憎乙,串行執(zhí)行多個 job 的場景票罐,可以通過安裝插件 Parameterized Trigger 觸發(fā)執(zhí)行其他 project. 也就是當(dāng)一個項目完成構(gòu)建后, 自動觸發(fā)另一個項目的構(gòu)建

使用場景就是把一個job分成多個, 可以實現(xiàn)多個job的復(fù)用, 比如, 把關(guān)閉tomcat定義為一個job, 那么這個job就可以在任意job結(jié)束后進(jìn)行調(diào)用. 不過一般用的不多, 實際都是把所有的工作在一個job內(nèi)完成

案例: 當(dāng)projectB-web1執(zhí)行完, 自動觸發(fā)projectB-web2的構(gòu)建, 讓web1執(zhí)行停止tomcat服務(wù)操作, web2執(zhí)行啟動tomcat服務(wù)操作

圖片.png
  • 修改projectB-web1的構(gòu)建
圖片.png
  • 修改projectB-web2的構(gòu)建
圖片.png
  • 測試構(gòu)建
圖片.png
圖片.png

3 視圖

視圖可用于將 job 進(jìn)行分組顯示,比如將同一個業(yè)務(wù)的job放在一個視圖顯示泞边,安裝build pipeline 插件之后將會有一個+號用于創(chuàng)建視圖.

Jenkins共有三個視圖類別, 我的視圖, 列表視圖和pipeline視圖

3.1 使用pipeline視圖

  • 安裝build pipeline插件
圖片.png
  • 重啟jenkins
root@jenkins:~# systemctl restart jenkins
  • 創(chuàng)建pipeline視圖
圖片.png
圖片.png
圖片.png
圖片.png
圖片.png
  • 點擊構(gòu)建, 刷新頁面后會顯示新的job正在執(zhí)行
圖片.png
  • 可以查看控制臺輸出
圖片.png
圖片.png
  • 視圖創(chuàng)建后, 會顯示在jenkins首頁
圖片.png

3.2 使用我的視圖

我的視圖就是用來用戶登陸后, 用來顯示自己權(quán)限所能看到的job, 不過用戶登陸本身也是顯示自己所能看到的job, 所以一般沒什么用

圖片.png

圖片.png

3.3 使用列表視圖

圖片.png
  • 選擇視圖需要顯示的job
圖片.png

這樣該列表視圖就會只顯示定義的job, 因此, 列表視圖就是按照不同的業(yè)務(wù), 不同的項目, 對job進(jìn)行分類

圖片.png

3.4 使用腳本批量觸發(fā)任務(wù)構(gòu)建

  • 利用Python腳本, 可以實現(xiàn)多個任務(wù)的串行構(gòu)建, 效率遠(yuǎn)高于在頁面用鼠標(biāo)點擊
from jenkinsapi.jenkins import Jenkins

conn = Jenkins("http://10.0.0.249:8080", username="tom",password="ning0803030221",useCrumb="b8f29d278dc227ffbce317be")
# 需要構(gòu)建哪個job, 只需要添加即可
conn.build_job("projectA-web1")
conn.build_job("projectA-web2")
conn.build_job("projectB-web1")
conn.build_job("projectB-web2")
  • 只要把需要構(gòu)建的項目的job, 編寫到腳本里, 即可一次運行, 觸發(fā)所有的構(gòu)建任務(wù). 工作中, 可以和開發(fā)協(xié)商需要構(gòu)建哪些業(yè)務(wù)的哪些項目, 提前把構(gòu)建任務(wù)配置好, 需要部署時, 直接運行Python腳本, 即可完成批量的構(gòu)建觸發(fā)
圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末该押,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子阵谚,更是在濱河造成了極大的恐慌蚕礼,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梢什,死亡現(xiàn)場離奇詭異奠蹬,居然都是意外死亡,警方通過查閱死者的電腦和手機嗡午,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門囤躁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荔睹,你說我怎么就攤上這事狸演。” “怎么了僻他?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵宵距,是天一觀的道長。 經(jīng)常有香客問我吨拗,道長满哪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任劝篷,我火速辦了婚禮哨鸭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘携龟。我一直安慰自己兔跌,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布峡蟋。 她就那樣靜靜地躺著坟桅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蕊蝗。 梳的紋絲不亂的頭發(fā)上仅乓,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音蓬戚,去河邊找鬼夸楣。 笑死,一個胖子當(dāng)著我的面吹牛子漩,可吹牛的內(nèi)容都是我干的豫喧。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼幢泼,長吁一口氣:“原來是場噩夢啊……” “哼紧显!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缕棵,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤孵班,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后招驴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篙程,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年别厘,在試婚紗的時候發(fā)現(xiàn)自己被綠了虱饿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡触趴,死狀恐怖氮发,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雕蔽,我是刑警寧澤折柠,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站批狐,受9級特大地震影響扇售,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嚣艇,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一承冰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧食零,春花似錦困乒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迁霎。三九已至,卻和暖如春百宇,著一層夾襖步出監(jiān)牢的瞬間考廉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工携御, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留昌粤,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓啄刹,卻偏偏與公主長得像涮坐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子誓军,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容