Try to get rid of global state issues in Jenkinsfile
This commit is contained in:
parent
dc42ec38ed
commit
a822192002
|
@ -74,10 +74,10 @@ if (currentBuild.getBuildCauses().toString().contains('BranchIndexingCause')) {
|
|||
|
||||
stage('Build') {
|
||||
Map<String, Closure> executions = [:]
|
||||
Map<String, Map<String, String>> state = [:]
|
||||
environments.each { BuildEnvironment buildEnv ->
|
||||
// Don't build environments for newer JDKs when this is a PR
|
||||
def isNewerJdk = buildEnv.getVersion() != defaultJdk
|
||||
if ( isNewerJdk ) {
|
||||
if ( buildEnv.getVersion() != defaultJdk ) {
|
||||
if ( helper.scmSource.pullRequest ) {
|
||||
return
|
||||
}
|
||||
|
@ -87,11 +87,13 @@ stage('Build') {
|
|||
// Use withEnv instead of setting env directly, as that is global!
|
||||
// See https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md
|
||||
withEnv(["JAVA_HOME=${tool buildEnv.buildJdkTool}", "PATH+JAVA=${tool buildEnv.buildJdkTool}/bin", "TEST_JAVA_HOME=${tool buildEnv.testJdkTool}"]) {
|
||||
def additionalOptions = ""
|
||||
if ( isNewerJdk ) {
|
||||
additionalOptions = " -Ptest.jdk.version=${buildEnv.getTestVersion()} -Porg.gradle.java.installations.paths=${JAVA_HOME},${TEST_JAVA_HOME}"
|
||||
if ( buildEnv.getVersion() != defaultJdk ) {
|
||||
state[buildEnv.tag]['additionalOptions'] = " -Ptest.jdk.version=${buildEnv.getTestVersion()} -Porg.gradle.java.installations.paths=${JAVA_HOME},${TEST_JAVA_HOME}";
|
||||
}
|
||||
def containerName = null
|
||||
else {
|
||||
state[buildEnv.tag]['additionalOptions'] = "";
|
||||
}
|
||||
state[buildEnv.tag]['containerName'] = null;
|
||||
stage('Checkout') {
|
||||
checkout scm
|
||||
}
|
||||
|
@ -103,14 +105,14 @@ stage('Build') {
|
|||
docker.image('mysql:8.0.21').pull()
|
||||
}
|
||||
sh "./docker_db.sh mysql_8_0"
|
||||
containerName = "mysql"
|
||||
state[buildEnv.tag]['containerName'] = "mysql"
|
||||
break;
|
||||
case "mariadb":
|
||||
docker.withRegistry('https://index.docker.io/v1/', 'hibernateci.hub.docker.com') {
|
||||
docker.image('mariadb:10.5.8').pull()
|
||||
}
|
||||
sh "./docker_db.sh mariadb"
|
||||
containerName = "mariadb"
|
||||
state[buildEnv.tag]['containerName'] = "mariadb"
|
||||
break;
|
||||
case "postgresql_9_5":
|
||||
// use the postgis image to enable the PGSQL GIS (spatial) extension
|
||||
|
@ -118,7 +120,7 @@ stage('Build') {
|
|||
docker.image('postgis/postgis:9.5-2.5').pull()
|
||||
}
|
||||
sh "./docker_db.sh postgresql_9_5"
|
||||
containerName = "postgres"
|
||||
state[buildEnv.tag]['containerName'] = "postgres"
|
||||
break;
|
||||
case "postgresql_13":
|
||||
// use the postgis image to enable the PGSQL GIS (spatial) extension
|
||||
|
@ -126,33 +128,33 @@ stage('Build') {
|
|||
docker.image('postgis/postgis:13-3.1').pull()
|
||||
}
|
||||
sh "./docker_db.sh postgresql_13"
|
||||
containerName = "postgres"
|
||||
state[buildEnv.tag]['containerName'] = "postgres"
|
||||
break;
|
||||
case "oracle":
|
||||
docker.withRegistry('https://index.docker.io/v1/', 'hibernateci.hub.docker.com') {
|
||||
docker.image('quillbuilduser/oracle-18-xe').pull()
|
||||
}
|
||||
sh "./docker_db.sh oracle_18"
|
||||
containerName = "oracle"
|
||||
state[buildEnv.tag]['containerName'] = "oracle"
|
||||
break;
|
||||
case "db2":
|
||||
docker.withRegistry('https://index.docker.io/v1/', 'hibernateci.hub.docker.com') {
|
||||
docker.image('ibmcom/db2:11.5.7.0').pull()
|
||||
}
|
||||
sh "./docker_db.sh db2"
|
||||
containerName = "db2"
|
||||
state[buildEnv.tag]['containerName'] = "db2"
|
||||
break;
|
||||
case "mssql":
|
||||
docker.image('mcr.microsoft.com/mssql/server:2017-CU13').pull()
|
||||
sh "./docker_db.sh mssql"
|
||||
containerName = "mssql"
|
||||
state[buildEnv.tag]['containerName'] = "mssql"
|
||||
break;
|
||||
case "sybase":
|
||||
docker.withRegistry('https://index.docker.io/v1/', 'hibernateci.hub.docker.com') {
|
||||
docker.image('nguoianphu/docker-sybase').pull()
|
||||
}
|
||||
sh "./docker_db.sh sybase"
|
||||
containerName = "sybase"
|
||||
state[buildEnv.tag]['containerName'] = "sybase"
|
||||
break;
|
||||
case "edb":
|
||||
docker.withRegistry('https://containers.enterprisedb.com', 'hibernateci.containers.enterprisedb.com') {
|
||||
|
@ -162,7 +164,7 @@ stage('Build') {
|
|||
docker.image('containers.enterprisedb.com/edb/edb-as-lite:v11').pull()
|
||||
}
|
||||
sh "./docker_db.sh edb"
|
||||
containerName = "edb"
|
||||
state[buildEnv.tag]['containerName'] = "edb"
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -171,88 +173,46 @@ stage('Build') {
|
|||
case "h2":
|
||||
case "derby":
|
||||
case "hsqldb":
|
||||
runTest("-Pdb=${buildEnv.dbName}${additionalOptions}")
|
||||
runTest("-Pdb=${buildEnv.dbName}${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
case "mysql8":
|
||||
runTest("-Pdb=mysql_ci${additionalOptions}")
|
||||
runTest("-Pdb=mysql_ci${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
case "tidb":
|
||||
runTest("-Pdb=tidb -DdbHost=localhost:4000${additionalOptions}", 'TIDB')
|
||||
runTest("-Pdb=tidb -DdbHost=localhost:4000${state[buildEnv.tag]['additionalOptions']}", 'TIDB')
|
||||
break;
|
||||
case "postgresql_9_5":
|
||||
case "postgresql_13":
|
||||
runTest("-Pdb=pgsql_ci${additionalOptions}")
|
||||
runTest("-Pdb=pgsql_ci${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
case "oracle":
|
||||
runTest("-Pdb=oracle_ci -PexcludeTests=**.LockTest.testQueryTimeout*${additionalOptions}")
|
||||
runTest("-Pdb=oracle_ci -PexcludeTests=**.LockTest.testQueryTimeout*${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
case "oracle_ee":
|
||||
runTest("-Pdb=oracle_jenkins${additionalOptions}", 'ORACLE_RDS')
|
||||
runTest("-Pdb=oracle_jenkins${state[buildEnv.tag]['additionalOptions']}", 'ORACLE_RDS')
|
||||
break;
|
||||
case "hana":
|
||||
runTest("-Pdb=hana_jenkins${additionalOptions}", 'HANA')
|
||||
runTest("-Pdb=hana_jenkins${state[buildEnv.tag]['additionalOptions']}", 'HANA')
|
||||
break;
|
||||
case "edb":
|
||||
runTest("-Pdb=edb_ci -DdbHost=localhost:5433${additionalOptions}")
|
||||
runTest("-Pdb=edb_ci -DdbHost=localhost:5433${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
case "s390x":
|
||||
runTest("-Pdb=h2${additionalOptions}")
|
||||
runTest("-Pdb=h2${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
default:
|
||||
runTest("-Pdb=${buildEnv.dbName}_ci${additionalOptions}")
|
||||
runTest("-Pdb=${buildEnv.dbName}_ci${state[buildEnv.tag]['additionalOptions']}")
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally {
|
||||
if ( containerName != null ) {
|
||||
sh "docker rm -f ${containerName}"
|
||||
if ( state[buildEnv.tag]['containerName'] != null ) {
|
||||
sh "docker rm -f ${state[buildEnv.tag]['containerName']}"
|
||||
}
|
||||
// Skip this for PRs
|
||||
if ( !env.CHANGE_ID && buildEnv.notificationRecipients != null ) {
|
||||
boolean success = currentBuild.result == 'SUCCESS'
|
||||
String previousResult = currentBuild.previousBuild == null ? null : currentBuild.previousBuild.result == 'SUCCESS'
|
||||
|
||||
// Ignore success after success
|
||||
if ( !( success && previousResult == 'SUCCESS' ) ) {
|
||||
def subject
|
||||
def body
|
||||
if ( success ) {
|
||||
if ( previousResult != 'SUCCESS' && previousResult != null ) {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
}
|
||||
else if ( currentBuild.result == 'FAILURE' ) {
|
||||
if ( previousResult != null && previousResult == "FAILURE" ) {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentBuild.result}"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentBuild.result}:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
|
||||
emailext(
|
||||
subject: subject,
|
||||
body: body,
|
||||
to: buildEnv.notificationRecipients
|
||||
)
|
||||
}
|
||||
handleNotifications(currentBuild, buildEnv)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -348,3 +308,50 @@ void runTest(String goal, String lockableResource = null, boolean clean = true)
|
|||
junit '**/target/test-results/test/*.xml'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void handleNotifications(currentBuild, buildEnv) {
|
||||
boolean success = currentBuild.result == 'SUCCESS'
|
||||
String previousResult = currentBuild.previousBuild == null ? null : currentBuild.previousBuild.result == 'SUCCESS'
|
||||
|
||||
// Ignore success after success
|
||||
if ( !( success && previousResult == 'SUCCESS' ) ) {
|
||||
def subject
|
||||
def body
|
||||
if ( success ) {
|
||||
if ( previousResult != 'SUCCESS' && previousResult != null ) {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Fixed:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Success:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
}
|
||||
else if ( currentBuild.result == 'FAILURE' ) {
|
||||
if ( previousResult != null && previousResult == "FAILURE" ) {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Still failing:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - Failure:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
}
|
||||
else {
|
||||
subject = "${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentBuild.result}"
|
||||
body = """<p>${env.JOB_NAME} - Build ${env.BUILD_NUMBER} - ${currentBuild.result}:</p>
|
||||
<p>Check console output at <a href='${env.BUILD_URL}'>${env.BUILD_URL}</a> to view the results.</p>"""
|
||||
}
|
||||
|
||||
emailext(
|
||||
subject: subject,
|
||||
body: body,
|
||||
to: buildEnv.notificationRecipients
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue