Jenkins教程(二)聲明式流水線HelloWorld

  • 2019 年 10 月 3 日
  • 筆記

前言

本文通過一個聲明式流水線的HelloWorld程式做一下流水線基礎入門,對常用的流水線參數進行簡要說明

什麼是流水線

現實中的流水線

流水線比較好理解,類比於現實生活中的生產流水線,每個流程只做一件事,通過傳送帶把這些流程連接在一起,一個流程完成後的結果交由後續流程繼續操作。

Jenkins的流水線簡單認知

Jenkins的流水線也是這樣工作的,最簡單的認知是它可以把若干可通用的Shell腳本像膠水一樣連接起來,雖然這個比喻比較形象,但這只是流水線的冰山一角。

Jenkins流水線的兩種形式

在Jenkins升級2.x版本之前,流水線只有一種腳本式流水線(Script Pipeline),當升級2.x版本後,新增了聲明式流水線(Declarative Pipeline)

什麼是Jenkinsfile

無論是哪種流水線,都需要為流水線定義流水線腳本,稱之為Jenkinsfile ,使用Groovy語法寫成

腳本式流水線

在說明聲明式流水線前,有必要了解一下腳本式流水線的基本概念,這樣有利於我們知道聲明式流水線的好處與腳本式流水線的限制

特徵

在腳本化流水線語法中, 一個或多個 node 塊在整個流水線中執行核心工作。

限制

雖然這不是腳本化流水線語法的強制性要求, 但它限制了你的流水線的在node塊內的只能做兩件事:

  1. 需要通過在Jenkins隊列中添加一個項來調度塊中包含的步驟。 節點上的執行器一空閑, 該步驟就會運行。
  2. 創建一個工作區(特定為特定流水間建立的目錄),其中工作可以在從源程式碼控制檢出的文件上完成。

基本語法

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程式碼

引文

Jenkins官方文檔創建您的第一個Pipeline

本文系Hellxz學習與實踐文章,禁止布布扣、碼迷、愛碼網等第三方爬蟲網站爬取,轉載請在醒目位置註明出處:https://www.cnblogs.com/hellxz/p/jenkins_pipeline_helloworld.html

Tags: