= Continuous Integration

image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-commons%2F&subject=Moore%20(main)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-commons/]
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-commons%2F2.1.x&subject=Lovelace%20(2.1.x)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-commons/]
image:https://jenkins.spring.io/buildStatus/icon?job=spring-data-commons%2F1.13.x&subject=Ingalls%20(1.13.x)[link=https://jenkins.spring.io/view/SpringData/job/spring-data-commons/]

== 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 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-commons-github adoptopenjdk/openjdk8:latest /bin/bash`
+
This will launch the Docker image and mount your source code at `spring-data-commons-github`.
+
2. `cd spring-data-commons-github`
+
Next, run your tests from inside the container:
+
3. `./mvnw clean dependency:list test -Dsort` (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-commons-github adoptopenjdk/openjdk8:latest /bin/bash`
+
This will launch the Docker image and mount your source code at `spring-data-commons-github`.
+
2. `cd spring-data-commons-github`
+
Next, try to package everything up from inside the container:
+
3. `./mvnw -Pci,snapshot -Dmaven.test.skip=true clean deploy`

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.
