新手真的別再用過時的jenkins freestyle了,10分鐘教你搞定快速編寫jenksinfile,快速離線調試

Pipeline是一套運行於jenkins上的工作流框架,將原本獨立運行於單個或者多個節點的任務連接起來,實現單個任務難以完成的複雜流程編排與可視化。它通過Domain Specific Language(DSL)syntax定義Pipeline As Code並且實現持續交付的目的。

Pipeline是Jenkins2.X的最核心的特性,幫助Jenkins實現從CI到CD與DevOps的轉變、

注:Jenkins 1.0 只能通過UI界面手動操作來“描述”流水線; Jenkins 2.0 開始支持pipeline as code.

爲什麼要使用pipeline

1.代碼: pipeline 以代碼的形式實現,通過被撿入源代碼控制,使團隊能夠編譯,審查和迭代其CD流程

2.可連續性: jenkins 重啓或者中斷後都不會影響pipeline job

3.停頓: pipeline 可以選擇停止並等待人工輸入或者批准,然後在繼續pipeline運行

4.多功能:  pipeline 支持現實世界的複雜CD要求, 包括fork、join子進程,循環和並行執行工作的能力

5.可擴展: pipeline 插件支持其DSL的自動擴展以及其插件集成的多個選項。

Pipeline結構快速解析

Jenlins Pipeline的腳本語法是由Groovy語言實現,學習成本較低,簡單易學。 目前Jenlins Pipeline支持兩種語法:

  • Declarative 聲明式(在Pipeline plugin 2.5中引入)

  • Scripted Pipeline 腳本式

圖片

image.png

聲明式pipeline 基本語法和表達式遵循 groovy語法,但是有以下例外:

  • 聲明式pipeline 必須包含在固定格式的pipeline{} 塊內

  • 每個聲明語句必須獨立一行, 行尾無需使用分號

  • 塊(Blocks{}) 只能包含章節(Sections),指令(Directives),步驟(Steps),或者賦值語句

  • 屬性引用語句被視爲無參數方法調用。 如input()

  • 塊(Blocks{})

由大括號括起來的語句: 如 Pipeline{}, Sections{}, parameters{}, script{}

  • 章節(Sections)

通常包括一個或者多個指令或步驟 如 agent,post,stages,steps

  • 指令(Directives)

environment, options, parameters, triggers, stage, tools, when

  • 步驟(steps)

執行腳本式pipeline, 如script{}

Jenkins pipeline包含兩類元素:stages和steps。如下圖:

圖片

image.png

Stage:階段,一個Pipeline可以劃分成若干個Stage,每個Stage代表一組操作,例如:“Build”,“Test”,“Deploy”。 注意,Stage是一個邏輯分組的概念,可以跨多個Node

Step:步驟,Step是最基本的操作單元,小到創建一個目錄,大到構建一個Docker鏡像,由各類Jenklins Plugin提供,例如:sh ‘make’ Node:節點,一個Node就是一個Jenkins節點,或者是Master,或者是Agent,是執行Step的具體運行環境。

pipeline{
    agent any
    stages {
        stage('Build') {
            steps{
                echo 'This is a build step' 
            }
        }
        stage('Test') {
            steps{
                echo 'This is a test step'  
            }
        }
        stage('Deploy') {
            steps{
                echo 'This is a deploy step'    
            }
        }
    }
}

Pipeline編寫的輔助工具

Snipper Generator(代碼片段生成器,語法檢查器)

圖片

image.png

Replay Pipeline

重放pipeline,可以修改script,修改後的不存入config.xml圖片

DSL Reference 語法參考手冊

  • 全局變量引用

圖片

image.png

Jenkinsfile本地校驗

Jenkins Pipeline Linter Connector  (vscode 插件)

圖片

image.png

如下圖所示,插件按照後需要配置如下參數:

  • jenkins.pipeline.linter.connector.url 是 Jenkins 期望的 POST 請求地址,包含你要校驗的 Jenkinsfile 文件。通常爲 http://<your_jenkins_server:port>/pipeline-model-converter/validate。

  • jenkins.pipeline.linter.connector.user 允許指定你的 Jenkins 用戶名。

  • jenkins.pipeline.linter.connector.pass 允許指定你的 Jenkins 密碼。

  • jenkins.pipeline.linter.connector.crumbUrl 當你的 Jenkins 啓用了 CRSF 時必須指定。通常爲 http://<your_jenkins_server:port>/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)。

圖片Ctrl+Shift+P執行如下命令,對編寫的Jenkinsfile進行校驗圖片圖片

Jenkins Declarative Parser

❯ jdp check data/valid/complex-deployment/Jenkinsfile
Checking: data/valid/complex-deployment/Jenkinsfile
Looks valid! Great work!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章