Jenkins教程(二)聲明式流水線HelloWorld
- 2019 年 10 月 3 日
- 筆記
前言
本文通過一個聲明式流水線的HelloWorld程式做一下流水線基礎入門,對常用的流水線參數進行簡要說明
什麼是流水線
現實中的流水線
流水線比較好理解,類比於現實生活中的生產流水線,每個流程只做一件事,通過傳送帶把這些流程連接在一起,一個流程完成後的結果交由後續流程繼續操作。
Jenkins的流水線簡單認知
Jenkins的流水線也是這樣工作的,最簡單的認知是它可以把若干可通用的Shell腳本像膠水一樣連接起來,雖然這個比喻比較形象,但這只是流水線的冰山一角。
Jenkins流水線的兩種形式
在Jenkins升級2.x版本之前,流水線只有一種腳本式流水線(Script Pipeline),當升級2.x版本後,新增了聲明式流水線(Declarative Pipeline)
什麼是Jenkinsfile
無論是哪種流水線,都需要為流水線定義流水線腳本,稱之為Jenkinsfile ,使用Groovy語法寫成
腳本式流水線
在說明聲明式流水線前,有必要了解一下腳本式流水線的基本概念,這樣有利於我們知道聲明式流水線的好處與腳本式流水線的限制
特徵
在腳本化流水線語法中, 一個或多個 node 塊在整個流水線中執行核心工作。
限制
雖然這不是腳本化流水線語法的強制性要求, 但它限制了你的流水線的在node塊內的只能做兩件事:
- 需要通過在Jenkins隊列中添加一個項來調度塊中包含的步驟。 節點上的執行器一空閑, 該步驟就會運行。
- 創建一個工作區(特定為特定流水間建立的目錄),其中工作可以在從源程式碼控制檢出的文件上完成。
基本語法
Jenkinsfile (Scripted Pipeline)
node { //需要有一個或多個node節點表示一系列操作 stage('Build') { //每個stage表示一個步驟 // Build步驟內容 } stage('Test') { // Test步驟內容 } stage('Deploy') { // Deploy步驟內容 } } 聲明式流水線的基本語法類似於腳本式流水線,但是其功能更加強大
聲明式流水線基礎
特徵
聲明式流水線最外層Jenkinsfile腳本節點是pipeline
與腳本式流水線不同點
聲明式和腳本化的流水線從根本上是不同的。 聲明式流水線的是 Jenkins 流水線更近的特性:
- 相比腳本化的流水線語法,它提供更豐富的語法特性,
- 是為了使編寫和讀取流水線程式碼更容易而設計的。
基礎語法
Jenkinsfile (Declarative Pipeline)
pipeline { // pipeline是聲明式流水線的一種特定語法,在塊內定義了整個流水線的所有內容 agent any // agent是聲明式流水線的一種特定語法,它指示 Jenkins 為整個流水線分配一個執行器 (在節點上)和工作區,等效於腳本式流水線node塊 stages { // 所有流程(狀態)的外層塊,僅有一個 stage('Build') { //每個stage為一流程,與腳本式基本一致,每個stage可以定義名稱 steps { //步驟塊,內部包含具體操作 sh 'make' // sh操作,其引號間的文字會當成shell直接執行 } } stage('Test'){ steps { sh 'make check' junit 'reports/**/*.xml' //junit使用匹配的定義測試xml進行單元測試 } } stage('Deploy') { steps { sh 'make publish' } } } } 聲明式流水線HelloWorld
有了上邊的基礎,我們來寫一個最簡單的HelloWorld聲明式流水線吧!
創建項目
點擊左上角的新建項目(new item)

我們這裡選擇流水線,輸入工程名稱Hello Pipeline , 確定

這裡的流水線與多分支流水線的區別我認為有兩個:
- 一個是流水線只能指定一個分支的Jenkinsfile,還可以把腳本直接寫到工程中,而多分支流水線可以指定多個分支的Jenkinsfile,但是不能把腳本寫在工程中;
- SCM插件也支援多分支流水線,而單分支流水線沒有
填寫描述,勾選This project is parameterized

添加參數,選擇String parameter

這裡我們加一個參數,一個字元串參數,這樣我們在Jenkinsfile中就可以取到這個值了

添加這個參數是為了讓大家先有個參數化構建的準備
往下滑動,找到流水線,定義處可選直接寫腳本還是走版本控制,這裡直接使用腳本

在腳本處輸入如下內容
pipeline { agent any; environment { //環境變數 GREETING="Hello"; } stages{ stage('打招呼') { steps{ sh 'echo "$GREETING $TITLE"' } } } post { //構建完成後置操作 aborted { //如果構建中斷,則執行 echo '構建被中止!' } success { //構建成功執行 echo '構建成功!' } failure { //構建失敗執行 echo '構建失敗!' } } } 語法不會寫怎麼辦?上邊的圖中有
流水線語法(Pipeline-Syntax),通過這個語法功能就可以生成部分腳本
點保存,我們去準備構建這個工程
點擊Build with Parameters

這裡我們看到剛才定義的參數值是可以修改的,有興趣可以改下試試,然後開始構建

輸出如下

把滑鼠放在打招呼下邊的綠色框上,點出現的logs

我們可以看到輸出了預期的值
查看下Post Actions的日誌

我們可以通過左下角的構建版本號,如當前是#1,點進去,選擇Console Output查看詳細的執行日誌

細心會發現構建的工作空間在我們指定的
Jenkins家目錄/workspace/當前工程名內
聲明式流水線HelloWorld工程就先寫這些
後記
在家裡的筆記型電腦裝的Debian用了一年了快,這次寫文章截圖用的Gimp?感覺好奇怪,有沒有什麼好用的Linux平台的截圖工具推薦下啊,能直接選區截圖再編輯的?
不寫不知道,原來流水線里的知識點這麼多,下篇打算寫下基本環境的配置與拉取Git程式碼
引文
本文系Hellxz學習與實踐文章,禁止布布扣、碼迷、愛碼網等第三方爬蟲網站爬取,轉載請在醒目位置註明出處:https://www.cnblogs.com/hellxz/p/jenkins_pipeline_helloworld.html