使用 Jenkins 2 Pipeline 插件,有一个有用的功能允许快速概览管道阶段和步骤状态,包括日志输出。
但是,如果您使用“Shell 脚本”(sh) 步骤,似乎没有办法用有用的名称标记该脚本,因此显示屏仅显示一长串“Shell 脚本”(显示在下图)。
如何分配有用的名称,或者如何使用其他步骤来实现相同的效果?
使用 Jenkins 2 Pipeline 插件,有一个有用的功能允许快速概览管道阶段和步骤状态,包括日志输出。
但是,如果您使用“Shell 脚本”(sh) 步骤,似乎没有办法用有用的名称标记该脚本,因此显示屏仅显示一长串“Shell 脚本”(显示在下图)。
如何分配有用的名称,或者如何使用其他步骤来实现相同的效果?
2019 年 2 月更新:
根据下面 gertvdijk 的回答,现在可以为sh step 分配一个可选标签,从 v2.28 开始,对于那些还不能升级的人,还有一个解决方法。请查看他的答案以获取详细信息和评论!
以前的版本(悬停查看):
据我所知,目前这是不可能的。在 Jenkins 跟踪器中,存在与您的情况类似 的名称或别名 Shell 脚本步骤 (sh)问题:
该但是,它作为旧的 Allow 阶段的副本被关闭,以作为最近修复的标记块运行,并且似乎包含在pipeline-stage-step-plugin 的 v2.2 中(请参阅更改日志)。sh
步骤在管道中添加了一个“Shell 脚本”步骤。但是,可能有多个这样的步骤,包括来自各种插件(例如,Docker)的步骤,这使得很难区分这些步骤。我们或许应该在 sh 中添加一个可选参数,以指定随后将出现在管道步骤中的名称或别名。例如,以下可以是 npm 的步骤,在管道视图中将显示为“Shell script: npm”。
sh cmd:"npm install", name: "npm"
似乎现在可以嵌套阶段并且它们将出现在视图表中,但我认为这不是您要寻找的。
“管道节点和流程插件”的 2.28+版本现在使用JENKINS-55410获得了该步骤label
的选项:sh
标签(可选)
要在管道步骤视图中显示的标签和步骤的蓝海详细信息,而不是步骤类型。因此,该视图更有意义且特定于领域,而不是技术性的。
- 类型:字符串
例如:
sh script: "echo foo", label: "my step"
如果您还不能升级,另一种选择是使用Labeled Pipeline Steps 插件。
sh "echo foo", label: "my step"
对我不起作用,
它必须是:
sh script: "echo foo", label: "my step"
好吧,绝望的时代需要绝望的措施。如果可以使用 Blue Ocean,则可以使用单执行线的并行步骤。
parallel(
"This is my step name" : {
sh 'env'
}
)
试试这个,很好的解决方法
import org.jenkinsci.plugins.workflow.cps.CpsThread
import org.jenkinsci.plugins.workflow.actions.LabelAction
def test() {
def xyz = "Prints PWD"
try {
sh script: 'pwd'
}
finally {
CpsThread.current().head.get().addAction(new LabelAction("Shell script ${xyz} "))
}
}
我也在尝试同样的事情,但在不同的上下文中,我的团队不希望日志 UI 上有多个 sh 日志窗口,所以我确实尝试在一行中使用多个 UNIX 命令,例如
jenkinsPipeline.sh "echo \"PATH: $PATH\";java -version;echo PROJ DIR = $projectDirectory;env > env.txt;cat env.txt;ls && cd $projectDirectory && gradle --refresh-dependencies clean assemble"
它适用于 Jenkins 工作中的 Jenkins 管道脚本. 但是如果我使用共享库来扩展管道和相同的策略,那么它就无法正常工作,或者像往常一样为 sh 登录 UI 创建多个窗口。
在桑迪出色的回答之后,我创建了一个小脚本包装器,将 sh 步骤封装在 try/finally 块中。
基本用法:
wrapper.script script: 'echo the invisible script', returnStdout: true, stepName: "description #1"
将显示“description #1”而不是通用文本。
完整的源代码和安装说明在这里 https://github.com/ael-computas/jenkins-script-wrapper
可以轻松地作为库安装在您的 jenkins 服务器上。
它并不完美,但我通常发现添加一个 echo 步骤来描述以下 bat 或 sh 步骤试图完成的内容就足够了。以前从未见过它的人应该能够很快弄清楚。
echo "Testing with Ping"
bat "ping www.stackoverflow.com"
echo "Getting IPs"
bat "nslookup www.stackoverflow.com"