The repository contains an opinionated pipeline that will build and deploy - Github Webhook application.
All in all there are the following projects taking part in the whole
microservice setup for this demo.
If you want to just run the demo as far as possible using PCF Dev and Docker Compose
Below you can find optional steps needed to be taken when you want to customize the pipeline
settings.xmlfor Jenkins' master (you can skip this if you want to use our defaults)
You need to fork only these. That’s because only then will your user be able to tag and push the tag to repo.
git clone https://github.com/spring-cloud/spring-cloud-pipelines cd spring-cloud-pipelines/concourse ./setup_docker_compose.sh ./start.sh 192.168.99.100
setup_docker_compose.sh script should be executed once only to allow
generation of keys.
192.168.99.100 param is an example of an external URL of Concourse
(equal to Docker-Machine ip in this example).
Then Concourse will be running on port
8080 and Artifactory
git clone https://github.com/spring-cloud/spring-cloud-pipelines cd spring-cloud-pipelines/ ./tools/deploy-infra.sh
As a result both
stub runner repos will be cloned, built
and uploaded to Artifactory.
It’s more than likely that you’ll run out of resources when you reach stage step. Don’t worry! Keep calm and clear some apps from PCF Dev and continue.
You have to download and start PCF Dev. A link how to do it is available here.
The default credentials when using PCF Dev are:
username: user password: pass email: user org: pcfdev-org space: pcfdev-space api: api.local.pcfdev.io
You can start the PCF dev like this:
cf dev start
You’ll have to create 3 separate spaces (email admin, pass admin)
cf login -a https://api.local.pcfdev.io --skip-ssl-validation -u admin -p admin -o pcfdev-org cf create-space pcfdev-test cf set-space-role user pcfdev-org pcfdev-test SpaceDeveloper cf create-space pcfdev-stage cf set-space-role user pcfdev-org pcfdev-stage SpaceDeveloper cf create-space pcfdev-prod cf set-space-role user pcfdev-org pcfdev-prod SpaceDeveloper
You can also execute the
./tools/cf-helper.sh setup-spaces to do this.
You can click one of the icons (depending on your OS) to download
fly, which is the Concourse CLI. Once you’ve downloaded that (and maybe added to your PATH) you can run:
fly is properly installed then it should print out the version.
The repo comes with
credentials-sample.yml which is set up with sample data (most credentials) are set to be applicable for PCF Dev. Copy this file to a new file
credentials.yml (the file is added to .gitignore so don’t worry that you’ll push it with your passwords) and edit it as you wish. For our demo jus setup:
app-url- url pointing to your forked
github-private-key- your private key to clone / tag GitHub repos
repo-with-binaries- the IP is set to the defaults for Docker Machine. You should update it to point to your setup
If you don’t have a Docker Machine just execute
./whats_my_ip.sh script to
get an external IP that you can pass to your
repo-with-binaries instead of the default
Docker Machine IP.
Below you can see what environment variables are required by the scripts. To the right hand side you can see the default values for PCF Dev that we set in the
|Property Name||Property Description||Default value|
Additional options you would like to pass to the Maven / Gradle build
The URL to the CF Api for TEST env
The URL to the CF Api for STAGE env
The URL to the CF Api for PROD env
Name of the org for the test env
Name of the space for the test env
Name of the org for the stage env
Name of the space for the stage env
Name of the org for the prod env
Name of the space for the prod env
URL to repo with the deployed jars
The id of server from Maven settings.xml
Additional suffix for the route. In a shared environment the default routes can be already taken
How much memory should be used by the infra apps (Eureka, Stub Runner etc.)
The URL to the Java buildpack to be used by CF
Log in (e.g. for Concourse running at
192.168.99.100 - if you don’t provide any value then
localhost is assumed). If you execute this script (it assumes that either
fly is on your
PATH or it’s in the same folder as the script is):
Next run the command to create the pipeline.
Then you’ll create a
github-webhook pipeline under the
docker alias, using the provided
You can override these values in exactly that order (e.g.
./set-pipeline.sh some-project another-target some-other-credentials.yml)
Figure 4.5. Unpause the pipeline by clicking in the top lefr corner and then clicking the
Not really. This is an
opinionated pipeline that’s why we took some
opinionated decisions like:
./mvnw clean deploy
stubrunner.idsproperty to retrieve list of collaborators for which stubs should be downloaded
For Gradle (in the
github-analytics application check the
deploytask for artifacts deployment
groupIdtask to retrieve group id
artifactIdtask to retrieve artifact id
currentVersiontask to retrieve the current version
stubIdstask to retrieve list of collaborators for which stubs should be downloaded
This is the initial approach that can be easily changed in the future.
Sure! It’s open-source! The important thing is that the core part of the logic is written in Bash scripts. That way, in the majority of cases, you could change only the bash scripts without changing the whole pipeline. You can check out the scripts here.
Furthermore, if you only want to customize a particular function under
common/src/main/bash, you can provide your own
common/src/main/bash/<some custom identifier> where
<some custom identifier> is equal to the value of
CUSTOM_SCRIPT_IDENTIFIER environment variable. For more on this technique, see
Override specific project type pipeline functions.
cf target -o pcfdev-org -s pcfdev-test cf stop github-webhook cf stop github-eureka cf stop stubrunner
You can also execute
./tools/cf-helper.sh kill-all-apps that will remove
all demo-related apps deployed to PCF dev.
You must have pushed some tags and have removed the Artifactory volume that contained them. To fix this, just remove the tags
git tag -l | xargs -n 1 git push --delete origin
Yes! Assuming that pieline name is
github-webhook and job name is
build-and-upload you can running
fly watch --job github-webhook/build-and-upload -t docker
Don’t worry… most likely you’ve just forgotten to click the
play button to
unpause the pipeline. Click to the top left, expand the list of pipelines and click
play button next to
Another problem that might occur is that you need to have the
Concourse will wait for the
version branch to appear in your repo. So in order for
the pipeline to start ensure that when doing some git operations you haven’t
forgotten to create / copy the
version branch too.
If you play around with Jenkins / Concourse you might end up with the routes occupied
Using route github-webhook-test.local.pcfdev.io Binding github-webhook-test.local.pcfdev.io to github-webhook... FAILED The route github-webhook-test.local.pcfdev.io is already in use.
Just delete the routes
yes | cf delete-route local.pcfdev.io -n github-webhook-test yes | cf delete-route local.pcfdev.io -n github-eureka-test yes | cf delete-route local.pcfdev.io -n stubrunner-test yes | cf delete-route local.pcfdev.io -n github-webhook-stage yes | cf delete-route local.pcfdev.io -n github-eureka-stage yes | cf delete-route local.pcfdev.io -n github-webhook-prod yes | cf delete-route local.pcfdev.io -n github-eureka-prod
You can also execute the
Most likely you’ve forgotten to update your local
settings.xml with the Artifactory’s
setup. Check out this section of the docs and update your