def withCheck(String blockName, Closure closure) {
script {
def buildStage = true
catchError(message: 'check previous build status', stageResult:'SUCCESS', buildResult: 'SUCCESS') {
copyArtifactsFromRestartedBuild(context.env.JOB_NAME, context.env.BUILD_NUMBER, "stageStates/${blockName}")
buildStage = false
}
if (buildStage) {
closure.call()
writeFile file: "${blockName}", text: "1"
archiveArtifacts artifacts: "stageStates/${blockName}"
}
}
}
def getBuildActions(String jobName, int buildNumber) {
return Jenkins.instance.getItemByFullName(jobName).getBuildByNumber(buildNumber).properties.actions
}
def filterBuildAction(def buildActions, String filter = "RestartFlowFactoryAction") {
return buildActions.findAll { it.getClass().toString().contains(filter) }
}
String getRestartedBuildData(String jobName, int buildNumber) {
def buildActions = getBuildActions(jobName, buildNumber)
def filteredAction = filterBuildAction(buildActions, "RestartFlowFactoryAction")
if (filteredAction.size() == 1) {
return filteredAction[0].getOriginRunId()
} else {
return null
}
}
void copyArtifactsFromRestartedBuild(String jobName, String buildNumber, String fileFilter) {
String restartedBuildData = getRestartedBuildData(jobName, buildNumber as Integer)
String restartedJobName = restartedBuildData.split("#")[0]
String restartedBuildNumber = restartedBuildData.split("#")[-1]
copyArtifacts(filter: fileFilter, projectName: restartedJobName, selector: context.specific("${restartedBuildNumber}"))
}
We'd love to see support for this. Are there any known workarounds that would allow us to make this work, other than creating a separate pipeline for each parallel branch?