一文帶你解讀-騷氣的jenkins pipeline玩法


最近看到別人的 jenkins,有我沒見過、看不懂但是又好酷好靚的樣紙。

 

 

 

還有長以下這樣的:

 

 

 

 

經過一頓搜索 ,原來它就是 我不認識它,它也不認識我的 jenkins pipeline。

本着好奇心和對知識的求知欲,在網上各種資料一頓亂啃,大概明白了是咋么一回事。

 

 

 

 

接下來,就從小白開始,一步步完成它。

主要分為以下幾步:

  1. 在 jenkins 上安裝 pipeline 插件
  2. 創建一個 pipeline 類型的任務
  3. 配置 pipeline 腳本。



第一步:pipeline 插件安裝

  1. 在 magage jenkins -> 插件管理 -> avaliable 中,搜索 pipeline,選擇並安裝。

  2. 在 magage jenkins -> 插件管理 -> avaliable 中,pipeline stage view,選擇並安裝。

             

 

 

 

  1. 安裝完成,可以在 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 命令。

 

好像大致明白聲明式語法的小結構了。

 

但是仔細思考一下,比如要做自動化測試,好像還有幾個小問題?

  1. 自動化的代碼從哪里來呢?
  2. 步驟內容:sh 'python3 main.py' 為啥是這么寫的呢?我要用 windows 的命令行執行它要怎么寫呢?

一個一個來解決。



1、自動化的代碼從哪里來呢?

在這里,我們需要配置源代碼。

可以在 item 的 pipeline 配置里,從 pipeline script 切換成 pipeline script from SCM

 

 

 

 

 

為啥要這么干呢?

  1. 不這么干,你就需要在腳本里加上從 GitHub 獲取代碼的步驟啦。省事,選這個。

  2. 官網建議將 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 界面上看到如下圖了:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM