71

使用 Jenkins 2 Pipeline 插件,有一个有用的功能允许快速概览管道阶段和步骤状态,包括日志输出。

但是,如果您使用“Shell 脚本”(sh) 步骤,似乎没有办法用有用的名称标记该脚本,因此显示屏仅显示一长串“Shell 脚本”(显示在下图)。

如何分配有用的名称,或者如何使用其他步骤来实现相同的效果?

在此处输入图像描述

4

8 回答 8

40

2019 年 2 月更新

根据下面 gertvdijk 的回答,现在可以为sh step 分配一个可选标签,从 v2.28 开始,对于那些还不能升级的人,还有一个解决方法。请查看他的答案以获取详细信息和评论!


以前的版本(悬停查看):

据我所知,目前这是不可能的。在 Jenkins 跟踪器中,存在与您的情况类似 的名称或别名 Shell 脚本步骤 (sh)问题:

sh步骤在管道中添加了一个“Shell 脚本”步骤。但是,可能有多个这样的步骤,包括来自各种插件(例如,Docker)的步骤,这使得很难区分这些步骤。我们或许应该在 sh 中添加一个可选参数,以指定随后将出现在管道步骤中的名称或别名。例如,以下可以是 npm 的步骤,在管道视图中将显示为“Shell script: npm”。

sh cmd:"npm install", name: "npm"
但是,它作为旧的 Allow 阶段的副本被关闭,以作为最近修复的标记块运行,并且似乎包含在pipeline-stage-step-plugin 的 v2.2 中(请参阅更改日志)

似乎现在可以嵌套阶段并且它们将出现在视图表中,但我认为这不是您要寻找的。

于 2016-09-12T17:37:53.407 回答
27

“管道节点和流程插件”的 2.28+版本现在使用JENKINS-55410获得了该步骤label的选项:sh

标签(可选)

要在管道步骤视图中显示的标签和步骤的蓝海详细信息,而不是步骤类型。因此,该视图更有意义且特定于领域,而不是技术性的。

  • 类型:字符串

例如:

sh script: "echo foo", label: "my step"

如果您还不能升级,另一种选择是使用Labeled Pipeline Steps 插件

于 2019-02-13T17:47:31.873 回答
9
sh "echo foo", label: "my step"

对我不起作用,

它必须是:

sh script: "echo foo", label: "my step"

https://stackoverflow.com/a/54787322/6847446

于 2019-02-20T13:23:07.690 回答
1

好吧,绝望的时代需要绝望的措施。如果可以使用 Blue Ocean,则可以使用单执行线的并行步骤。

        parallel(
            "This is my step name" : {
                sh 'env'
            }
        )
于 2017-04-28T19:06:16.960 回答
1

试试这个,很好的解决方法

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} "))
    }
}
于 2018-08-21T19:04:00.873 回答
0

我也在尝试同样的事情,但在不同的上下文中,我的团队不希望日志 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 创建多个窗口。

于 2017-07-27T13:18:52.340 回答
0

在桑迪出色的回答之后,我创建了一个小脚本包装器,将 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 服务器上。

于 2018-11-02T15:13:41.917 回答
0

它并不完美,但我通常发现添加一个 echo 步骤来描述以下 bat 或 sh 步骤试图完成的内容就足够了。以前从未见过它的人应该能够很快弄清楚。

echo "Testing with Ping"
bat "ping www.stackoverflow.com"
echo "Getting IPs"
bat "nslookup www.stackoverflow.com"
于 2018-11-02T05:53:49.870 回答