DATAJPA-1545 - Introduce Jenkins.

This commit is contained in:
Greg Turnquist
2019-04-30 15:55:45 -05:00
parent 1d57a05f7f
commit 4c6346ae51
7 changed files with 327 additions and 62 deletions

179
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,179 @@
pipeline {
agent none
triggers {
pollSCM 'H/10 * * * *'
upstream(upstreamProjects: "spring-data-commons/master", threshold: hudson.model.Result.SUCCESS)
}
stages {
stage("Test") {
parallel {
stage("test: baseline") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=none ci/test.sh"
}
}
stage("test: hibernate-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-next ci/test.sh"
}
}
stage("test: hibernate-53") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-53 ci/test.sh"
}
}
stage("test: hibernate-53-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-53-next ci/test.sh"
}
}
stage("test: hibernate-54") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-54 ci/test.sh"
}
}
stage("test: hibernate-54-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-54-next ci/test.sh"
}
}
stage("test: hibernate-6-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=hibernate-6-next ci/test.sh"
}
}
stage("test: eclipselink-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=eclipselink-next ci/test.sh"
}
}
stage("test: eclipselink-27") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=eclipselink-27 ci/test.sh"
}
}
stage("test: eclipselink-27-next") {
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
steps {
sh "PROFILE=eclipselink-27-next ci/test.sh"
}
}
}
}
stage('Release to artifactory') {
when {
branch 'issue/*'
}
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
environment {
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
}
steps {
sh "USERNAME=${ARTIFACTORY_USR} PASSWORD=${ARTIFACTORY_PSW} PROFILE=ci,snapshot ci/build.sh"
}
}
stage('Release to artifactory with docs') {
when {
branch 'test'
}
agent {
docker {
image 'adoptopenjdk/openjdk8:alpine'
args '-v $HOME/.m2:/root/.m2'
}
}
environment {
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
}
steps {
sh "USERNAME=${ARTIFACTORY_USR} PASSWORD=${ARTIFACTORY_PSW} PROFILE=ci,snapshot ci/build.sh"
}
}
}
post {
changed {
script {
slackSend(
color: (currentBuild.currentResult == 'SUCCESS') ? 'good' : 'danger',
channel: '#spring-data-dev',
message: "${currentBuild.fullDisplayName} - `${currentBuild.currentResult}`\n${env.BUILD_URL}")
emailext(
subject: "[${currentBuild.fullDisplayName}] ${currentBuild.currentResult}",
mimeType: 'text/html',
recipientProviders: [[$class: 'CulpritsRecipientProvider'], [$class: 'RequesterRecipientProvider']],
body: "<a href=\"${env.BUILD_URL}\">${currentBuild.fullDisplayName} is reported as ${currentBuild.currentResult}</a>")
}
}
}
}

39
ci/README.adoc Normal file
View File

@@ -0,0 +1,39 @@
== Running CI tasks locally
Since this pipeline is purely Docker-based, it's easy to:
* Debug what went wrong on your local machine.
* Test out a a tweak to your `test.sh` script before sending it out.
* Experiment against a new image before submitting your pull request.
All of these use cases are great reasons to essentially run what the CI server does on your local machine.
IMPORTANT: To do this you must have Docker installed on your machine.
1. `docker run -it --mount type=bind,source="$(pwd)",target=/spring-data-jpa-github adoptopenjdk/openjdk8:alpine /bin/sh`
+
This will launch the Docker image and mount your source code at `spring-data-jpa-github`.
+
2. `cd spring-data-jpa-github`
+
Next, run the `test.sh` script from inside the container:
+
3. `PROFILE=none ci/test.sh` (or whatever profile you need to test out)
Since the container is binding to your source, you can make edits from your IDE and continue to run build jobs.
If you need to test the `build.sh` script, do this:
1. `docker run -it --mount type=bind,source="$(pwd)",target=/spring-data-jpa-github adoptopenjdk/openjdk8:alpine /bin/sh`
+
This will launch the Docker image and mount your source code at `spring-data-jpa-github`.
+
2. `cd spring-data-jpa-github`
+
Next, run the `build.sh` script from inside the container:
+
3. `ci/build.sh`
IMPORTANT: This will attempt to deploy to artifactory, but without credentials, it will fail, leaving you simply with a built artifact.
NOTE: Docker containers can eat up disk space fast! From time to time, run `docker system prune` to clean out old images.

View File

