== Spring Session for MongoDB CI Spring Session for MongoDB uses Concourse as it's CI tool of choice. This provides support for: * Pipelines against the `master` and `2.0.x` branches * Support for pull requests === Creating a pipeline Using the `fly` command, you can execute a series of commands to create multiple pipelines to manage everything. But first, some critical credentials are needed. Create a `credentials.yml` file like this: [source,yml] ---- github-access-token: <your Personal Access Token from github> slack: <your slack hook URL> docker-email: <your docker hub email address> docker-username: <your docker hub username> docker-password: <your docker hub password> artifactory-username: <your artifactory username> artifactory-password: <your artifactory encoded password> ---- WARNING: Do NOT check this file into source control! If you'll check, `credentials.yml` is listed in `.gitignore` to prevent tihs. With this in place, run the following `fly` commands to create pipelines: ---- % fly -t spring-team sp -p spring-session-data-mongodb-2.0.x -c ci/pipeline-template.yml -l credentials.yml -v branch=2.0.x ---- With these pipelines in place, you can now activate and expose them: ---- % fly -t spring-team unpause-pipeline -p spring-session-data-mongodb-2.0.x % fly -t spring-team expose-pipeline -p spring-session-data-mongodb-2.0x ---- === Making a release 1. Create a new release (on the main branch). + ---- % ci/create-release.sh <release version> <next snapshot version> ---- + 2. With the release officially tagged, just push it to master. + ---- % git push ---- The pipeline will pick up the next tag and release it. It will also build a new snapshot and stage it on artifactory. === Running CI tasks locally Since Concourse is built on top of Docker, 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 Concourse 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-session-data-mongodb-github openjdk:8-jdk /bin/bash` + This will launch the Docker image and mount your source code at `spring-session-data-mongodb-github`. + Next, run the `test.sh` script from inside the container: + 2. `PROFILE=none spring-session-data-mongodb-github/ci/test.sh` 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, then do this: 1. `mkdir /tmp/spring-session-data-mongodb-artifactory` 2. `docker run -it --mount type=bind,source="$(pwd)",target=/spring-session-data-mongodb-github --mount type=bind,source="/tmp/spring-session-data-mongodb-artifactory",target=/spring-session-data-mongodb-artifactory openjdk:8-jdk /bin/bash` + This will launch the Docker image and mount your source code at `spring-session-data-mongodb-github` and the temporary artifactory output directory at `spring-session-data-mongodb-artifactory`. + Next, run the `build.sh` script from inside the container: + 3. `spring-session-data-mongodb-github/ci/build.sh` IMPORTANT: `build.sh` doesn't actually push to Artifactory so don't worry about accidentally deploying anything. It just deploys to a local folder. That way, the `artifactory-resource` later in the pipeline can pick up these artifacts and deliver them to artifactory. NOTE: Docker containers can eat up disk space fast! From time to time, run `docker system prune` to clean out old images.