詹金斯(Jenkins)测试失败了n次

时间:2020-11-12 00:31:33

标签: bash jenkins environment-variables jenkins-plugins

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

下一个想法是保留一个变量,该变量具有重试的次数,并在每个新版本中将其递减。有一个堆栈溢出链接(此刻我正在努力寻找),暗示一个看起来像这样的普通脚本

cd "folder of epub content"

# add mimetype 1st
zip -0 -X ../file.epub mimetype

# avoid writing it again in the next step, here I renamed
mv mimetype backup_mimetype

# add the rest
zip -9 -X -r ../file.epub *

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

下一个想法是使用属性文件,并按照def map = [:] Int newRetries = RETRIES.toInteger() - 1 map.put(“RETRIES”, newRetries) return map 的方式进行一些操作,并添加一个读取env.properties的“注入环境”变量步骤。

问题是在我们的Jenkins bash脚本echo "RETRIES=$((RETRIES-1))" > env.properties中显示“ RETRIES = $(((RETRIES-1))””

我可以在本地终端上运行

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

,但在Jenkins中,未对RETRIES-1进行评估。你们中的任何一个都知道为什么吗?

1 个答案:

答案 0 :(得分:0)

所以我发现我犯了3个错误。

  1. Jenkins管道并行执行一个步骤。这意味着您不能在同一步骤的不同部分中读写文件,而无需从未更新的文件中读取(实际上)(来自此stackoverflow Override environment variable created locally in Jenkins

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

  3. 我的管道在从文件中读取更新的变量值之前失败。我已经将阅读步骤移到了管道的前面。