Pipeline 開發(fā)工具

2018-08-26 10:51 更新

Jenkins Pipeline包含內(nèi)置文檔和 Snippet Generator,它們是開發(fā)Pipeline時(shí)的關(guān)鍵資源。它們提供了針對(duì)當(dāng)前安裝的Jenkins版本和相關(guān)插件定制的詳細(xì)幫助和信息。在本節(jié)中,我們將討論可能有助于開發(fā)Jenkins Pipeline的其他工具和資源。

Blue Ocean編輯器

在 Blue Ocean Pipeline編輯器提供了一個(gè)WYSIWYG的方式來創(chuàng)建聲明Pipeline。編輯器提供了Pipeline中所有階段,平行分支和步驟的結(jié)構(gòu)視圖。編輯器會(huì)根據(jù)Pipeline更改進(jìn)行驗(yàn)證,消除許多錯(cuò)誤,甚至被提交。在幕后,它仍然生成聲明性的Pipeline代碼。

命令行Pipeline Linter

Jenkins可以在實(shí)際運(yùn)行之前從命令行驗(yàn)證或“ lint ”聲明式Pipeline。這可以使用Jenkins CLI命令或使用適當(dāng)?shù)膮?shù)進(jìn)行HTTP POST請(qǐng)求來完成。我們建議使用 SSH接口 運(yùn)行l(wèi)inter。有關(guān)如何正確配置Jenkins以進(jìn)行安全命令行訪問的詳細(xì)信息,請(qǐng)參閱Jenkins CLI文檔。

通過CLI通過SSH進(jìn)行Linting
# ssh (Jenkins CLI)
# JENKINS_SSHD_PORT=[sshd port on master]
# JENKINS_HOSTNAME=[Jenkins master hostname]
ssh -p $JENKINS_SSHD_PORT $JENKINS_HOSTNAME declarative-linter < Jenkinsfile
通過HTTP POST使用 curl
# curl (REST API)
# Assuming "anonymous read access" has been enabled on your Jenkins instance.
# JENKINS_URL=[root URL of Jenkins master]
# JENKINS_CRUMB is needed if your Jenkins master has CRSF protection enabled as it should
JENKINS_CRUMB=`curl "$JENKINS_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\":\",//crumb)"`
curl -X POST -H $JENKINS_CRUMB -F "jenkinsfile=<Jenkinsfile" $JENKINS_URL/pipeline-model-converter/validate

例子

以下是Pipeline Linter的兩個(gè)實(shí)例。第一個(gè)例子顯示了linter在通過無效的輸出時(shí)Jenkinsfile,缺少agent聲明的一部分。

Jenkinsfile
pipeline {
  agent
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}
Linter輸出無效的Jenkins文件
# pass a Jenkinsfile that does not contain an "agent" section
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Errors encountered validating Jenkinsfile:
WorkflowScript: 2: Not a valid section definition: "agent". Some extra configuration is required. @ line 2, column 3.
     agent
     ^

WorkflowScript: 1: Missing required section "agent" @ line 1, column 1.
   pipeline &#125;
   ^

在第二個(gè)例子中,Jenkinsfile已經(jīng)被更新為包含缺少anyagent。linter現(xiàn)在報(bào)告Pipeline是有效的。

Jenkinsfile
pipeline {
  agent any
  stages {
    stage ('Initialize') {
      steps {
        echo 'Placeholder.'
      }
    }
  }
}
Linter輸出有效的Jenkins文件
ssh -p 8675 localhost declarative-linter < ./Jenkinsfile
Jenkinsfile successfully validated.

“Replay”Pipeline運(yùn)行與修改

通常,Pipeline將在經(jīng)典的Jenkins Web UI中定義,或者通過提交到Jenkinsfile源代碼控件來定義。不幸的是,這兩種方法都不適用于Pipeline的快速迭代或原型設(shè)計(jì)?!爸夭ァ惫δ芸梢钥焖傩薷暮蛨?zhí)行現(xiàn)有流水線,而無需更改Pipeline配置或創(chuàng)建新的提交。

用法

要使用“重播”功能:

1、在構(gòu)建歷史記錄中選擇先前完成的運(yùn)行。

Pipeline 開發(fā)工具

2、點(diǎn)擊左側(cè)菜單中的“重播”

Pipeline 開發(fā)工具

3、進(jìn)行修改并單擊“運(yùn)行”。在這個(gè)例子中,我們將“ruby-2.3”更改為“ruby-2.4”。

Pipeline 開發(fā)工具

4、檢查更改的結(jié)果

一旦您對(duì)更改感到滿意,您可以使用Replay再次查看它們,將其復(fù)制回Pipeline作業(yè)Jenkinsfile,然后使用您通常的工程流程提交。

特征

  • 可以在同一運(yùn)行中多次調(diào)用 - 允許輕松并行測(cè)試不同的更改。
  • 也可以在仍在進(jìn)行中的Pipeline運(yùn)行中調(diào)用 - 只要Pipeline包含語法正確的Groovy并且能夠啟動(dòng),它可以被Replayed。
  • 參考的共享庫代碼也可以修改 - 如果Pipeline運(yùn)行引用 共享庫,共享庫中的代碼也將作為Replay頁面的一部分顯示和修改。

限制

  • 無法重播語法錯(cuò)誤的Pipeline運(yùn)行 - 這意味著無法查看代碼,無法檢索其中所做的任何更改。當(dāng)使用Replay進(jìn)行更多重要的修改時(shí),在將其更改保存到Jenkins之外的文件或編輯器之前,請(qǐng)先運(yùn)行它們。
  • 重播的Pipeline行為可能與其他方法開始的運(yùn)行有所不同 - 對(duì)于不屬于多分支流水線的Pipeline,對(duì)于原始運(yùn)行和Replayed運(yùn)行,提交信息可能不同。見JENKINS-36453

Pipeline單元測(cè)試框架

Pipeline單元測(cè)試框架是Jenkins項(xiàng)目不支持的第三方工具。

該P(yáng)ipeline單元測(cè)試框架 可以讓你的單元測(cè)試Pipeline和共享庫完全運(yùn)行之前。它提供了一個(gè)模擬的執(zhí)行環(huán)境,真正的Pipeline的步驟是模仿對(duì)象,模仿對(duì)象

是可以使用檢查期望的方式取代的。雖然新的和粗糙的邊緣,但有希望。該項(xiàng)目的README包含示例和使用說明。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)