「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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架