Jenkins Pipeline sh 显示名称/标签
Posted
技术标签:
【中文标题】Jenkins Pipeline sh 显示名称/标签【英文标题】:Jenkins Pipeline sh display name/label 【发布时间】:2017-01-17 19:15:05 【问题描述】:使用 Jenkins 2 流水线插件,有一个有用的功能允许快速概览流水线阶段和步骤状态,包括日志输出。
但是,如果您使用“Shell 脚本”(sh) 步骤,似乎没有办法用有用的名称标记该脚本,因此显示屏仅显示一长串“Shell 脚本”(如下图所示)。
如何指定一个有用的名称,或者如何使用其他步骤来达到相同的效果?
【问题讨论】:
【参考方案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) 问题 这与您的情况类似:
但是,它作为旧的 Allow stage to operate as a labelled block 的副本被关闭了,最近已修复,并且 似乎包含在v2.2 of the pipeline-stage-step-plugin (see changelog). 似乎现在可以嵌套阶段,它们将出现在 查看表,但我认为这不是您要查找的内容。sh
步骤在管道中添加了一个“Shell 脚本”步骤。然而, 可能有多个这样的步骤,包括来自不同的步骤 插件(例如 Docker),这使得很难区分步骤。 我们或许应该向 sh 添加一个可选参数来指定名称或 然后将出现在管道步骤中的别名。 例如,以下可能是 npm 的步骤,显示为“Shell 脚本:npm”在管道视图中。sh cmd:"npm install", name: "npm"
【讨论】:
嵌套阶段只会按发现它们的时间顺序显示它们,所以我想说你不能正确地“嵌套阶段” 只要我们在 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.***.com"
echo "Getting IPs"
bat "nslookup www.***.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://***.com/a/54787322/6847446
【讨论】:
以上是关于Jenkins Pipeline sh 显示名称/标签的主要内容,如果未能解决你的问题,请参考以下文章