「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


posted @ 2021-01-27 17:34  研究林纳斯写的  阅读(4318)  评论(0编辑  收藏  举报