Jenkins Pipeline包含內(nèi)置文檔和 Snippet Generator,它們是開發(fā)Pipeline時(shí)的關(guān)鍵資源。它們提供了針對(duì)當(dāng)前安裝的Jenkins版本和相關(guān)插件定制的詳細(xì)幫助和信息。在本節(jié)中,我們將討論可能有助于開發(fā)Jenkins Pipeline的其他工具和資源。
在 Blue Ocean Pipeline編輯器提供了一個(gè)WYSIWYG的方式來創(chuàng)建聲明Pipeline。編輯器提供了Pipeline中所有階段,平行分支和步驟的結(jié)構(gòu)視圖。編輯器會(huì)根據(jù)Pipeline更改進(jìn)行驗(yàn)證,消除許多錯(cuò)誤,甚至被提交。在幕后,它仍然生成聲明性的Pipeline代碼。
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 }
^
在第二個(gè)例子中,Jenkinsfile
已經(jīng)被更新為包含缺少any
的agent
。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.
通常,Pipeline將在經(jīng)典的Jenkins Web UI中定義,或者通過提交到Jenkinsfile源代碼控件來定義。不幸的是,這兩種方法都不適用于Pipeline的快速迭代或原型設(shè)計(jì)?!爸夭ァ惫δ芸梢钥焖傩薷暮蛨?zhí)行現(xiàn)有流水線,而無需更改Pipeline配置或創(chuàng)建新的提交。
要使用“重播”功能:
1、在構(gòu)建歷史記錄中選擇先前完成的運(yùn)行。
2、點(diǎn)擊左側(cè)菜單中的“重播”
3、進(jìn)行修改并單擊“運(yùn)行”。在這個(gè)例子中,我們將“ruby-2.3”更改為“ruby-2.4”。
4、檢查更改的結(jié)果
一旦您對(duì)更改感到滿意,您可以使用Replay再次查看它們,將其復(fù)制回Pipeline作業(yè)Jenkinsfile
,然后使用您通常的工程流程提交。
Pipeline單元測(cè)試框架是Jenkins項(xiàng)目不支持的第三方工具。
該P(yáng)ipeline單元測(cè)試框架 可以讓你的單元測(cè)試Pipeline和共享庫完全運(yùn)行之前。它提供了一個(gè)模擬的執(zhí)行環(huán)境,真正的Pipeline的步驟是模仿對(duì)象,模仿對(duì)象
是可以使用檢查期望的方式取代的。雖然新的和粗糙的邊緣,但有希望。該項(xiàng)目的README包含示例和使用說明。
更多建議: