Connect builds to ge.spring.io.
This change publishes a build scan to ge.spring.io for every local build from an authenticated Spring committer and for CI where appropriate access tokens are available. The build will not fail if publishing fails. This change also allows the build to benefit from local and remote build caching, providing faster builds for all contributors. Additionally, the project will have access to all features of Gradle Enterprise such as: - Dashboards to view all historical build scans, along with performance trends over time - Build failure analytics for enhanced investigation and diagnosis of build failures - Test failure analytics to better understand trends and causes around slow, failing, and flaky tests Resolves #1376.
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -25,4 +25,6 @@ _site
|
||||
credentials.yml
|
||||
|
||||
# Things to ignore that facilitate backports.
|
||||
spring-ws-bom
|
||||
spring-ws-bom
|
||||
.flattened-pom.xml
|
||||
.mvn/.gradle-enterprise
|
||||
|
||||
13
.mvn/extensions.xml
Normal file
13
.mvn/extensions.xml
Normal file
@@ -0,0 +1,13 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<extensions>
|
||||
<extension>
|
||||
<groupId>com.gradle</groupId>
|
||||
<artifactId>gradle-enterprise-maven-extension</artifactId>
|
||||
<version>1.18.1</version>
|
||||
</extension>
|
||||
<extension>
|
||||
<groupId>com.gradle</groupId>
|
||||
<artifactId>common-custom-user-data-maven-extension</artifactId>
|
||||
<version>1.12.2</version>
|
||||
</extension>
|
||||
</extensions>
|
||||
31
.mvn/gradle-enterprise.xml
Normal file
31
.mvn/gradle-enterprise.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<gradleEnterprise
|
||||
xmlns="https://www.gradle.com/gradle-enterprise-maven" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="https://www.gradle.com/gradle-enterprise-maven https://www.gradle.com/schema/gradle-enterprise-maven.xsd">
|
||||
<server>
|
||||
<url>https://ge.spring.io</url>
|
||||
</server>
|
||||
<buildScan>
|
||||
<backgroundBuildScanUpload>false</backgroundBuildScanUpload>
|
||||
<captureGoalInputFiles>true</captureGoalInputFiles>
|
||||
<publishIfAuthenticated>true</publishIfAuthenticated>
|
||||
<obfuscation>
|
||||
<ipAddresses>#{{'0.0.0.0'}}</ipAddresses>
|
||||
</obfuscation>
|
||||
</buildScan>
|
||||
<buildCache>
|
||||
<local>
|
||||
<enabled>true</enabled>
|
||||
</local>
|
||||
<remote>
|
||||
<server>
|
||||
<credentials>
|
||||
<username>spring-builds+jenkins</username>
|
||||
<password>${env.GRADLE_ENTERPRISE_CACHE_PASSWORD}</password>
|
||||
</credentials>
|
||||
</server>
|
||||
<enabled>true</enabled>
|
||||
<storeEnabled>#{env['GRADLE_ENTERPRISE_CACHE_USERNAME'] != null and env['GRADLE_ENTERPRISE_CACHE_PASSWORD'] != null}</storeEnabled>
|
||||
</remote>
|
||||
</buildCache>
|
||||
</gradleEnterprise>
|
||||
35
Jenkinsfile
vendored
35
Jenkinsfile
vendored
@@ -22,6 +22,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -35,7 +37,7 @@ pipeline {
|
||||
stage("Test other configurations") {
|
||||
when {
|
||||
beforeAgent(true)
|
||||
branch(pattern: "main|(\\d\\.\\d\\.x)", comparator: "REGEXP")
|
||||
branch(pattern: "main|(\\d\\.\\d\\.x)|issue/.+", comparator: "REGEXP")
|
||||
}
|
||||
|
||||
parallel {
|
||||
@@ -44,6 +46,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -59,6 +63,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -73,6 +79,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -87,6 +95,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -101,6 +111,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -115,6 +127,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -129,6 +143,8 @@ pipeline {
|
||||
options { timeout(time: 30, unit: 'MINUTES')}
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
@@ -150,6 +166,8 @@ pipeline {
|
||||
KEYRING = credentials('spring-signing-secring.gpg')
|
||||
PASSPHRASE = credentials('spring-gpg-passphrase')
|
||||
STAGING_PROFILE_ID = credentials('spring-data-release-deployment-maven-central-staging-profile-id')
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
|
||||
steps {
|
||||
@@ -182,7 +200,7 @@ pipeline {
|
||||
|
||||
sh "ci/build-and-deploy-to-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-close.sh ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/smoke-test-against-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
// sh "ci/smoke-test-against-maven-central.sh ${PROJECT_VERSION} ${STAGING_REPOSITORY_ID}"
|
||||
sh "ci/rc-release.sh ${STAGING_REPOSITORY_ID}"
|
||||
|
||||
slackSend(
|
||||
@@ -210,22 +228,25 @@ pipeline {
|
||||
|
||||
stage('Release documentation') {
|
||||
when {
|
||||
anyOf {
|
||||
branch '3.1.x'
|
||||
branch 'release-3.1.x'
|
||||
}
|
||||
beforeAgent(true)
|
||||
branch(pattern: "(release-)?(\\d\\.\\d\\.x)", comparator: "REGEXP")
|
||||
}
|
||||
agent any
|
||||
options { timeout(time: 20, unit: 'MINUTES') }
|
||||
|
||||
environment {
|
||||
ARTIFACTORY = credentials("${p['artifactory.credentials']}")
|
||||
GRADLE_ENTERPRISE_CACHE = credentials("${p['gradle-enterprise-cache.credentials']}")
|
||||
GRADLE_ENTERPRISE_ACCESS_KEY = credentials("${p['gradle-enterprise.access-key']}")
|
||||
}
|
||||
|
||||
steps {
|
||||
script {
|
||||
docker.image(p['docker.java.main.image']).inside(p['docker.java.inside.basic']) {
|
||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -s settings.xml -Pjakarta-ee-10,distribute,docs ' +
|
||||
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ' +
|
||||
'GRADLE_ENTERPRISE_CACHE_USERNAME=${GRADLE_ENTERPRISE_CACHE_USR} ' +
|
||||
'GRADLE_ENTERPRISE_CACHE_PASSWORD=${GRADLE_ENTERPRISE_CACHE_PSW} ' +
|
||||
'./mvnw -s settings.xml -Pdistribute,docs ' +
|
||||
'-Dartifactory.server=https://repo.spring.io ' +
|
||||
"-Dartifactory.username=${ARTIFACTORY_USR} " +
|
||||
"-Dartifactory.password=${ARTIFACTORY_PSW} " +
|
||||
|
||||
@@ -4,6 +4,9 @@ set -euo pipefail
|
||||
|
||||
RELEASE_TYPE=$1
|
||||
|
||||
export GRADLE_ENTERPRISE_CACHE_USERNAME=${GRADLE_ENTERPRISE_CACHE_USR}
|
||||
export GRADLE_ENTERPRISE_CACHE_PASSWORD=${GRADLE_ENTERPRISE_CACHE_PSW}
|
||||
|
||||
echo 'Deploying to Artifactory...'
|
||||
|
||||
MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw \
|
||||
|
||||
@@ -5,6 +5,9 @@ set -euo pipefail
|
||||
PROJECT_VERSION=$1
|
||||
STAGING_REPOSITORY_ID=$2
|
||||
|
||||
export GRADLE_ENTERPRISE_CACHE_USERNAME=${GRADLE_ENTERPRISE_CACHE_USR}
|
||||
export GRADLE_ENTERPRISE_CACHE_PASSWORD=${GRADLE_ENTERPRISE_CACHE_PSW}
|
||||
|
||||
echo 'Staging on Maven Central...'
|
||||
|
||||
GNUPGHOME=/tmp/gpghome
|
||||
|
||||
@@ -13,3 +13,5 @@ docker.java.inside.basic=-v $HOME:/tmp/jenkins-home
|
||||
|
||||
# Credentials
|
||||
artifactory.credentials=02bd1690-b54f-4c9f-819d-a77cb7a9822c
|
||||
gradle-enterprise-cache.credentials=gradle_enterprise_cache_user
|
||||
gradle-enterprise.access-key=gradle_enterprise_secret_access_key
|
||||
|
||||
@@ -2,9 +2,9 @@
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
mkdir -p /tmp/jenkins-home/.m2/spring-ws
|
||||
chown -R 1001:1001 .
|
||||
export GRADLE_ENTERPRISE_CACHE_USERNAME=${GRADLE_ENTERPRISE_CACHE_USR}
|
||||
export GRADLE_ENTERPRISE_CACHE_PASSWORD=${GRADLE_ENTERPRISE_CACHE_PSW}
|
||||
|
||||
MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" \
|
||||
./mvnw -s settings.xml \
|
||||
-P${PROFILE} clean dependency:list test -Dsort -B -Dmaven.repo.local=/tmp/jenkins-home/.m2/spring-ws
|
||||
-P${PROFILE} clean dependency:list test -Dsort -B
|
||||
|
||||
30
pom.xml
30
pom.xml
@@ -231,6 +231,26 @@
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>com.gradle</groupId>
|
||||
<artifactId>gradle-enterprise-maven-extension</artifactId>
|
||||
<configuration>
|
||||
<gradleEnterprise>
|
||||
<normalization>
|
||||
<runtimeClassPath>
|
||||
<ignoredFiles>
|
||||
<ignoredFile>builddef.lst</ignoredFile>
|
||||
</ignoredFiles>
|
||||
</runtimeClassPath>
|
||||
</normalization>
|
||||
</gradleEnterprise>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
@@ -848,15 +868,14 @@
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>spring-milestone</id>
|
||||
<url>https://repo.spring.io/milestone</url>
|
||||
</repository>
|
||||
<repository>
|
||||
<id>spring-release</id>
|
||||
<url>https://repo.spring.io/release</url>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
@@ -866,6 +885,9 @@
|
||||
<snapshots>
|
||||
<enabled>true</enabled>
|
||||
</snapshots>
|
||||
<releases>
|
||||
<enabled>false</enabled>
|
||||
</releases>
|
||||
</pluginRepository>
|
||||
<pluginRepository>
|
||||
<id>spring-milestone</id>
|
||||
|
||||
Reference in New Issue
Block a user