@@ -2,13 +2,4 @@
set -euo pipefail
[[ -d $PWD/maven && ! -d $HOME/.m2 ]] && ln -s $PWD/maven $HOME/.m2
spring_data_jpa_artifactory=$(pwd)/spring-data-jpa-artifactory
rm -rf $HOME/.m2/repository/org/springframework/data 2> /dev/null || :
cd spring-data-jpa-github
./mvnw -Dmaven.test.skip=true deploy \
-DaltDeploymentRepository=distribution::default::file://${spring_data_jpa_artifactory} \
./mvnw -P${PROFILE} -Dmaven.test.skip=true clean deploy -B

View File

@@ -1,20 +0,0 @@
---
platform: linux
image_resource:
type: docker-image
source:
repository: openjdk
tag: 8-jdk-alpine
inputs:
- name: spring-data-jpa-github
outputs:
- name: spring-data-jpa-artifactory
caches:
- path: maven
run:
path: spring-data-jpa-github/ci/build.sh

View File

@@ -2,10 +2,4 @@
set -euo pipefail
[[ -d $PWD/maven && ! -d $HOME/.m2 ]] && ln -s $PWD/maven $HOME/.m2
rm -rf $HOME/.m2/repository/org/springframework/data 2> /dev/null || :
cd spring-data-jpa-github
./mvnw clean dependency:list test -P${PROFILE} -Dsort -Dbundlor.enabled=false -B
./mvnw -P${PROFILE} clean dependency:list test -Dsort -Dbundlor.enabled=false -B

View File

@@ -1,20 +0,0 @@
---
platform: linux
image_resource:
type: docker-image
source:
repository: openjdk
tag: 8-jdk-alpine
inputs:
- name: spring-data-jpa-github
outputs:
- name: spring-data-jpa-artifactory
caches:
- path: maven
run:
path: spring-data-jpa-github/ci/test.sh

112
pom.xml
View File

@@ -5,7 +5,7 @@
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.2.0.BUILD-SNAPSHOT</version>
<version>2.2.0.JENKINS-SNAPSHOT</version>
<name>Spring Data JPA</name>
<description>Spring Data module for JPA repositories.</description>
@@ -131,6 +131,111 @@
</repository>
</repositories>
</profile>
<profile>
<id>snapshot</id>
<build>
<plugins>
<plugin>
<groupId>org.jfrog.buildinfo</groupId>
<artifactId>artifactory-maven-plugin</artifactId>
<version>2.6.1</version>
<inherited>false</inherited>
<executions>
<execution>
<id>build-info</id>
<goals>
<goal>publish</goal>
</goals>
<configuration>
<buildInfo>
<buildUrl>{{BUILD_URL}}</buildUrl>
</buildInfo>
<deployProperties>
<zip.name>spring-data-jpa</zip.name>
<zip.displayname>spring-data-jpa</zip.displayname>
<zip.deployed>false</zip.deployed>
<archives>*:*:*:*@zip</archives>
</deployProperties>
<publisher>
<contextUrl>https://repo.spring.io</contextUrl>
<username>{{USERNAME}}</username>
<password>{{PASSWORD}}</password>
<repoKey>libs-snapshot-local</repoKey>
<snapshotRepoKey>libs-snapshot-local</snapshotRepoKey>
</publisher>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>docs</id>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>copy-schemas</id>
<phase>prepare-package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<copy todir="${project.build.directory}/site/schemas">
<fileset dir="${project.build.directory}/schemas"/>
</copy>
</target>
</configuration>
</execution>
<execution>
<id>package-and-attach-docs-zip</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<zip destfile="${project.build.directory}/${project.artifactId}-${project.version}.zip">
<fileset dir="${project.build.directory}/site"/>
</zip>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.10</version>
<executions>
<execution>
<id>attach-zip</id>
<goals>
<goal>attach-artifact</goal>
</goals>
<phase>package</phase>
<configuration>
<artifacts>
<artifact>
<file>${project.build.directory}/${project.artifactId}-${project.version}.zip</file>
<type>zip</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release</id>
<build>
@@ -138,6 +243,7 @@
<plugin>
<groupId>org.jfrog.buildinfo</groupId>
<artifactId>artifactory-maven-plugin</artifactId>
<version>2.6.1</version>
<inherited>false</inherited>
</plugin>
</plugins>
@@ -459,10 +565,6 @@
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>wagon-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.asciidoctor</groupId>
<artifactId>asciidoctor-maven-plugin</artifactId>