我正在尝试对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进行评估。你们中的任何一个都知道为什么吗?
答案 0 :(得分:0)
所以我发现我犯了3个错误。
Jenkins管道并行执行一个步骤。这意味着您不能在同一步骤的不同部分中读写文件,而无需从未更新的文件中读取(实际上)(来自此stackoverflow Override environment variable created locally in Jenkins)
Jenkins的默认shell是/ usr / bin / sh,不一定是bash。我用bash -c "echo $Var"
明确地运行了我的脚本(真正的问题是远程机器是Windows,哎呀)
我的管道在从文件中读取更新的变量值之前失败。我已经将阅读步骤移到了管道的前面。