提供上一个 Jenkins 作业到 Jenkins 管道中下一个作业的执行时间总和



需要帮助来找出一种方法,我们可以获取先前作业的执行时间总和,作为 Jenkins 管道中下一个作业的输入。 假设 P 是具有 n 个作业的管道

J1 -> J2 -> J3 -> J4

我想提供执行时间的 J4 输入(J1 + J2 + J3( 谁能帮我解决。

如果我必须做这样的东西,我会使用 Jenkins API、JsonSlurper 和 TimeUnit。 这是这种情况的示例代码:

import groovy.json.JsonSlurper
import java.util.concurrent.TimeUnit
def convert(int millisToConvert) {
long hours = TimeUnit.MILLISECONDS.toHours(millisToConvert);
long minutes = TimeUnit.MILLISECONDS.toMinutes(millisToConvert) % TimeUnit.HOURS.toMinutes(1);
long seconds = TimeUnit.MILLISECONDS.toSeconds(millisToConvert) % TimeUnit.MINUTES.toSeconds(1);
String format = String.format("%02d:%02d:%02d", Math.abs(hours), Math.abs(minutes), Math.abs(seconds));
return format;
}
node {
def time = 0;
int n = parameter.toInteger()
def m = n - 1;
def list = [] 
for(int x=m; x<=n; x++){
job = ["curl", "-k", "-u", "<user>:<apitoken>", "https://host/jenkins/view/TOOLS/job/somejob/{$x}/api/json?tree=duration"].execute().text
list.push( job )
}
println list
list.each {
print it
def d = new JsonSlurper().parseText( it );
def t = d.duration;
time += t;   
}
def VARIABLE = convert(time)
println "Your time is ${VARIABLE}" 
}

您可以控制需要求和的构建数量,以及从何处开始nm参数。我使用convert来获取 00:03:46 之类的格式,但这取决于您的需要。

输出:

Started by user 3sky
Running in Durability level: MAX_SURVIVABILITY
[Pipeline] node
Running on Jenkins in /app/jenkins/home/workspace/testing_job
[Pipeline] {
[Pipeline] echo
[{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun","duration":175052}, {"_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun","duration":51014}]
[Pipeline] echo
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun","duration":175052}
[Pipeline] echo
{"_class":"org.jenkinsci.plugins.workflow.job.WorkflowRun","duration":51014}
[Pipeline] echo
Your time is 00:03:46
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

最新更新