This repo is a CI/CD demo using Tekton Pipelines for continuous integration and Argo CD for continuous delivery on OpenShift which builds and deploys the Spring PetClinic sample Spring Boot application. This demo creates:
-
3 namespaces for CI/CD, DEV and PROD projects
-
1 Tekton pipeline for building the application image on every Git commit
-
Argo CD (login with OpenShift credentials)
-
Gitea git server (username/password:
gitea
/openshift
) -
Sonatype Nexus (username/password:
admin
/admin123
) -
SonarQube (username/password:
admin
/admin
) -
Git webhooks for triggering the CI pipeline
On every push to the spring-petclinic
git repository on Gitea git server, the following steps are executed within the Tekton pipeline:
-
Code is cloned from Gitea git server and the unit-tests are run
-
Unit tests are executed and in parallel the code is analyzed by SonarQube for anti-patterns, and a dependency report is generated
-
Application is packaged as a JAR and released to Sonatype Nexus snapshot repository
-
A container image is built in DEV environment using S2I, and pushed to OpenShift internal registry, and tagged with
spring-petclinic:[branch]-[commit-sha]
andspring-petclinic:latest
-
Kubernetes manifests are updated in the Git repository with the image digest that was built within the pipeline
-
A pull-requested is created on config repo for merging the image digest update into the STAGE environment
Argo CD continuously monitor the configurations stored in the Git repository and uses Kustomize to overlay environment specific configurations when deploying the application to DEV and STAGE environments.
-
Get an OpenShift cluster up and running
-
Install OpenShift Pipelines Operator
$ oc apply --kustomize github.com/cmcornejocrespo/openshift-pipelines-kustomization/openshift-pipelines-operator/base?ref=myauto
-
Install OpenShift GitOps Operator
$ oc apply --kustomize github.com/cmcornejocrespo/openshift-gitops-kustomization/gitops-operator/base?ref=myauto
-
Download OpenShift CLI and Tekton CLI
-
Deploy the demo
$ git clone https://github.com/cmcornejocrespo/openshift-cicd-demo
$ demo.sh install
-
Start the deploy pipeline by making a change in the
spring-petclinic
Git repository on Gitea, or run the following:
$ demo.sh start
-
Check pipeline run logs
$ tkn pipeline logs petclinic-build -L -f -n demo-cicd
-
Go to spring-petclinic Git repository in Gitea
-
Log into Gitea with username/password:
gitea
/openshift
-
Edit a file in the repository and commit to trigger the pipeline
-
Check the pipeline run logs in Dev Console or Tekton CLI:
$ tkn pipeline logs petclinic-build -L -f -n demo-cicd
-
Once the pipeline finishes successfully, the image reference in the
spring-petclinic-config/environments/dev
are updated with the new image digest and automatically deployed to the DEV environment by Argo CD. If Argo CD hasn’t polled the Git repo for changes yet, click on the "Refresh" button on the Argo CD application. -
Login into Argo CD dashboard and check the sync history of
dev-spring-petclinic
application to verify the recent deployment -
Go to the pull requests tab on
spring-petclinic-config
Git repository in Gitea and merge the pull-requested that is generated for promotion from DEV to STAGE
-
Check the sync history of
stage-spring-petclinic
application in Argo CD dashboard to verify the recent deployment to the staging environment. If Argo CD hasn’t polled the Git repo for changes yet, click on the "Refresh" button on the Argo CD application.