You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline无变更时脚本执行失败问题排查与解决

Jenkins Pipeline获取Terragrunt变更目录的构建失败问题解决

问题场景

在Jenkins任务中,需要通过Git diff获取存在变更的目录,以此为目标运行terragrunt plan。最初使用的脚本如下:

def directories = sh([script: "git diff HEAD~1 --name-only | xargs dirname | sort | uniq | grep terragrunt/okta", returnStdout: true]).trim()

脚本通过grep筛选存储.hcl文件的terragrunt/okta目录,但当该目录无任何变更时,Jenkins构建会直接失败,且控制台无额外报错信息。本地终端执行该命令可正常运行,但在Jenkins Pipeline中结合returnStdout和trim()方法时出现异常。

问题原因

grep命令在未匹配到任何结果时会返回非0退出码,而Jenkins的sh步骤默认会将非0退出码判定为命令执行失败,从而终止构建。本地终端中shell不会因单个命令的非0退出码中断执行,因此不会出现问题。

解决方案

为grep命令追加|| echo '',确保无论是否匹配到结果,整个命令链都返回0退出码,避免Jenkins判定构建失败。修改后的脚本如下:

def directories = sh([script: "git diff HEAD~1 --name-only | xargs dirname | sort | uniq | grep terragrunt/okta || echo ''", returnStdout: true]).trim()
  • || echo ''的作用:当grep无匹配结果返回非0时,执行echo ''输出空字符串,让整个命令的退出码变为0
  • 后续可通过判断directories是否为空,决定是否执行terragrunt plan操作

内容的提问来源于stack exchange,提问作者Frendom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:28:13