最近看到別人的 jenkins,有我沒見過、看不懂但是又好酷好靚的樣紙。
還有長以下這樣的:
經過一頓搜索 ,原來它就是 我不認識它,它也不認識我的 jenkins pipeline。
本着好奇心和對知識的求知欲,在網上各種資料一頓亂啃,大概明白了是咋么一回事。
接下來,就從小白開始,一步步完成它。
主要分為以下幾步:
- 在 jenkins 上安裝 pipeline 插件
- 創建一個 pipeline 類型的任務
- 配置 pipeline 腳本。
第一步:pipeline 插件安裝
-
在 magage jenkins -> 插件管理 -> avaliable 中,搜索 pipeline,選擇並安裝。
-
在 magage jenkins -> 插件管理 -> avaliable 中,pipeline stage view,選擇並安裝。
- 安裝完成,可以在 New Item 里,看到 pipeline 選項。
第二步:創建 pipeline
環境准備就緒 ,嘿哈,可以開始創建流水線了
在 jenkins 界面,點擊 New Item 新建一個任務,選擇流水線,就進入下面這個圖了。
然后就懵逼了。。
pipeline 要寫腳本 ?
原來,pipeline 是基本 groovy 腳本的。
那,完蛋了
我只會 python,不會 groovy。難不成我要先學一學 groovy,才能寫的出來?
翻了翻 groovy,這玩意跟 Java 有關。
我太難了,pipeline 太難了!
幸好,在官網當中,提供了其它的方式。
pipeline 分為 2 種:
第一種:腳本式 pipeline,那就真的是要寫 groovy 腳本的。
第二種,聲明式 pipeline,嘿嘿,固定結構化的,不用學 groovy 也是能用滴。
聲明式 pipeline 語法
雖然不用學 groovy,但是聲明式 pipeline 大體的結構還是要學一學的。
它大概長下面這個樣子(超級簡單版):
嗯,雖然簡單,但是仍然看不太懂。。
首先,有幾大關鍵字:
pipeline、agent、stage、step
什么意思呢?
先舉個生活中的例子:
以人從出生到最后消亡的這個大事件為例 ,
無論在哪個國家的人(agent),人生都會經歷幾個階段(stage),在每個階段(stage),都會有相應的事情(step)要做。
那么,
在 jenkins 當中,比如,要實現持續交付這個大事件,就需要經歷:
在哪些代理(agent)上經歷編譯(stage)、測試(stage)、部署(stage)這 3 大階段,每一個階段要做的事情(step)在內容上數量上都是不一樣的。
再比如,要實現 python 自動化測試這個大事件,就需要經歷:
在哪些(agent)代理上,經歷測試(stage)、通知(stage)這 2 個階段,測試和通知每一個階段要做的事情(step)也是不一樣的。
所以,
這幾個關鍵字是主要的語法結構。
總結一下來講,主要是:
1、誰來做這個任務? agent
2、任務切割成幾階段? stage
3、每個階段要做啥?steps
我們再來看看上面那張圖:
pipeline:起始
agent any:指示 Jenkins 為整個流水線分配一個執行器(在 Jenkins 環境中的任何可用代理/節點上)和工作區
stages:多個 stage 都放在 stages 下面
stage("autotest"):名為 autotest 的階段。
steps:為 autotest 階段里的一個步驟。
sh 'python3 main.py':表示步驟內容:執行 shell 命令,命令內容為:python3 main.py
一句話總結一下:由任意可用執行器來執行任務,任務有 1 個階段,此階段的步驟是執行 python 命令。
好像大致明白聲明式語法的小結構了。
但是仔細思考一下,比如要做自動化測試,好像還有幾個小問題?
- 自動化的代碼從哪里來呢?
- 步驟內容:sh 'python3 main.py' 為啥是這么寫的呢?我要用 windows 的命令行執行它要怎么寫呢?
一個一個來解決。
1、自動化的代碼從哪里來呢?
在這里,我們需要配置源代碼。
可以在 item 的 pipeline 配置里,從 pipeline script 切換成 pipeline script from SCM
為啥要這么干呢?
-
不這么干,你就需要在腳本里加上從 GitHub 獲取代碼的步驟啦。省事,選這個。
-
官網建議將 pipeline 的腳本保存在 jenkinsfile 當中,並且與你的項目放在一起是最好的。
pipeline script from SCM 就是指從 SCM 的項目當中,直接讀取它的 jenkinsfile 文件中 pipeline 腳本來執行。
這樣,不管你的項目在哪個 jenkins 上去用都沒有問題。同時,你也可以隨着項目變化去修改它的 jenkinsfile 文件。
切換后的樣子:
SCM 選擇 Git 之后:
要注意,在 GitHub 上的項目當中,必須要有 Jenkinsfile 文件(注意:J是大寫的哦):
2、步驟內容:sh 'python3 main.py' 為啥是這么寫的呢?
這是 jenkins pipeline 的語法。
在不用 pipeline 的時候,我們構建時的每一個步驟都是選擇的插件,然后配置信息即可
換到 pipeline 里,就沒有這個界面操作了。。。
於是就換成了上面的語法:sh 'python3 main.py'
與上面的截圖,同等效果。
那么,問題來了。。
jenkins 的構建步驟,有那么多的插件,每一個插件的語法也不一樣,我該如何知道呢。。。
果然,jenkins 為我們准備好了后路
jenkins 提供了一個步驟生成器,只需要配置步驟,然后可以直接生成步驟的表達式。 將生成的表達式 copy 到 step 中就可以了。。
它在 jenkins 的 job 面板當中,請看下圖:
是不是很棒棒!
不用學習每個插件,用 pipeline 語法如何表達!
jenkinsfile 編寫完之后,直接運行那么就可以在 Jenkins 的 Job 界面上看到如下圖了: