Commit b9b93243 authored by Dominik Charousset's avatar Dominik Charousset Committed by Joseph Noir

Flatten pipeline into a single parallel block

parent 7f772be7
...@@ -109,39 +109,39 @@ def buildSteps(buildType, cmakeArgs) { ...@@ -109,39 +109,39 @@ def buildSteps(buildType, cmakeArgs) {
if (STAGE_NAME.contains('Windows')) { if (STAGE_NAME.contains('Windows')) {
echo "Windows build on $NODE_NAME" echo "Windows build on $NODE_NAME"
withEnv(['PATH=C:\\Windows\\System32;C:\\Program Files\\CMake\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\bin']) { withEnv(['PATH=C:\\Windows\\System32;C:\\Program Files\\CMake\\bin;C:\\Program Files\\Git\\cmd;C:\\Program Files\\Git\\bin']) {
// Configure and build. // Configure and build.
def ret = bat(returnStatus: true, def ret = bat(returnStatus: true,
script: """cmake -E make_directory build script: """cmake -E make_directory build
cd build cd build
cmake -D CMAKE_BUILD_TYPE=$buildType -G "Visual Studio 15 2017" $cmakeArgs $msOpts .. cmake -D CMAKE_BUILD_TYPE=$buildType -G "Visual Studio 15 2017" $cmakeArgs $msOpts ..
IF /I "%ERRORLEVEL%" NEQ "0" ( IF /I "%ERRORLEVEL%" NEQ "0" (
EXIT 1 EXIT 1
) )
EXIT 0""") EXIT 0""")
if (ret) { if (ret) {
echo "[!!!] Configure failed!" echo "[!!!] Configure failed!"
currentBuild.result = 'FAILURE' currentBuild.result = 'FAILURE'
return return
} }
// bat "echo \"Step: Build for '${tags}'\"" // bat "echo \"Step: Build for '${tags}'\""
ret = bat(returnStatus: true, ret = bat(returnStatus: true,
script: """cd build script: """cd build
cmake --build . cmake --build .
IF /I "%ERRORLEVEL%" NEQ "0" ( IF /I "%ERRORLEVEL%" NEQ "0" (
EXIT 1 EXIT 1
) )
EXIT 0""") EXIT 0""")
if (ret) { if (ret) {
echo "[!!!] Build failed!" echo "[!!!] Build failed!"
currentBuild.result = 'FAILURE' currentBuild.result = 'FAILURE'
return return
} }
// Test. // Test.
ctest([ ctest([
arguments: '--output-on-failure', arguments: '--output-on-failure',
installation: 'cmake auto install', installation: 'cmake auto install',
workingDir: 'build', workingDir: 'build',
]) ])
} }
} else { } else {
echo "Unix build on $NODE_NAME" echo "Unix build on $NODE_NAME"
...@@ -171,28 +171,22 @@ def buildSteps(buildType, cmakeArgs) { ...@@ -171,28 +171,22 @@ def buildSteps(buildType, cmakeArgs) {
} }
// Builds a stage for given builds. Results in a parallel stage `if builds.size() > 1`. // Builds a stage for given builds. Results in a parallel stage `if builds.size() > 1`.
def makeBuildStage(builds, lblExpr, settings) { def makeBuildStages(matrixIndex, builds, lblExpr, settings) {
if (builds.size() == 1) { builds.collectEntries { buildType ->
def buildType = builds[0] def id = "$matrixIndex $lblExpr: $buildType"
return { [
node(lblExpr) { (id):
stage("$lblExpr: $buildType") { {
withEnv(buildEnvironments[lblExpr] ?: []) { node(lblExpr) {
buildSteps(buildType, settings['cmakeArgs'] ?: '') stage(id) {
(settings['extraSteps'] ?: []).each { fun -> "$fun"() } withEnv(buildEnvironments[lblExpr] ?: []) {
buildSteps(buildType, settings['cmakeArgs'] ?: '')
(settings['extraSteps'] ?: []).each { fun -> "$fun"() }
}
} }
} }
} }
} ]
}
return {
node('master') {
stage("$lblExpr: Fan Out") {
parallel builds.collectEntries { buildType ->
["$lblExpr: $buildType": makeBuildStage([buildType], lblExpr, settings)]
}
}
}
} }
} }
...@@ -220,15 +214,16 @@ pipeline { ...@@ -220,15 +214,16 @@ pipeline {
stage('Builds') { stage('Builds') {
steps { steps {
script { script {
// Create stages for our building everything in our build // Create stages for building everything in our build matrix in
// matrix in parallel. // parallel.
def xs = [:] def xs = [:]
buildMatrix.eachWithIndex { entry, index -> buildMatrix.eachWithIndex { entry, index ->
def (os, settings) = entry def (os, settings) = entry
settings['tools'].eachWithIndex { tool, toolIndex -> settings['tools'].eachWithIndex { tool, toolIndex ->
def labelExpr = "$os && $tool" def matrixIndex = "[$index:$toolIndex]"
def builds = settings['builds'] def builds = settings['builds']
xs["Build $os [$index:$toolIndex]"] = makeBuildStage(builds, labelExpr, settings) def labelExpr = "$os && $tool"
xs << makeBuildStages(matrixIndex, builds, labelExpr, settings)
} }
} }
parallel xs parallel xs
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment