如果你有'n'自由式工作,你必须得到一个单一的电子邮件通知,然后去jenkins.Multijob插件的方法之一。 在这里,您可以顺序或并行运行您的作业。为了将结果整合到一个电子邮件中,您需要额外的插件,如复制工件,Groovy。
下面我给,我需要得到2个自由泳工作“作业A”和“作业B”的结果,在1个单电子邮件
(前必要的一个例子: - 多椎,神器,Groovy的插件是安装在jenkins中 运行作业的节点至少应有2个执行程序) 要遵循的步骤。
- 创建一个多椎项目(将其命名为“主”)
- 在添加生成步骤---->多椎阶段 一个。 '在第一阶段'我添加了'工作A',在'第二阶段'添加了'工作B'(因为我希望我的工作顺序运行) b。如果你想执行你的作业,请在'阶段1'中添加'作业A'和'作业B'
- '作业A'和'作业B'应检查复制作品的权限并添加项目以允许作品' Master'(这将授予'Master'权限来迭代Subjob结果)
- 现在,对于'Master',您需要在Groovy后期构建中添加Groovy脚本(添加后期构建操作---> Groovy Postbuild)
下面给出的是我用来遍历我的子作业结果,然后拿到通行证pertcentage决定我是否需要设置主为成功的状态或failed.Here我的工作成绩是Groovy脚本nunit结果。
import hudson.model.*
import com.tikal.jenkins.plugins.multijob.*
void log(msg) {
manager.listener.logger.println(msg)
}
def boolean findpercent(int pass,int total)
{
log 'Entered the function find percent'
def float percent = 0.0
log percent
percent = (pass/total) * 100
log percent
if(percent >= 90.0)
{
return true
}else
{
return false
}
}
threshold = Result.SUCCESS
void aggregate_results() {
def failed = false
def int totalTestCases = 0
def int failedTestCases = 0
def int passedTestcases = 0
def int skipTestcases = 0
mainJob = manager.build.getProject().getName()
job = hudson.model.Hudson.instance.getItem(mainJob)
log '-------------------------------------------------------------------------------------'
log 'Aggregated status report'
log '-------------------------------------------------------------------------------------'
log mainJob
log job
log manager.build.getNumber()
log manager.build.getResult()
job.getLastBuild().getSubBuilds().each { subBuild->
subJob = subBuild.getJobName()
subJobNumber = subBuild.getBuildNumber()
job1 = hudson.model.Hudson.instance.getItem(subBuild.getJobName())
build = job1.getBuildByNumber(subJobNumber)
log build
log job1.getLastCompletedBuild().getResult()
log job1.getLastCompletedBuild().getTestResultAction()
log build.getResult()
log subJobNumber
log subJob
log job1
log subBuild
log build.getAllActions()
log '-------------------------------------------------------------------------------------'
log 'build.getTestResultAction()'
log '-------------------------------------------------------------------------------------'
log build.getTestResultAction()
testResult = build.getTestResultAction()
log testResult
if (testResult != null) {
total = testResult.getTotalCount()
log total
log totalTestCases
totalTestCases += total
log totalTestCases
failures = testResult.getFailCount()
log failures
log failedTestCases
failedTestCases += failures
log failedTestCases
skip = testResult.getSkipCount()
log skip
log skipTestcases
skipTestcases += skip
pass = total - (failures + skip)
log pass
passedTestcases += pass
log pass
log passedTestcases
}
}
log 'Total testcases run'
log totalTestCases
log 'Total failedTestCases'
log failedTestCases
log 'Total skipTestcases'
log skipTestcases
log 'Total passedTestcases'
log passedTestcases
log 'End Result'
if(findpercent(passedTestcases,totalTestCases)) {
log 'success'
manager.build.setResult(hudson.model.Result.SUCCESS)
}else
{
log 'failure'
manager.build.setResult(hudson.model.Result.FAILURE)
}
log 'time taken'
log manager.build.getTimestampString()
log 'Time End'
}
try
{
aggregate_results()
}
catch(Exception e) {
log('ERROR: ${e.message}')
log('ERROR: Failed Status report aggregation')
}
现在,在可编辑的电子邮件通知我用BUILD_LOG_EXCERPT以获得所需的值。例如 $ {BUILD_LOG_EXCERPT,开始=“总passedTestcases”,结束=“最终结果”} 这将返回变量passedTestcases的值,因为它存在于日志总passedTestcases和结束结果
注之间: - 您在其上运行作业的从节点应该有至少2个执行程序。因为这里的主人将运行,直到你所有的subjobs运行。所以如果它按顺序运行,你将需要两个执行者。如果你需要并行运行,你需要n个执行者(n-1个subjobs和1个主任务)。
谢谢您的回应!我会试一试并回复你。 – 2013-03-18 13:05:10
这样做,谢谢! – 2013-03-19 15:20:35