「Jenkins Pipeline」- 執行 Shell 命令 @20210127


問題描述

Jenkins Pipeline,更像“膠水”,將很多腳本與工具粘合在一起,實現自動化任務,而它本身並沒有提供特定功能。

執行 Shell 命令或者腳本是個非常常見的任務。該筆記將記錄在 Jenkins Pipeline 中執行 Shell 的方法。

注意,除了 Shell 腳本,Jenkins 還能執行 bat、ps 等等,我們這里以 Shell 為例,更多內容建議參考官方文檔。

解決方法

Pipeline: Nodes and Processes

安裝 Pipeline: Nodes and Processes 插件

插件地址:https://plugins.jenkins.io/workflow-durable-task-step/
使用手冊:Pipeline Steps Reference/Pipeline: Nodes and Processes
倉庫地址:jenkinsci/workflow-durable-task-step-plugin

在我們的印象中,該插件無需單獨安裝。在安裝 Pipeline 之后會自動安裝該插件(依賴?必備組件?)

Labelled Pipeline Steps

還可以安裝 Labelled Pipeline Steps 插件,這是對 sh 與 bat 的替代,以支持在 BlueOcean 中顯示標簽。

插件地址:https://plugins.jenkins.io/labelled-steps/
使用手冊:Pipeline Steps Reference/Labelled Pipeline Steps Plugin
倉庫地址:https://github.com/jenkinsci/labelled-steps-plugin

簡單示例

執行命令:

sh 'ls -l'

返回命令狀態碼:

def statusCode = sh returnStatus: true, script: 'command-not-found'

返回命令輸出:

def statusCode = sh returnStdout: true, script: 'ls'

在控制台中,隱藏正在執行的命令

問題描述

在控制台中,當使用 sh 步驟時會打印正在執行的 Shell 命令,如下所示:

...
[Pipeline] script
[Pipeline] {
[Pipeline] sh
+ ls -l -h
total 16K
drwxr-xr-x   2 jenkins jenkins   25 Mar 21 21:00 deploy
drwxr-xr-x   4 jenkins jenkins  192 Mar 21 21:00 docs
drwxr-xr-x 139 jenkins jenkins 8.0K Mar 21 21:00 notebook
-rw-r--r--   1 jenkins jenkins   47 Mar 21 21:00 README.md
drwxr-xr-x   7 jenkins jenkins  211 Mar 21 21:00 scripts
drwxr-xr-x   2 jenkins jenkins   23 Mar 21 21:00 template
[Pipeline] }
[Pipeline] // script}

我們希望能夠隱藏命令輸出,即隱藏 + ls -l -h 輸出行。

問題原因

在 Jenkins 執行 Shell 命令時,默認啟用 -x-e 選項,而 -x 選項導致命令打印。

解決辦法

關閉 -x 選項,即僅使用 -e 選項(以下兩種寫法皆可):

sh """#!/bin/sh -e
// do some stuff
"""

sh """\
#!/bin/sh -e
// do some stuff
"""

還可以使用 set +x 也可以,但是會輸出 set +x 命令自身,不夠“干凈”:

sh """
set +x
// do some stuff
"""

參考文獻

WikiNotes/執行 Shell 命令
Pipeline: Nodes and Processes/sh
How to disable command output in jenkins pipeline build logs
Using a Jenkinsfile



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM