【发布时间】:2011-09-18 05:30:44
【问题描述】:
我正在使用Parameterized Trigger Plugin 来触发下游构建。
如果下游失败,我如何指定上游作业应该失败?上游作业实际上是虚拟作业,参数传递给下游。
【问题讨论】:
标签: continuous-integration hudson jenkins hudson-plugins
我正在使用Parameterized Trigger Plugin 来触发下游构建。
如果下游失败,我如何指定上游作业应该失败?上游作业实际上是虚拟作业,参数传递给下游。
【问题讨论】:
标签: continuous-integration hudson jenkins hudson-plugins
此代码将根据下游作业状态标记上游构建不稳定/失败。
/*************************************************
Description: This script needs to put in Groovy
Postbuild plugin of Jenkins as a Post Build task.
*************************************************/
import hudson.model.*
void log(msg) {
manager.listener.logger.println(msg)
}
def failRecursivelyUsingCauses(cause) {
if (cause.class.toString().contains("UpstreamCause")) {
def projectName = cause.upstreamProject
def number = cause.upstreamBuild
upstreamJob = hudson.model.Hudson.instance.getItem(projectName)
if(upstreamJob) {
upbuild = upstreamJob.getBuildByNumber(number)
if(upbuild) {
log("Setting to '" + manager.build.result + "' for Project: " + projectName + " | Build # " + number)
//upbuild.setResult(hudson.model.Result.UNSTABLE)
upbuild.setResult(manager.build.result);
upbuild.save()
// fail other builds
for (upCause in cause.upstreamCauses) {
failRecursivelyUsingCauses(upCause)
}
}
} else {
log("No Upstream job found for " + projectName);
}
}
}
if(manager.build.result.isWorseOrEqualTo(hudson.model.Result.UNSTABLE)) {
log("****************************************");
log("Must mark upstream builds fail/unstable");
def thr = Thread.currentThread()
def build = thr.executable
def c = build.getAction(CauseAction.class).getCauses()
log("Current Build Status: " + manager.build.result);
for (cause in c) {
failRecursivelyUsingCauses(cause)
}
log("****************************************");
}
else {
log("Current build status is: Success - Not changing Upstream build status");
}
【讨论】:
查看以下回复:Fail hudson build with groovy script。您可以访问上游作业并使其构建失败但是......请注意 Hudson/Jenkins 构建后操作现在不允许指定任何顺序的事实:如果您的 groovy 脚本是在其他构建后指定的操作,并且这些操作会影响构建结果(即:解析测试结果),那么如果 Jenkins 决定在您的 groovy 脚本之后运行它们,您将无法更新上游作业的状态。
【讨论】:
在 Build step configure Trigger/Call builds on other projects 下,选择下游作业。选择“阻止直到触发的项目完成构建”。在它下面保存默认设置。此设置将使上游作业失败是下游失败。
【讨论】: