理想情况下,如果“测试”脚本失败,我们不会取消构建,而是在最后报告错误。这可以通过用catch块包装“sh”步骤并将构建标记为不稳定来实现。然而,如果我们使用单个管道,所有这些错误日志将混在单个控制台日志中(我意识到您也可以从管道视图中向下钻取,但这需要搜索)。
是否有报告这些错误的推荐方法?想法包括:
例如。
def errors = []
try {
sh "check-doc-style.sh | tee check-doc-style.log"
} catch (e)
errors << "Doc style check failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'check-doc-style.log'])
try {
sh "sanity-checks.sh | tee sanity-checks.log"
} catch (e)
errors << "Sanity checks failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'sanity-checks.log'])
if (errors.size() > 0) {
currentBuild.result = 'UNSTABLE'
for (int i = 0; i < errors.size(); i++) {
echo errors[i];
}
}
对于上下文:我们正在从一个Jenkins设置迁移到一个Jenkine管道,Jenkinsfile来表示整个过程,在Jenkins设置中,每个分支有十几个作业。很多作业都是脚本测试,要么通过(退出代码0)要么失败。通过查看控制台日志可以查看错误消息。
在编写过程中,管道插件不支持返回退出代码或sh
步骤的输出。然而,有一个开放的票跟踪这个功能。因此,try/catch/finally
将是处理这种情况的默认方式。
还有其他方法,但这些方法相当繁琐。:
集+e
sh "${mvnHome}/bin/mvn -B -Dmaven.test.failure.ignore verify"
step([$class: 'JUnitResultArchiver', testResults: '**/target/surefire-reports/TEST-*.xml'])
我使用jenkins的代码为每个插件生成覆盖率,并显示我喜欢的管道。是否有一个插件我可以使用它(例如Cobertura,但它似乎不受管道支持)?
问题内容: 我能够运行以下shell脚本,但无法从Jenkins管道代码运行。 尝试1。 输出: 尝试2: 尝试过sh“”“ 输出 : 美元符号后的非法字符串体字符;解决方案:要么转义文字美元符号,要么将值表达式括起来 有人能帮我吗? 问题答案: 这应该工作。 您还需要在调用下面的新subshell时转义$
拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?
我已经将Jenkins build配置为构建gradle项目并在其上运行测试(使用connectedInstrumentTest),但构建在启动几秒后失败。 com.android.ddmlib.installexception在com.android.ddmlib.device.installpackage(device.java:884)在com.android.builder.testing
问题内容: 我有一个长期运行的System Groovy脚本,它可以启动数以万计的其他构建。为了不使构建队列过长(这将使UI无法使用),它将监视构建队列的长度。如果构建队列长于给定的阈值,它将不会启动任何新的构建并休眠一分钟。 问题是,此脚本无法响应用户的kill操作。当用户单击UI上的“杀死此构建”按钮时,什么也没有发生。我想知道是否有一种方法可以让系统Groovy脚本检查是否应该终止当前版本,
问题:- 在我的Jenkins脚本管道部分中有以下代码。我已经在Manage Jenkins下添加了我的私人Docker注册表URL和凭据-- Jenkins表单错误- 代码:-