【问题标题】:Jenkins Pipeline sh display name/labelJenkins Pipeline sh 显示名称/标签
【发布时间】:2017-01-17 19:15:05
【问题描述】:

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

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

如何指定一个有用的名称,或者如何使用其他步骤来达到相同的效果?

【问题讨论】:

    标签: jenkins jenkins-pipeline continuous-delivery jenkins-blueocean


    【解决方案1】:

    2019 年 2 月更新

    根据gertvdijk's answer below,现在可以assign an optional label to the sh step,从v2.28开始,对于那些还不能升级的人,还有一个解决方法。详情及cmets请查看his answer


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

    据我所知,目前这是不可能的。在詹金斯 跟踪器,有一个Name or alias Shell Script Step (sh) 问题 这与您的情况类似:

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

    sh cmd:"npm install", name: "npm"
    但是,它作为旧的 Allow stage to operate as a labelled block 的副本被关闭了,最近已修复,并且 似乎包含在v2.2 of the pipeline-stage-step-plugin (see changelog).

    似乎现在可以嵌套阶段,它们将出现在 查看表,但我认为这不是您要查找的内容。

    【讨论】:

    • 嵌套阶段只会按发现它们的时间顺序显示它们,所以我想说你不能正确地“嵌套阶段”
    • 只要我们在 UI 中获得人类可读的描述,而不仅仅是“Shell 脚本”,我不在乎它是如何完成的。我将尝试关注报告的变更日志,看看我们是否有任何运气。
    • 我们已尝试但找不到嵌套阶段的正确语法:gist.github.com/goofballLogic/abd62cd1e0a700c8d849ed2f7038e338
    • @goofballLogic 确实,它们在表中显示为 Pom12 也提到的列。因此,如果您在阶段中有多个步骤,则无法指定名称,我说这可能就是您要查找的内容,并且目前无法实现您想要的内容。恕我直言,我提到的问题应该仍然存在,并提供了不同的修复...
    • 现在已经实现,见my answer
    【解决方案2】:

    嗯,绝望的时候需要绝望的措施。如果你可以使用蓝海,你可以使用单执行线的并行步骤。

            parallel(
                "This is my step name" : {
                    sh 'env'
                }
            )
    

    【讨论】:

    • WorkflowScript: 40: 使用了无效的步骤“parallel” - 在这种情况下不允许 - 并行步骤只能用作阶段步骤块中的唯一顶级步骤
    • 并行使用并行吗?你能举出你的例子吗?
    • 是的,这解决了命名问题,但它并行执行所有内容,如果您需要执行后续步骤,它不适合。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      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} "))
          }
      }
      

      【讨论】:

        【解决方案5】:

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

        echo "Testing with Ping"
        bat "ping www.stackoverflow.com"
        echo "Getting IPs"
        bat "nslookup www.stackoverflow.com"
        

        【讨论】:

          【解决方案6】:

          根据 Sandy 的出色回答,我创建了一个小脚本包装器,将 sh 步骤封装在 try/finally 块中。

          基本用法:

          wrapper.script script: 'echo the invisible script', returnStdout: true, stepName: "description #1"
          

          将显示“描述 #1”而不是通用文本。

          完整的源代码和安装说明在这里 https://github.com/ael-computas/jenkins-script-wrapper

          可以轻松地作为库安装在您的 jenkins 服务器上。

          【讨论】:

            【解决方案7】:

            "Pipeline Nodes and Processes Plugin" 的 2.28+ 版本现在为sh step 增加了label 选项,现在带有JENKINS-55410

            标签(可选)

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

            • 类型:字符串

            例如:

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

            如果您还不能升级,另一种选择是使用Labelled Pipeline Steps plugin

            【讨论】:

              【解决方案8】:
              sh "echo foo", label: "my step"
              

              不适合我,

              必须是:

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

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

              【讨论】:

                猜你喜欢
                • 2018-07-15
                • 1970-01-01
                • 1970-01-01
                • 2016-07-15
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-08-09
                • 1970-01-01
                相关资源
                最近更新 更多