Browse Source

DATAJDBC-376 - Introduce Jenkins.

pull/155/head
Greg Turnquist 7 years ago
parent
commit
0baba7ffe9
No known key found for this signature in database
GPG Key ID: CB2FA4D512B5C413
  1. 86
      Jenkinsfile
  2. 29
      README.adoc
  3. 15
      ci/build.sh
  4. 20
      ci/build.yml
  5. 11
      ci/test.sh
  6. 20
      ci/test.yml
  7. 77
      pom.xml

86
Jenkinsfile vendored

@ -0,0 +1,86 @@ @@ -0,0 +1,86 @@
pipeline {
agent none
triggers {
pollSCM 'H/10 * * * *'
upstream(upstreamProjects: "spring-data-commons/master", threshold: hudson.model.Result.SUCCESS)
}
options {
disableConcurrentBuilds()
}
stages {
stage("Test") {
parallel {
stage("test: baseline") {
agent {
docker {
label 'data'
image 'adoptopenjdk/openjdk8:latest'
args '-u root -v /var/run/docker.sock:/var/run/docker.sock' // root but with no maven caching
}
}
steps {
sh "./mvnw -Pci,all-dbs clean dependency:list test -Dsort -B"
sh "chown -R 1001:1001 target"
}
}
}
}
stage('Release to artifactory') {
when {
branch 'issue/*'
}
agent {
docker {
image 'adoptopenjdk/openjdk8:latest'
args '-v $HOME/.m2:/root/.m2'
}
}
environment {
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
}
steps {
sh "./mvnw -Pci,snapshot clean deploy -Dmaven.test.skip=true -B"
}
}
stage('Release to artifactory with docs') {
when {
branch 'test'
}
agent {
docker {
image 'adoptopenjdk/openjdk8:latest'
args '-v $HOME/.m2:/root/.m2'
}
}
environment {
ARTIFACTORY = credentials('02bd1690-b54f-4c9f-819d-a77cb7a9822c')
}
steps {
sh "./mvnw -Pci,snapshot clean deploy -Dmaven.test.skip=true -B"
}
}
}
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>")
}
}
}
}

29
README.adoc

@ -1,6 +1,9 @@ @@ -1,6 +1,9 @@
image:https://spring.io/badges/spring-data-jdbc/ga.svg["Spring Data JDBC", link="https://spring.io/projects/spring-data-jdbc#learn"]
image:https://spring.io/badges/spring-data-jdbc/snapshot.svg["Spring Data JDBC", link="https://spring.io/projects/spring-data-jdbc#learn"]
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-jdbc%2Fmaster&subject=Moore%20(master)["Spring Data JDBC", link="https://jenkins.spring.io/view/SpringData/job/spring-data-jdbc/"]
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-jdbc%2F1.0.x&subject=Lovelace%20(1.0.x)["Spring Data JDBC", link="https://jenkins.spring.io/view/SpringData/job/spring-data-jdbc/"]
= Spring Data Relational
The primary goal of the https://projects.spring.io/spring-data[Spring Data] project is to make it easier to build Spring-powered applications that use data access technologies. *Spring Data Relational* offers the popular Repository abstraction based on link:spring-data-jdbc[JDBC].
@ -100,6 +103,32 @@ $ mvn test -Pall-dbs @@ -100,6 +103,32 @@ $ mvn test -Pall-dbs
This will execute the unit tests, and all the integration tests with all the databases we currently support for testing. Running the integration-tests depends on Docker.
== 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-jdbc-github -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock adoptopenjdk/openjdk8:latest /bin/bash`
+
This will launch the Docker image and mount your source code at `spring-data-jdbc-github`.
+
2. `cd spring-data-jdbc-github`
+
Next, test everything from inside the container:
+
3. `./mvnw -Pci,all-dbs clean dependency:list test -Dsort -B` (or whatever test configuration you must use)
Since the container is binding to your source, you can make edits from your IDE and continue to run build jobs.
NOTE: Docker containers can eat up disk space fast! From time to time, run `docker system prune` to clean out old images.
== Contributing to Spring Data Relational
Here are some ways for you to get involved in the community:

15
ci/build.sh

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
#!/usr/bin/env bash
set -euo pipefail
[[ -d $PWD/maven && ! -d $HOME/.m2 ]] && ln -s $PWD/maven $HOME/.m2
spring_data_jdbc_artifactory=$(pwd)/spring-data-jdbc-artifactory
rm -rf $HOME/.m2/repository/org/springframework/data 2> /dev/null || :
cd spring-data-jdbc-github
./mvnw deploy \
-Dmaven.test.skip=true \
-DaltDeploymentRepository=distribution::default::file://${spring_data_jdbc_artifactory}

20
ci/build.yml

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

11
ci/test.sh

@ -1,11 +0,0 @@ @@ -1,11 +0,0 @@
#!/bin/bash -x
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-jdbc-github
./mvnw clean dependency:list test -Dsort -U -P${PROFILE}

20
ci/test.yml

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

77
pom.xml

@ -70,6 +70,47 @@ @@ -70,6 +70,47 @@
</developers>
<profiles>
<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-jdbc</zip.name>
<zip.displayname>spring-data-jdbc</zip.displayname>
<zip.deployed>false</zip.deployed>
<archives>*:*:*:*@zip</archives>
</deployProperties>
<publisher>
<contextUrl>https://repo.spring.io</contextUrl>
<username>{{ARTIFACTORY_USR}}</username>
<password>{{ARTIFACTORY_PSW}}</password>
<repoKey>libs-snapshot-local</repoKey>
<snapshotRepoKey>libs-snapshot-local</snapshotRepoKey>
</publisher>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release</id>
<build>
@ -167,24 +208,24 @@ @@ -167,24 +208,24 @@
</systemPropertyVariables>
</configuration>
</execution>
<execution>
<id>mssql-test</id>
<phase>test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<includes>
<include>**/*IntegrationTests.java</include>
</includes>
<excludes>
<exclude>**/*HsqlIntegrationTests.java</exclude>
</excludes>
<systemPropertyVariables>
<spring.profiles.active>mssql</spring.profiles.active>
</systemPropertyVariables>
</configuration>
</execution>
<!--<execution>-->
<!--<id>mssql-test</id>-->
<!--<phase>test</phase>-->
<!--<goals>-->
<!--<goal>test</goal>-->
<!--</goals>-->
<!--<configuration>-->
<!--<includes>-->
<!--<include>**/*IntegrationTests.java</include>-->
<!--</includes>-->
<!--<excludes>-->
<!--<exclude>**/*HsqlIntegrationTests.java</exclude>-->
<!--</excludes>-->
<!--<systemPropertyVariables>-->
<!--<spring.profiles.active>mssql</spring.profiles.active>-->
<!--</systemPropertyVariables>-->
<!--</configuration>-->
<!--</execution>-->
</executions>
</plugin>
</plugins>

Loading…
Cancel
Save