From b8132b2a68fc73766923ed12ff5880b9f64592fd Mon Sep 17 00:00:00 2001 From: Josral04 Date: Sun, 16 Mar 2025 20:02:14 -0600 Subject: [PATCH 01/16] Add files via upload Read Me File --- Description.md | 108 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 Description.md diff --git a/Description.md b/Description.md new file mode 100644 index 00000000..1afc653a --- /dev/null +++ b/Description.md @@ -0,0 +1,108 @@ +# ENSF 400 - Winter 2025 - Course Project + +## Project Overview + +In this project, you will work based on a software project by incorporating/extending a complete CI/CD (Continuous Integration/Continuous Deployment) pipeline. This is based on an open-source sample application: https://github.com/7ep/demo + +This project can also be any application that requires the project of build, test, and deployment. +You will leverage GitHub for source control, Docker for containerizing your application, and a CI/CD tool (Jenkins) to automate the build, testing, and verification process. The goal is to validate every code change automatically through container builds, unit tests, code quality checks, and end-to-end functional tests. + + +## Project Requirements + +By the end of this project, your group must deliver the following: + +1. Manage your project on GitHub and follow proper Git workflows (branching, pull requests, code reviews). Document the process of how you use Git workflows to collaborate with your team members. + +1. Containerize your application for builds and deployments. Upload and download your container images to a public or private image repository (e.g., Docker Hub or GitHub Container Registry). Ensure a container image is built with unique build tag(s) matching the triggering commit from any branch. + +1. Set up an automated CI/CD with Jenkins in a Codespace environment. Configure the pipeline to trigger upon pull requests merging changes into the main branch. + +1. Document the CI/CD process and provide clear instructions on replicating your environment. Submit a video demo at the end of the project. + +### Existing Pipelines +You will also demonstrate the delivery of the following process and artifacts that come with the project. + +1. Run static analysis quality-gating using SonarQube +1. Performance testing with Jmeter +1. Security analysis with OWASP's "DependencyCheck" +1. Build Javadocs + + +## Evaluation Criteria + +Your project will be assessed on the following criteria: + +### GitHub Repository & Git Workflow (15%) +1. Project on GitHub in a public repository with all team members participating in the development and maintenance of the project (5%). +1. Demonstrate the process practicing Git workflows (branching, pull requests, code reviews) (10%). + +### Containerization (20%) +1. Dockerfile to containerize the project (5%). +1. Use of container image repository to upload and download images (5%). +1. Effective tagging mechanism for each building matching the commits/branches/pull requests (10%). + +### CI/CD Pipeline Automation (40%) +1. Jenkins integration with GitHub in Codespace (10%). +1. Triggering automated checks upon pull request to the main branch (10%). +1. Deployment process to automatically deploy the application in the Codespace environment upon a build (10%). +1. Be able to run items 5-8 in **Existing Pipelines** (10%). + +### Testing & Code Quality (10%) +1. Generate test coverage reports upon each automated build (5%). +1. Generate code quality report using SonarQube reports upon each automated build (5%). + +### Documentation & Demo (15%) +1. Clarity and completeness of README and other documentation. The documentation must demonstrate the team’s collaboration process (5%). +1. Demonstration video with a length not exceeding 10 minutes, showing a clear understanding of the pipeline and its benefits. The documentation must demonstrate the team’s collaboration process (10%). + +_______________________________________________________________________________________________________________________________________________________________________________________________________________ + +# Organization of our ENSF 400 CI/CD Project + +## Team Members +- Josral Frederick UCID: 30195360 +- Muhammad Aun Raza UCID: 30172183 +- Natnael Tekli UCID: 30171167 +- Jaden Chow UCID: 30173676 + + +## Project Description +The main objective in this project is to create software that incorporates/extends a complete CI/CD +(Continuous Integration/Continuous Deployment) pipeline. + +## Git Workflow +- **Branching Strategy**: +We will use a Feature Branching Strategy, where each new feature or bug fix is developed in its own branch. +- The main branch will be called ‘main' +- Development branches will follow the naming convention ‘feature/[feature-name]’ for features +- Finally ‘bugfix/[bug-name]’ for bug fixes. + +- **Pull Requests**: + Upon completion of a feature, developers will create a pull request (PR) from their `feature` branch + to the `main' branch. Each PR will contain a description of the changes made and link to any relevant issues. + The PR will be reviewed by at least one team member before merging. + +- **Code Reviews**: + The code review will take place within the Github interface. Each PR will be reviewed by atleast one team member before being merged to the main branch. The reviewer will + make sure the PR is in accordance with the project requirements and necessary discussions will take place within the request. + +## Containerization +- **Dockerfile**: + A Dockerfile is a set of instructions to automate the creation of a Docker Image. The Dockerfile helps containerize the application, ensuring it is built, tested and deployed. + This is done by packaging the application into a container, works with Kubernetes and enables automation in the CI/CD pipeline. + +- **Image Repository**: Instructions for pushing/pulling images and how tagging works. +Container images will be pushed to **Docker Hub**. To push an image, use the following command: + ```bash + docker push /task-manager-app: + +## CI/CD Setup +- **Jenkins Configuration**: Explain the integration with GitHub and how the pipeline is set up. + +## Running the Project +Instructions for running the application locally, including prerequisites. + +## Testing +- **Testing Framework**: Briefly describe tools used for testing. +- **Code Quality Reports**: Link to generated SonarQube reports. From 61d5faea1e35d6a6fe9fb72841d268172c08934d Mon Sep 17 00:00:00 2001 From: Jaden Chow Date: Sun, 16 Mar 2025 20:04:11 -0600 Subject: [PATCH 02/16] Fixed BDD_video.mp4 bug fix with change committed --- docs/BDD_video.mp4 | Bin 12191007 -> 12191004 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/BDD_video.mp4 b/docs/BDD_video.mp4 index 27c4646cf01956f75756fca4569d3aedbc1417d6..571239ede95cfe30e98aab42f099e7dc7eba9064 100644 GIT binary patch delta 665 zcmWN=*;$oTM0_k9wjMRd$n&N#bVm6W(xQ701wha zD-ZE7Q+b4GOlJl&d6dVP#cbyAI8X2-b9st+Jk2va%X2)>d|qGyFY*!#S;S(Nu#{yi z=Ve}D1+TKwu$ooQ5WCw|Ww>3{|GeyurD|T|b=L3(Ygxy7-sCOb<{dWhF7L6C_u0f| zK41%5`H+wJm`~Wor?l}I+xeVg2Vc<6m+WL0yV=8D_VE?_`I>L|mhbqU1N^{24snGpG55U-^yS`GY?>!(W`GgTFb)Kb+?Rom`~BzlLMUY=~b5bj@Sp delta 671 zcmWO1*)|ja0Eh827)vOHqD7I&(qgGbo61fhlvF~9HcM2tGV*7bN~J7ig!UMfqG_&r z2Y2%Z-OM}mUHs1ZZaLbXww z6sB-())sBmHbrQ=b|_L&+No&mQjB7?TXBk4f)ceyd$mvdm84{)ET@{BhCqwSnTi8A zh(ji!EK`F{`4(Cyh3#hf5QbsJV?4oAjNlob;{`_X60b0ZaZF$m zuki*`uwfc+F@ssm;T_)N13uytKI03%Vjc^yV-er*9Y3&ypZJAktl&2s_~Wp Date: Sun, 16 Mar 2025 20:08:01 -0600 Subject: [PATCH 03/16] Update Description.md Remove Testing --- Description.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/Description.md b/Description.md index 1afc653a..b651971e 100644 --- a/Description.md +++ b/Description.md @@ -103,6 +103,3 @@ Container images will be pushed to **Docker Hub**. To push an image, use the fol ## Running the Project Instructions for running the application locally, including prerequisites. -## Testing -- **Testing Framework**: Briefly describe tools used for testing. -- **Code Quality Reports**: Link to generated SonarQube reports. From 9ff342261b3bd7863ff7510f31c134b0a5fb1a89 Mon Sep 17 00:00:00 2001 From: Natnael Tekli Date: Sun, 16 Mar 2025 20:18:05 -0600 Subject: [PATCH 04/16] updated the file --- Description.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Description.md b/Description.md index b651971e..6b2b7489 100644 --- a/Description.md +++ b/Description.md @@ -103,3 +103,11 @@ Container images will be pushed to **Docker Hub**. To push an image, use the fol ## Running the Project Instructions for running the application locally, including prerequisites. + + + +Instructions for running the application locally, including prerequisites. + +## Testing +- **Testing Framework**: Briefly describe tools used for testing. +- **Code Quality Reports**: Link to generated SonarQube reports. From ea22cd5885e0569e233d86b7663fdcec284d7fc9 Mon Sep 17 00:00:00 2001 From: Jaden Chow Date: Sun, 16 Mar 2025 20:26:53 -0600 Subject: [PATCH 05/16] Updated Testing Description Added brief description --- Description.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Description.md b/Description.md index 6b2b7489..045f8397 100644 --- a/Description.md +++ b/Description.md @@ -110,4 +110,6 @@ Instructions for running the application locally, including prerequisites. ## Testing - **Testing Framework**: Briefly describe tools used for testing. + We have access to automated testing tools integrated into the CI/CD pipeline (Jenkins), these will help with unit, integration, security, and performance + - **Code Quality Reports**: Link to generated SonarQube reports. From 25d2cfda524a9ff4c7bebe2c2dfce01e13f1a30e Mon Sep 17 00:00:00 2001 From: Josral04 Date: Mon, 17 Mar 2025 08:10:59 -0600 Subject: [PATCH 06/16] Rename Description.md to README(2).md --- Description.md => README(2).md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Description.md => README(2).md (100%) diff --git a/Description.md b/README(2).md similarity index 100% rename from Description.md rename to README(2).md From d6b59cc8654e2885305be720c6ab7fc4d0d11445 Mon Sep 17 00:00:00 2001 From: MAunRaza Date: Mon, 17 Mar 2025 12:48:33 -0600 Subject: [PATCH 07/16] Raza Update README(2).md --- README(2).md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README(2).md b/README(2).md index 045f8397..4e96506c 100644 --- a/README(2).md +++ b/README(2).md @@ -62,7 +62,7 @@ ________________________________________________________________________________ ## Team Members - Josral Frederick UCID: 30195360 -- Muhammad Aun Raza UCID: 30172183 +- Muhammad Aun Raza My UCID: 30172183 - Natnael Tekli UCID: 30171167 - Jaden Chow UCID: 30173676 From aca984eca56adb0f05ddadbc055da811607b28ea Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Mon, 17 Mar 2025 20:36:20 +0000 Subject: [PATCH 08/16] edited the readme file --- README(2).md | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/README(2).md b/README(2).md index 4e96506c..f02f294a 100644 --- a/README(2).md +++ b/README(2).md @@ -72,20 +72,24 @@ The main objective in this project is to create software that incorporates/exten (Continuous Integration/Continuous Deployment) pipeline. ## Git Workflow -- **Branching Strategy**: -We will use a Feature Branching Strategy, where each new feature or bug fix is developed in its own branch. -- The main branch will be called ‘main' -- Development branches will follow the naming convention ‘feature/[feature-name]’ for features -- Finally ‘bugfix/[bug-name]’ for bug fixes. - -- **Pull Requests**: - Upon completion of a feature, developers will create a pull request (PR) from their `feature` branch - to the `main' branch. Each PR will contain a description of the changes made and link to any relevant issues. - The PR will be reviewed by at least one team member before merging. - -- **Code Reviews**: - The code review will take place within the Github interface. Each PR will be reviewed by atleast one team member before being merged to the main branch. The reviewer will - make sure the PR is in accordance with the project requirements and necessary discussions will take place within the request. +Our team follows a structured Git workflow to manage our project efficiently on GitHub. + +We begin by cloning the repository using git clone . Before making changes, we create a new feature branch with git checkout -b feature/feature-name to keep our work organized. + +Once changes are made, we stage and commit them using git add . and git commit -m "Description of changes", ensuring clear commit messages. + +To keep our branch up-to-date, we sync it with the main branch by switching to main, pulling the latest changes (git pull origin main), and merging them into our feature branch (git merge main). If merge conflicts arise, we resolve them before proceeding. + +After finalizing our changes, we push our branch to the remote repository using git push origin feature/feature-name. We then open a Pull Request (PR) on GitHub, providing a description of our modifications. + +Team members participate in a code review process, leaving feedback and suggesting necessary improvements. Once approved, the PR is merged into main, typically by a team lead or someone with write access. + +After merging, we delete the feature branch both locally (git branch -d feature/feature-name) and remotely (git push origin --delete feature/feature-name). To stay updated, we sync our local repository with the latest changes using git pull origin main. + +We follow GitFlow best practices, using descriptive branch names (e.g., feature/login-page, bugfix/error-handling) and ensuring every change is reviewed via a PR before merging into main. +External contributors fork the repository, create a new branch, make their changes, and open a PR to contribute to the project. + +This workflow ensures a structured and collaborative development process, keeping our codebase clean and organized. ## Containerization - **Dockerfile**: @@ -97,19 +101,4 @@ Container images will be pushed to **Docker Hub**. To push an image, use the fol ```bash docker push /task-manager-app: -## CI/CD Setup -- **Jenkins Configuration**: Explain the integration with GitHub and how the pipeline is set up. - -## Running the Project -Instructions for running the application locally, including prerequisites. - - - - -Instructions for running the application locally, including prerequisites. -## Testing -- **Testing Framework**: Briefly describe tools used for testing. - We have access to automated testing tools integrated into the CI/CD pipeline (Jenkins), these will help with unit, integration, security, and performance - -- **Code Quality Reports**: Link to generated SonarQube reports. From 54706be1c087f5a5c59aeba3c5564b3da24f95de Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Mon, 17 Mar 2025 14:50:09 -0600 Subject: [PATCH 09/16] Create dockerfile --- dockerfile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 dockerfile diff --git a/dockerfile b/dockerfile new file mode 100644 index 00000000..979f4136 --- /dev/null +++ b/dockerfile @@ -0,0 +1,6 @@ +FROM gradle:7.6.1-jdk11 +WORKDIR /ensf400-demo +COPY . . +RUN ./gradlew build +EXPOSE 8080 +CMD ["gradle", "appRun"] From bab5c7038c53b5e7da3ab11a19e6bb16359a15eb Mon Sep 17 00:00:00 2001 From: Josral04 Date: Mon, 17 Mar 2025 15:16:57 -0600 Subject: [PATCH 10/16] Update build.gradle --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index ff7b120e..06d04e4c 100644 --- a/build.gradle +++ b/build.gradle @@ -15,7 +15,7 @@ plugins { // gretty is a gradle plugin to make it easy to run a server and hotswap code at runtime. // https://plugins.gradle.org/plugin/org.gretty - id 'org.gretty' version '3.0.4' + id 'org.gretty' version '3.1.5' // provides access to a database versioning tool. id "org.flywaydb.flyway" version "6.0.8" From 08ac2fb8149e22cd5b24af0cd401bc4b27579585 Mon Sep 17 00:00:00 2001 From: Natnael Tekli Date: Mon, 17 Mar 2025 22:16:14 -0600 Subject: [PATCH 11/16] edited the readme file --- README(2).md | 49 ++++++++++--------------------------------------- 1 file changed, 10 insertions(+), 39 deletions(-) diff --git a/README(2).md b/README(2).md index f02f294a..96a3ab31 100644 --- a/README(2).md +++ b/README(2).md @@ -21,52 +21,25 @@ By the end of this project, your group must deliver the following: 1. Document the CI/CD process and provide clear instructions on replicating your environment. Submit a video demo at the end of the project. ### Existing Pipelines + You will also demonstrate the delivery of the following process and artifacts that come with the project. 1. Run static analysis quality-gating using SonarQube 1. Performance testing with Jmeter 1. Security analysis with OWASP's "DependencyCheck" 1. Build Javadocs - - -## Evaluation Criteria - -Your project will be assessed on the following criteria: - -### GitHub Repository & Git Workflow (15%) -1. Project on GitHub in a public repository with all team members participating in the development and maintenance of the project (5%). -1. Demonstrate the process practicing Git workflows (branching, pull requests, code reviews) (10%). - -### Containerization (20%) -1. Dockerfile to containerize the project (5%). -1. Use of container image repository to upload and download images (5%). -1. Effective tagging mechanism for each building matching the commits/branches/pull requests (10%). - -### CI/CD Pipeline Automation (40%) -1. Jenkins integration with GitHub in Codespace (10%). -1. Triggering automated checks upon pull request to the main branch (10%). -1. Deployment process to automatically deploy the application in the Codespace environment upon a build (10%). -1. Be able to run items 5-8 in **Existing Pipelines** (10%). - -### Testing & Code Quality (10%) -1. Generate test coverage reports upon each automated build (5%). -1. Generate code quality report using SonarQube reports upon each automated build (5%). - -### Documentation & Demo (15%) -1. Clarity and completeness of README and other documentation. The documentation must demonstrate the team’s collaboration process (5%). -1. Demonstration video with a length not exceeding 10 minutes, showing a clear understanding of the pipeline and its benefits. The documentation must demonstrate the team’s collaboration process (10%). - -_______________________________________________________________________________________________________________________________________________________________________________________________________________ +___________________________________________________________________________________________________________________________________________________ # Organization of our ENSF 400 CI/CD Project +___________________________________________________________________________________________________________________________________________________ ## Team Members + - Josral Frederick UCID: 30195360 - Muhammad Aun Raza My UCID: 30172183 - Natnael Tekli UCID: 30171167 - Jaden Chow UCID: 30173676 - ## Project Description The main objective in this project is to create software that incorporates/extends a complete CI/CD (Continuous Integration/Continuous Deployment) pipeline. @@ -92,13 +65,11 @@ External contributors fork the repository, create a new branch, make their chang This workflow ensures a structured and collaborative development process, keeping our codebase clean and organized. ## Containerization -- **Dockerfile**: - A Dockerfile is a set of instructions to automate the creation of a Docker Image. The Dockerfile helps containerize the application, ensuring it is built, tested and deployed. - This is done by packaging the application into a container, works with Kubernetes and enables automation in the CI/CD pipeline. - -- **Image Repository**: Instructions for pushing/pulling images and how tagging works. -Container images will be pushed to **Docker Hub**. To push an image, use the following command: - ```bash - docker push /task-manager-app: + +To containerize our application, we use Docker and Docker Hub. After creating and reviewing the Dockerfile as a team, we build the Docker image with a unique tag matching the commit hash or branch name. This ensures traceability by linking each image to the exact code version it was built from. We generate the commit hash using COMMIT_HASH=$(git rev-parse --short HEAD), build the image with docker build -t natnaelt2/ensf400-demo:$COMMIT_HASH ., and push it to Docker Hub using docker push natnaelt2/ensf400-demo:$COMMIT_HASH. This process guarantees consistency and simplifies tracking across deployments. + +To deploy the application, we pull the Docker image from Docker Hub using the command docker pull natnaelt2/ensf400-demo:commit-hash. Finally, we run the Docker container using the command docker run -p 8080:8080 natnaelt2/ensf400-demo:commit-hash. Then visit the application with your browser at http://localhost:8080/demo. + + From 73ea0d2b2fe1ebaf7e446c05f8a84108e5e003ea Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Mon, 17 Mar 2025 22:20:11 -0600 Subject: [PATCH 12/16] Update README(2).md --- README(2).md | 1 - 1 file changed, 1 deletion(-) diff --git a/README(2).md b/README(2).md index 96a3ab31..49dc444e 100644 --- a/README(2).md +++ b/README(2).md @@ -31,7 +31,6 @@ You will also demonstrate the delivery of the following process and artifacts th ___________________________________________________________________________________________________________________________________________________ # Organization of our ENSF 400 CI/CD Project -___________________________________________________________________________________________________________________________________________________ ## Team Members From ba30de5520323ac7781996a68e60aad2f8434fb8 Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Sat, 12 Apr 2025 02:11:18 +0000 Subject: [PATCH 13/16] added the jenkins dockerfile --- .gitignore | 1 + jenkins/Dockerfile | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 jenkins/Dockerfile diff --git a/.gitignore b/.gitignore index 09eb20a6..203c70d8 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,4 @@ node_modules/ .classpath .project .settings/ +jenkins/jenkins_home/ diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile new file mode 100644 index 00000000..f7c8d5e6 --- /dev/null +++ b/jenkins/Dockerfile @@ -0,0 +1,21 @@ +FROM jenkins/jenkins:alpine +USER root +RUN apk add --update docker openrc + +RUN apk add --no-cache \ + openjdk11 \ + bash \ + docker \ + curl \ + unzip +ENV GRADLE_VERSION=7.6 +ENV GRADLE_HOME=/opt/gradle + +RUN mkdir -p ${GRADLE_HOME} && \ + curl -fsSL https://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip -o /tmp/gradle.zip && \ + unzip /tmp/gradle.zip -d /opt/gradle && \ + rm /tmp/gradle.zip + +ENV PATH="${GRADLE_HOME}/gradle-${GRADLE_VERSION}/bin:${PATH}" + +RUN gradle -v \ No newline at end of file From fc3a8ea15d54c90ebfabffbb3583c46e852ca0e2 Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Sat, 12 Apr 2025 02:23:58 +0000 Subject: [PATCH 14/16] added the jenkins dockerfile --- jenkins/Dockerfile | 1 - 1 file changed, 1 deletion(-) diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile index f7c8d5e6..69f2cc8b 100644 --- a/jenkins/Dockerfile +++ b/jenkins/Dockerfile @@ -17,5 +17,4 @@ RUN mkdir -p ${GRADLE_HOME} && \ rm /tmp/gradle.zip ENV PATH="${GRADLE_HOME}/gradle-${GRADLE_VERSION}/bin:${PATH}" - RUN gradle -v \ No newline at end of file From 7876866c444c1feff03194072ab9355c7c5d3c0f Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Sat, 12 Apr 2025 02:30:35 +0000 Subject: [PATCH 15/16] added the jenkins dockerfile --- jenkins/Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/jenkins/Dockerfile b/jenkins/Dockerfile index 69f2cc8b..92ab4204 100644 --- a/jenkins/Dockerfile +++ b/jenkins/Dockerfile @@ -1,5 +1,6 @@ FROM jenkins/jenkins:alpine USER root + RUN apk add --update docker openrc RUN apk add --no-cache \ From 19f953aca6b2b13ebbae2651f6ae9367fbba7fb7 Mon Sep 17 00:00:00 2001 From: NatnaelTekli Date: Sat, 12 Apr 2025 02:58:39 +0000 Subject: [PATCH 16/16] created the docker-compose file --- docker-compose.yaml | 50 +++++++++++++++++++++++++++++++++ jenkins/Jenkinsfile | 68 +++++++++++++++++++++++---------------------- 2 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 docker-compose.yaml diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 00000000..b09d4254 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,50 @@ +services: + jenkins: + build: ./jenkins + privileged: true + user: root + ports: + - 8081:8080 + - 50000:50000 + container_name: jenkins + volumes: + - /home/codespace:/var/jenkins_home + - /var/run/docker.sock:/var/run/docker.sock + networks: + - dev-network + depends_on: + - sonarqube + + sonarqube: + image: sonarqube:8.9-community + container_name: sonarqube + environment: + - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar + - SONARQUBE_JDBC_USERNAME=sonar + - SONARQUBE_JDBC_PASSWORD=sonar + ports: + - "9000:9000" + volumes: + - sonarqube_data:/opt/sonarqube/data + networks: + - dev-network + + db: + image: postgres:latest + container_name: sonar-db + environment: + - POSTGRES_USER=sonar + - POSTGRES_PASSWORD=sonar + - POSTGRES_DB=sonar + volumes: + - db_data:/var/lib/postgresql/data + networks: + - dev-network + +networks: + dev-network: + +volumes: + jenkins_home: + sonarqube_data: + db_data: diff --git a/jenkins/Jenkinsfile b/jenkins/Jenkinsfile index d37024fe..8acb9365 100644 --- a/jenkins/Jenkinsfile +++ b/jenkins/Jenkinsfile @@ -8,6 +8,9 @@ pipeline { // This is set so that the Python API tests will recognize it // and go through the Zap proxy waiting at 9888 HTTP_PROXY = 'http://127.0.0.1:9888' + // Default Java Home for Jenkins (JDK 17) + JAVA_HOME = '/usr/lib/jvm/java-17-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" } stages { @@ -15,63 +18,62 @@ pipeline { // build the war file (the binary). This is the only // place that happens. stage('Build') { + environment { + // Override JAVA_HOME to use JDK 11 for this stage + JAVA_HOME = '/usr/lib/jvm/java-11-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" + } steps { sh './gradlew clean assemble' } - } - + @@ -23,6 +31,11 @@ pipeline { // run all the unit tests - these do not require anything else // to be running and most run very quickly. stage('Unit Tests') { + environment { + // Override JAVA_HOME to use JDK 11 for this stage + JAVA_HOME = '/usr/lib/jvm/java-11-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" + } steps { sh './gradlew test' } - post { - always { - junit 'build/test-results/test/*.xml' - } - } - } - + @@ -36,6 +49,11 @@ pipeline { // run the tests which require connection to a // running database. stage('Database Tests') { + environment { + // Override JAVA_HOME to use JDK 11 for this stage + JAVA_HOME = '/usr/lib/jvm/java-11-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" + } steps { sh './gradlew integrate' } - post { - always { - junit 'build/test-results/integrate/*.xml' - } - } - } - - // These are the Behavior Driven Development (BDD) tests + @@ -50,6 +68,11 @@ pipeline { // See the files in src/bdd_test // These tests do not require a running system. stage('BDD Tests') { + environment { + // Override JAVA_HOME to use JDK 11 for this stage + JAVA_HOME = '/usr/lib/jvm/java-11-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" + } steps { sh './gradlew generateCucumberReports' // generate the code coverage report for jacoco - sh './gradlew jacocoTestReport' - } - post { - always { - junit 'build/test-results/bdd/*.xml' - } - } - } - + @@ -65,147 +88,15 @@ pipeline { // Runs an analysis of the code, looking for any // patterns that suggest potential bugs. stage('Static Analysis') { - steps { - sh './gradlew sonarqube' - // wait for sonarqube to finish its analysis - sleep 5 - sh './gradlew checkQualityGate' - } - } + environment { + // Override JAVA_HOME to use JDK 11 for this stage + JAVA_HOME = '/usr/lib/jvm/java-11-openjdk' + PATH = "${JAVA_HOME}/bin:${PATH}" + } + + steps{ + sh './gradlew sonarqube -Dsonar.host.url=http://sonarqube:9000 -Dsonar.login="admin" -Dsonar.password="ensf400"' // Move the binary over to the test environment and