Jenkins 运行 失败测试 n 次

Jenkins run a failing test n times

我正在尝试重新运行 一次在 Jenkins 中失败的测试。我见过 Naginator,但我的团队不希望添加额外的插件。 (注:我们使用EnvInject将环境变量注入构建过程)

下一个想法是保留一个包含重试次数的变量,并在每次新构建时递减它。有一个堆栈溢出 link(我现在正在努力寻找)建议 groovy 脚本看起来像这样

def map = [:]
Int newRetries = RETRIES.toInteger() - 1
map.put(“RETRIES”, newRetries)
return map

但是,“为 运行 准备环境”部分中的 groovy 脚本需要管理员权限(同样我的团队希望避免)。

下一个想法是使用 属性 文件并按照 echo "RETRIES=$((RETRIES-1))" > env.properties 的方式做一些事情并添加一个 Inject Environmental variable 步骤,读取 env.properties.

问题是在我们的 Jenkins bash 脚本中 echo "RETRIES=$((RETRIES-1))" 打印“RETRIES=$((RETRIES-1))”

在本地终端我可以运行

RETRIES=5
echo "RETRIES=$((RETRIES-1))"

> RETRIES=4

,但在 Jenkins 中,不会评估 RETRIES-1。你们知道为什么吗?

所以我发现了 3 个错误。

  1. Jenkins 管道并行执行单个步骤。这意味着如果不读取未更新的文件(实际上),则无法在同一步骤的不同部分写入和读取文件(来自此 Whosebug

  2. Jenkins 上的默认 shell 是 /usr/bin/sh,不一定是 bash。我明确地 运行 我的脚本 bash -c "echo $Var" (这里真正的问题是远程机器是 windows,哎呀)

  3. 我的管道在从文件中读取更新的变量值之前失败了。我已将阅读步骤移至管道中的较早位置。