From 60501c2ef3c8997a1c7795b6f9db0e119e89e643 Mon Sep 17 00:00:00 2001 From: Brendan Smiley <66867383+b-smiley@users.noreply.github.com> Date: Wed, 12 Mar 2025 08:58:59 -0600 Subject: [PATCH 01/17] Create README-G20.md --- README-G20.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 README-G20.md diff --git a/README-G20.md b/README-G20.md new file mode 100644 index 00000000..4596a868 --- /dev/null +++ b/README-G20.md @@ -0,0 +1,13 @@ +# CI-CD-Pipeline-Automation +ENSF 400 - Course Project + +## GitHub Repository & Git Workflow (15%) +❗ TODO ❗ +## Containerization (20%) +❗ TODO ❗ +## CI/CD Pipeline Automation (40%) +❗ TODO ❗ +## Testing & Code Quality (10%) +❗ TODO ❗ +## Documentation & Demo (15%) +❗ TODO ❗ From 4bb6e29631d01661d8d85617461f29877cc228fa Mon Sep 17 00:00:00 2001 From: Sachin <144852966+SuperSachinS@users.noreply.github.com> Date: Wed, 12 Mar 2025 09:13:33 -0600 Subject: [PATCH 02/17] Made addition to report document --- README-G20.md => REPORT-G20.md | 6 ++++++ docs/BDD_video.mp4 | Bin 12191007 -> 12191004 bytes 2 files changed, 6 insertions(+) rename README-G20.md => REPORT-G20.md (78%) diff --git a/README-G20.md b/REPORT-G20.md similarity index 78% rename from README-G20.md rename to REPORT-G20.md index 4596a868..af6d90d3 100644 --- a/README-G20.md +++ b/REPORT-G20.md @@ -1,6 +1,12 @@ # CI-CD-Pipeline-Automation ENSF 400 - Course Project +Team members: +- Sachin Seizer +- Matthew McDougall +- Brendan SMILEY +- Luca Rios + ## GitHub Repository & Git Workflow (15%) ❗ TODO ❗ ## Containerization (20%) 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: Wed, 12 Mar 2025 09:15:49 -0600 Subject: [PATCH 03/17] Extended report to complete part 1 of project check in --- REPORT-G20.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/REPORT-G20.md b/REPORT-G20.md index af6d90d3..d3f81df9 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -8,7 +8,8 @@ Team members: - Luca Rios ## GitHub Repository & Git Workflow (15%) -❗ TODO ❗ +For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. + ## Containerization (20%) ❗ TODO ❗ ## CI/CD Pipeline Automation (40%) From 7932d4196688f78ae3fd26bebc85abbb23f441d5 Mon Sep 17 00:00:00 2001 From: lujarios <144175748+Lujarios@users.noreply.github.com> Date: Wed, 12 Mar 2025 09:40:21 -0600 Subject: [PATCH 04/17] Add Sachin's PR to Report --- REPORT-G20.md | 5 +++++ report-media/PullRequest-Sachin.png | Bin 0 -> 185924 bytes 2 files changed, 5 insertions(+) create mode 100644 report-media/PullRequest-Sachin.png diff --git a/REPORT-G20.md b/REPORT-G20.md index d3f81df9..726bfe98 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -1,5 +1,6 @@ # CI-CD-Pipeline-Automation ENSF 400 - Course Project +Winter Semester 2025 Team members: - Sachin Seizer @@ -10,6 +11,10 @@ Team members: ## GitHub Repository & Git Workflow (15%) For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. +### Pull Request from @SuperSachinS + + + ## Containerization (20%) ❗ TODO ❗ ## CI/CD Pipeline Automation (40%) diff --git a/report-media/PullRequest-Sachin.png b/report-media/PullRequest-Sachin.png new file mode 100644 index 0000000000000000000000000000000000000000..cf551b0650af7876004a6739d666e7689b7adbbc GIT binary patch literal 185924 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

|-$VDJs$`K79^_q-q*|QxpSM6o`S<1gW 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

9EP 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

Ar!~JlZWuBBGrTg%0^|%tQl#s+kSGw zfRs1+S&wRk?wF6Nq*~D|m#r(OC@^Y`RP@ZwA(Yxv}6#9 zJ|49j_^9j_IoS@{$-ZX(qT3kNQ|S*J?%M|KOp?=rm#?=dEx&!hYwWBwrfvLmIPGd# z?jw+BD&UUWx>`!@jjXw#cZ@5$W}q%=E{b^V@@`(<=dC+1?m~zijHn+Dw;);B1=E`a zoI{L+P63Txoi}bZs2#r{xnbJ8_B8b&Lsjn%zx{+K&Y^k`eBeL<3681WXg+TD^RZAN zCWJ?XR+LcSg}ekC19pL#9m4lKPiMPxo0&wmf#JRF@#_v_rpD0kQvuz&k9 zZJ4gJ-uGvB1Wj7PW2&Ww^L^-Eh~ehybL%g(#>qE-FJmCi-zlaVPHXEjj8)~L@H!#L?HPI{@5Ty{sbuOfYxznj={ri!Ihp^76M#2 zv7yVjGT)73IfRYLxRYgAM*l*g&#@cB zVCg@h-WiSH3~O8RbA*mz>8Jf*G3Cc4@_6t~S*MC9j_YJ9|UAO*2+tsulBy2P!Cw95>i!QU15g^S41M*rO53Q9?e5l|7yj^aW z;?(!po#fza|I4+PDHr^@xW3nMBpE%%u0PJw&~$qE_D8t=v`Ac9(25hXp#S4MLTJ(g z%T25z%|(K=T*hWpF!b&=Jyxp2mPbhkCgZ#N+JU!UFK!E!Ivb(1ua0Vs;9mmElM4g( zJ&YHm6OCf8As*1Vj>eJYTwZiOmeN`WRk)4+Y!OPMmOkRR^`?QpwKL1iSY>5YdqutM zLjEPqrw#31)#-|3DB9>!5)*C&%hv;E|BJPQ@hVay6!kiOgdr%h|eh)nFHcBO3oVrR}hyBXYO z!+;{ZSm|c1Sx2VC+i|13o)CafX{JZS6G+GEoKmguZr`ju>h-Z)hp@+h*O#9o>H*~K zDOU&IkyDI5dfT&3wU6`n@a*sOMD1Dc;31+k`Zdb8tGr!QcRcMQ-5`x7@O~Mb&-76( zk+X8vDbNZhcRC6sT~gRF43f8L8-mYE)gE~Bg?3=33@hnw$ll{^BueYxliGK`dhbyV zI-p8jQG+p)FT-`@?hm-uaW`}t^TN>Ww1)A;rx139*p;3t3k!DY`e=;dUciPU6n?Hd z^62LRux+8>fmj8#QKm8q>-E$;SqaX9x)$(#w5^G+n6TpC9y=btg~O6lV^^U;ra-lq zI}=8h79mq?CDDGs;I>F-Kdv+8uTif5ZPg#kY_iU!T{$aBgZfcM5Y3Em?lbOw(pa_G zi$8Q-l|sJ*8|cl{hwsk5zuZEzBX*e|!r`gW+**;rIltaVgS7fXs04GOM~8>8h{Mgr z+2&UbUEi^UT!ahFOY+^iR^+I#sCM(_3AG;n889MH82+>+;NG?B7MZhIafbBoaEFWw z35L_})p%%B0(BYHmk1kOjMXA z#UHhwdW2&VeIvJfscE|S*2#4;K_3!*0VN>1f0Gsp>T8eisGV%lo&`Ic73rTNEu3cm zE$B=fc{%lu_Op^a&kz5j<#%~qz*qP`7j04}|1aI>zO?BmwAbH6UQaL5K5MVvMTUMQ z(i8L2%~jY^!8K3Fh#t+5X+zSlF93j8rT&`(u(HB{e42dqdM-UVoaS2^+&P=AlU*t% z^uOhOlFMT2Oe8Zpvj3@vjnSdo#wv$dQH?@al+KLykKss%|GW!sUNF%qS zrk0*G9OcJLw=6xvl!A`nf@bcv1x+)6o(k8icO@ zpG2A~tsN2x{l>J+KKqi@;5Qt(49P7G1c#&|eQk8_HUXmf?lbwdb7*ipuP$COw9%Bx zypH-0As@?iCKDi;6EZ_<(J}+WU&6P18de?9G?>>JySY>F!TK-c$6UygQ}0C=jY2ES z>5m;(Zd9WrJZLLF`1TGO{quQwCn&$>J{*^Ne+hrE_l(*@$Qu~iUN8swb{X2klQvmt zJ42>VOzpNtZe@cVNlK%ZIz68^<(usPV`cle{XM;m489K^JkjutQ_p)-Tt(lXG*(9Z nx1ExsGyYMk`u~*fbuZXS|B~P1a!&EzY}Hz7U{$Qjlb8PjC>mQv literal 0 HcmV?d00001 From 5668914cfc484190f984e6ecb039696b879277ad Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Wed, 12 Mar 2025 10:54:54 -0600 Subject: [PATCH 05/17] Fixed, Added: build.gradle, Dockerfile --- Dockerfile | 1 + REPORT-G20.md | 31 +++++++++++++++++++++++++------ build.gradle | 2 +- 3 files changed, 27 insertions(+), 7 deletions(-) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..f87f5c14 --- /dev/null +++ b/Dockerfile @@ -0,0 +1 @@ +# TODO \ No newline at end of file diff --git a/REPORT-G20.md b/REPORT-G20.md index d3f81df9..408fb085 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -1,20 +1,39 @@ # CI-CD-Pipeline-Automation + ENSF 400 - Course Project Team members: + - Sachin Seizer -- Matthew McDougall +- Matthew McDougall - Brendan SMILEY - Luca Rios +## Project Initialization + +1. Clone the repository + +2. Use Java JDK 11 + +3. Ensure gretty is 3.0.6 not 3.0.4 +4. Follow the remainder of the instructions in the README.md + ## GitHub Repository & Git Workflow (15%) -For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. + +For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. ## Containerization (20%) -❗ TODO ❗ + +❗ TODO ❗ + ## CI/CD Pipeline Automation (40%) -❗ TODO ❗ + +❗ TODO ❗ + ## Testing & Code Quality (10%) -❗ TODO ❗ + +❗ TODO ❗ + ## Documentation & Demo (15%) -❗ TODO ❗ + +❗ TODO ❗ diff --git a/build.gradle b/build.gradle index ff7b120e..c3bca485 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.0.6' // provides access to a database versioning tool. id "org.flywaydb.flyway" version "6.0.8" From 924c02ed5b464cb8e9286ce48a747e40ec2aeb10 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Thu, 13 Mar 2025 10:19:19 -0600 Subject: [PATCH 06/17] WIP: Dockerfile versioning fixes. The application runs but errors out on tomcat --- Dockerfile | 14 +++++++++++++- REPORT-G20.md | 8 ++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index f87f5c14..104d75e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1 +1,13 @@ -# TODO \ No newline at end of file +# Use the correct gradle jdk image to avoid versioning issues +FROM gradle:7.6-jdk11 + +# Make the working directory +RUN mkdir /home/app +WORKDIR /home/app +COPY . /home/app + + +EXPOSE 8080 + +# Start the application +CMD [ "./gradlew", "apprun" ] \ No newline at end of file diff --git a/REPORT-G20.md b/REPORT-G20.md index 408fb085..e7a8343f 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -24,6 +24,14 @@ For our github workflow, we created rules to ensure branch protections. Those ru ## Containerization (20%) +### Background/Development + +Below is the process taken to containerize the application: + +1. Created a Dockerfile +2. Build the Docker image using `docker build --tag 'ensf400-g20' .` +3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20` + ❗ TODO ❗ ## CI/CD Pipeline Automation (40%) From 88dbf799aeffc9a51352587c0bd1e8348a13ac59 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Sat, 15 Mar 2025 21:03:55 -0600 Subject: [PATCH 07/17] Mod: Gretty version to profs version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index c3bca485..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.6' + id 'org.gretty' version '3.1.5' // provides access to a database versioning tool. id "org.flywaydb.flyway" version "6.0.8" From 2792377d86cbc47d2c77bb55fa33b499c1102837 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Sat, 15 Mar 2025 21:05:26 -0600 Subject: [PATCH 08/17] Mod: docker img version --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 104d75e7..4315d623 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Use the correct gradle jdk image to avoid versioning issues -FROM gradle:7.6-jdk11 +FROM gradle:7.6.1-jdk11 # Make the working directory RUN mkdir /home/app From 935e36fe097d6e74c3221fc5f9d55c1694aeb26a Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Sat, 15 Mar 2025 23:21:54 -0600 Subject: [PATCH 09/17] Mod: Not functional, but added to README --- Dockerfile | 8 ++++---- REPORT-G20.md | 7 +++++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4315d623..34cce40a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ # Use the correct gradle jdk image to avoid versioning issues -FROM gradle:7.6.1-jdk11 +FROM gradle:7.6.4-jdk11 # Make the working directory RUN mkdir /home/app -WORKDIR /home/app COPY . /home/app +WORKDIR /home/app EXPOSE 8080 -# Start the application -CMD [ "./gradlew", "apprun" ] \ No newline at end of file +# Start the application, speed up the image build by excluding the daemon +CMD [ "gradle", "--no-daemon", "apprun"] \ No newline at end of file diff --git a/REPORT-G20.md b/REPORT-G20.md index e7a8343f..f3cc921c 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -24,7 +24,7 @@ For our github workflow, we created rules to ensure branch protections. Those ru ## Containerization (20%) -### Background/Development +### Background/Development/Usage Below is the process taken to containerize the application: @@ -32,7 +32,10 @@ Below is the process taken to containerize the application: 2. Build the Docker image using `docker build --tag 'ensf400-g20' .` 3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20` -❗ TODO ❗ +### Dockerfile + +The Dockerfile can be found [here](./Dockerfile) +As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. ## CI/CD Pipeline Automation (40%) From 0ce7c961d595376000f48b34d5cc38de56ca292a Mon Sep 17 00:00:00 2001 From: Sachin <144852966+SuperSachinS@users.noreply.github.com> Date: Sun, 16 Mar 2025 20:45:52 -0600 Subject: [PATCH 10/17] created compose file to run docker container --- docker-compose.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docker-compose.yml diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..4e4d74b9 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.8' + +services: + app: + build: . + container_name: my-gradle-app + ports: + - "8080:8080" + volumes: + - .:/home/app + working_dir: /home/app + command: ["./gradlew", "appRun"] + # so that the container doesn't immediately close after building + stdin_open: true + tty: true From 9a279eadc03bb3a96658454f1e11745482e9b316 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Sun, 16 Mar 2025 21:03:57 -0600 Subject: [PATCH 11/17] Added: Containerization notes --- REPORT-G20.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/REPORT-G20.md b/REPORT-G20.md index 51517c76..f651cde8 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -35,13 +35,23 @@ Below is the process taken to containerize the application: 1. Created a Dockerfile 2. Build the Docker image using `docker build --tag 'ensf400-g20' .` -3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20` +3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. instead. +4. Run `docker compose up` to start the application and keep it running. +5. Access the application at `http://localhost:8080/demo` ### Dockerfile The Dockerfile can be found [here](./Dockerfile) As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. +### Docker Compose + +The Docker Compose file can be found [here](./docker-compose.yml), this helps ensure that the containerization procedure will scale moving forward with the project. Additionally, we used the docker-compose.yml to ensure that the application did not immediately exit after starting up. + +### Docker Image on Docker Hub + +❗ TODO ❗ + ## CI/CD Pipeline Automation (40%) ❗ TODO ❗ From 1d257028d517d18af4d9410c19680c12c0482465 Mon Sep 17 00:00:00 2001 From: Matthew McDougall <144636483+mattmcdou@users.noreply.github.com> Date: Mon, 17 Mar 2025 14:20:49 -0600 Subject: [PATCH 12/17] add dockerhub link to report --- REPORT-G20.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/REPORT-G20.md b/REPORT-G20.md index f651cde8..7960b2d1 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -50,7 +50,7 @@ The Docker Compose file can be found [here](./docker-compose.yml), this helps en ### Docker Image on Docker Hub -❗ TODO ❗ +Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). ## CI/CD Pipeline Automation (40%) From 9940953b2faba6bbe4accc04cc549a8f0856d7c7 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Mon, 17 Mar 2025 14:58:01 -0600 Subject: [PATCH 13/17] Added: How to use docker image, specific command needed --- REPORT-G20.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/REPORT-G20.md b/REPORT-G20.md index 7960b2d1..fbfe7627 100644 --- a/REPORT-G20.md +++ b/REPORT-G20.md @@ -35,7 +35,7 @@ Below is the process taken to containerize the application: 1. Created a Dockerfile 2. Build the Docker image using `docker build --tag 'ensf400-g20' .` -3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. instead. +3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. 4. Run `docker compose up` to start the application and keep it running. 5. Access the application at `http://localhost:8080/demo` @@ -52,6 +52,18 @@ The Docker Compose file can be found [here](./docker-compose.yml), this helps en Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). +use the following command to pull the image: + +```bash +docker pull mattmcdou/ci-cd-pipeline-automation-app:latest +``` + +use the following command to run the container, and keep it open: + +```bash +docker run -it -p 8080:8080 mattmcdou/ci-cd-pipeline-automation-app:latest +``` + ## CI/CD Pipeline Automation (40%) ❗ TODO ❗ From 8d3a7b3b0a72f770dffd80f173d33986e878f87c Mon Sep 17 00:00:00 2001 From: lujarios <144175748+Lujarios@users.noreply.github.com> Date: Mon, 17 Mar 2025 15:22:57 -0600 Subject: [PATCH 14/17] README changes --- README-DEMO.md | 185 +++++++++++++++++++++++++++++++++++++++ README.md | 232 +++++++++++++------------------------------------ REPORT-G20.md | 77 ---------------- 3 files changed, 247 insertions(+), 247 deletions(-) create mode 100644 README-DEMO.md delete mode 100644 REPORT-G20.md diff --git a/README-DEMO.md b/README-DEMO.md new file mode 100644 index 00000000..cef0ff62 --- /dev/null +++ b/README-DEMO.md @@ -0,0 +1,185 @@ +## Demo - demonstrates an application and tests + +This is an application by [Coveros](https://www.coveros.com/) to demonstrate good +software practices. As we say in agile... _Working software over comprehensive +documentation_ ... but that doesn't mean we can't have pretty good documentation too. + +#### Quick Start: + +* Install [Java](https://www.java.com/en/download/) if you don't already have it. +* Clone or [download](https://github.com/7ep/demo/archive/master.zip) this repo. (if you download, unzip the file to a directory.) +* On the command line in the top directory of this repo, run `gradlew apprun` +* Visit the application with your browser at http://localhost:8080/demo + +#### Summary: + +Demo consists of a simple web application and tests. Its goal is to provide +an environment suitable for demonstration and practice in valuable development +techniques. Some of the techniques exemplified are: +* [Unit](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/authentication/RegistrationUtilsTests.java) [tests](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/library/LibraryUtilsTests.java) developed by [TDD](https://en.wikipedia.org/wiki/Test-driven_development) using [Junit](https://junit.org/junit5/) as a driver and [Mockito](https://site.mockito.org/) for mocks, with coverage reports. +* [UI tests](https://github.com/7ep/demo/blob/master/src/ui_tests/behave/features/librarian_ui.feature) using [multiple frameworks](https://github.com/7ep/demo/tree/master/src/ui_tests) +* [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) [tests](https://github.com/7ep/demo/blob/master/src/bdd_test/resources/library/check_out_a_book.feature) using gherkin + * [Cucumber](https://docs.cucumber.io/) tests, with reports + * [Behave](https://behave.readthedocs.io/en/latest/) UI tests that use [Selenium](https://www.selenium.dev/) web driver. +* [Integration tests](https://github.com/7ep/demo/blob/master/src/integration_test/java/com/coveros/training/persistence/PersistenceLayerTests.java) that test the [H2 database](https://www.h2database.com/html/main.html) +* [Database versioning](https://github.com/7ep/demo/blob/master/src/main/resources/db/migration/V2__Rest_of_tables_for_auth_and_library.sql), with [Flyway](https://flywaydb.org/) +* Security analysis using [DependencyCheck](https://www.owasp.org/index.php/OWASP_Dependency_Check) +* Hot-swap code with [Gretty](https://github.com/gretty-gradle-plugin/gretty) +* Enhanced type system using [Checker Framework](https://checkerframework.org/) +* See its [architecture](https://github.com/7ep/demo/blob/master/docs/dev_notes/architecture.txt) + + +Its essential goals: +* Just works, any platform. +* As simple as possible +* Minimal system requirements +* Fast and easy to install and to run +* High test coverage +* Multiple business domains +* Easy to maintain and improve +* Well documented +* High performance +* Illustrates maximum number of techniques +* Easy to get up to speed + +#### Table of contents: +1. [Optional dependencies](#optional-dependencies) +1. [Chromedriver installation notes](#chromedriver-installation-notes) +1. [Python installation notes](#python-installation-notes) +1. [To build and run tests](#to-build-and-run-tests) +1. [To run the application](#to-run-the-web-application) +1. [To run API and UI tests](#to-run-api-and-ui-tests) +1. [Summary of relevant Gradle commands](#summary-of-relevant-gradle-commands) +1. [The whole shebang - CI/CD pipeline](#the-whole-shebang---a-cicd-pipeline) + +###### Optional Dependencies +If you want API testing and Selenium testing, you will need +to visit these links and download / install the applications found there. +* [Python](https://www.python.org/downloads/) +* [Chromedriver](http://chromedriver.chromium.org/downloads) +* [Chrome internet browser](https://www.google.com/chrome/) + +--- + +#### Chromedriver installation notes +make sure that the [Chromedriver](https://chromedriver.chromium.org/) executable is installed in one of the directories that is +on your path. To see your path, type the following in a command line: + +on Windows: + + echo %PATH% + +On Mac/Linux: + + echo $PATH + +If you run the command, `chromedriver` on the command line, you should get a result similar to this: + + Starting ChromeDriver ... + +#### Python installation notes +Python can be downloaded [here](https://www.python.org/downloads/) + +To run API tests and Selenium tests, an easy way to handle its +dependencies is to use *pipenv*. To get this installed, first download +[get-pip.py](https://bootstrap.pypa.io/get-pip.py), and run the following on the command line: + + python get-pip.py + +Then, + + pip install pipenv + +And in the demo directory, + + pipenv install + +#### To build and run tests: +On the command line, run the following: + +On Mac/Linux + + ./gradlew check + +On Windows + + gradlew check + +#### To run the web application: +On the command line, run the following: + +On Mac/Linux + + ./gradlew apprun + +On Windows + + gradlew apprun + +Then, head to http://localhost:8080/demo + + +#### To run API and UI tests: +Note: The app has to be [already running](#to-run-the-web-application) for these tests to pass, and you _need_ +to have installed [Python] and [Chromedriver]. + +In a new terminal, separate from the one where the server is running, run the following: + +On Mac/Linux + + ./gradlew runAllTests + +On Windows + + gradlew runAllTests + +#### Summary of relevant Gradle commands +* gradlew coveros - show a cheat sheet of commands for Demo +* gradlew apprun - runs the application +* gradlew check - runs all tests possible with only dependency being Java 8. No need for app to be running. +* gradlew runAllTests - runs the whole set of tests** +* gradlew clean - cleans build products and installs pre-push hook. (see the file in this directory, pre-push) +* gradlew runBehaveTests - runs the UI tests** +* gradlew runApiTests - runs the API tests** +* gradlew generateCucumberReport - runs cucumber and creates a nice-looking HTML report +* gradlew pitest - runs mutation testing (see http://pitest.org/) +* gradlew dependencyCheckAnalyze - analyzes security reports for the dependencies of + this project. See https://www.owasp.org/index.php/OWASP_Dependency_Check +* gradlew sonarqube - runs static analysis using SonarQube. Sonarqube must be running - check http://localhost:9000 +* gradlew integrate - runs the database integration tests +* gradlew startH2Console - Starts a console to examine the H2 database file. (user and + password are empty, URL to use is jdbc:h2:./build/db/training) +* gradlew ... taskTree - a utility that will show the task tree for a particular task + + + ** Requires the app to be running + (usually in another terminal) and all optional dependencies installed. + +#### The whole shebang - a CI/CD pipeline + +Details on building out a CI/CD pipeline are found in the "docs/ci_and_cd" directory. +For example, to set it all up on a [local Windows box](https://raw.githubusercontent.com/7ep/demo/master/docs/ci_and_cd/ci_and_cd_for_localhost.txt) + +###### Features of the pipeline: +* A fully functioning and documented demonstration CI/CD pipeline using Jenkins. +* BDD tests run with a report generated +* Static analysis quality-gating using SonarQube +* UI tests running on Chrome +* Performance testing with Jmeter +* Security analysis with OWASP's "DependencyCheck" +* Complex commands wrapped simply using Gradle +* Mutation testing with Pitest +* Javadocs built + + + +--- + +## Screenshots: +![Jenkins pipeline](https://c2.staticflickr.com/8/7889/33202009658_11422b7f20_b.jpg) + +![Zap attach proxy](https://c2.staticflickr.com/8/7905/33202009438_8f367e20ec_o.png) + +![SonarQube analysis](https://c2.staticflickr.com/8/7823/33202009548_e678128200_b.jpg) + +![Running performance tests](https://c2.staticflickr.com/8/7854/47077017751_7e045f68dd_b.jpg) diff --git a/README.md b/README.md index cef0ff62..fbfe7627 100644 --- a/README.md +++ b/README.md @@ -1,185 +1,77 @@ -## Demo - demonstrates an application and tests - -This is an application by [Coveros](https://www.coveros.com/) to demonstrate good -software practices. As we say in agile... _Working software over comprehensive -documentation_ ... but that doesn't mean we can't have pretty good documentation too. - -#### Quick Start: - -* Install [Java](https://www.java.com/en/download/) if you don't already have it. -* Clone or [download](https://github.com/7ep/demo/archive/master.zip) this repo. (if you download, unzip the file to a directory.) -* On the command line in the top directory of this repo, run `gradlew apprun` -* Visit the application with your browser at http://localhost:8080/demo - -#### Summary: - -Demo consists of a simple web application and tests. Its goal is to provide -an environment suitable for demonstration and practice in valuable development -techniques. Some of the techniques exemplified are: -* [Unit](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/authentication/RegistrationUtilsTests.java) [tests](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/library/LibraryUtilsTests.java) developed by [TDD](https://en.wikipedia.org/wiki/Test-driven_development) using [Junit](https://junit.org/junit5/) as a driver and [Mockito](https://site.mockito.org/) for mocks, with coverage reports. -* [UI tests](https://github.com/7ep/demo/blob/master/src/ui_tests/behave/features/librarian_ui.feature) using [multiple frameworks](https://github.com/7ep/demo/tree/master/src/ui_tests) -* [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) [tests](https://github.com/7ep/demo/blob/master/src/bdd_test/resources/library/check_out_a_book.feature) using gherkin - * [Cucumber](https://docs.cucumber.io/) tests, with reports - * [Behave](https://behave.readthedocs.io/en/latest/) UI tests that use [Selenium](https://www.selenium.dev/) web driver. -* [Integration tests](https://github.com/7ep/demo/blob/master/src/integration_test/java/com/coveros/training/persistence/PersistenceLayerTests.java) that test the [H2 database](https://www.h2database.com/html/main.html) -* [Database versioning](https://github.com/7ep/demo/blob/master/src/main/resources/db/migration/V2__Rest_of_tables_for_auth_and_library.sql), with [Flyway](https://flywaydb.org/) -* Security analysis using [DependencyCheck](https://www.owasp.org/index.php/OWASP_Dependency_Check) -* Hot-swap code with [Gretty](https://github.com/gretty-gradle-plugin/gretty) -* Enhanced type system using [Checker Framework](https://checkerframework.org/) -* See its [architecture](https://github.com/7ep/demo/blob/master/docs/dev_notes/architecture.txt) - +# CI-CD-Pipeline-Automation -Its essential goals: -* Just works, any platform. -* As simple as possible -* Minimal system requirements -* Fast and easy to install and to run -* High test coverage -* Multiple business domains -* Easy to maintain and improve -* Well documented -* High performance -* Illustrates maximum number of techniques -* Easy to get up to speed - -#### Table of contents: -1. [Optional dependencies](#optional-dependencies) -1. [Chromedriver installation notes](#chromedriver-installation-notes) -1. [Python installation notes](#python-installation-notes) -1. [To build and run tests](#to-build-and-run-tests) -1. [To run the application](#to-run-the-web-application) -1. [To run API and UI tests](#to-run-api-and-ui-tests) -1. [Summary of relevant Gradle commands](#summary-of-relevant-gradle-commands) -1. [The whole shebang - CI/CD pipeline](#the-whole-shebang---a-cicd-pipeline) - -###### Optional Dependencies -If you want API testing and Selenium testing, you will need -to visit these links and download / install the applications found there. -* [Python](https://www.python.org/downloads/) -* [Chromedriver](http://chromedriver.chromium.org/downloads) -* [Chrome internet browser](https://www.google.com/chrome/) - ---- - -#### Chromedriver installation notes -make sure that the [Chromedriver](https://chromedriver.chromium.org/) executable is installed in one of the directories that is -on your path. To see your path, type the following in a command line: - -on Windows: - - echo %PATH% - -On Mac/Linux: - - echo $PATH - -If you run the command, `chromedriver` on the command line, you should get a result similar to this: - - Starting ChromeDriver ... - -#### Python installation notes -Python can be downloaded [here](https://www.python.org/downloads/) - -To run API tests and Selenium tests, an easy way to handle its -dependencies is to use *pipenv*. To get this installed, first download -[get-pip.py](https://bootstrap.pypa.io/get-pip.py), and run the following on the command line: - - python get-pip.py - -Then, - - pip install pipenv - -And in the demo directory, - - pipenv install - -#### To build and run tests: -On the command line, run the following: - -On Mac/Linux - - ./gradlew check - -On Windows - - gradlew check - -#### To run the web application: -On the command line, run the following: - -On Mac/Linux - - ./gradlew apprun - -On Windows - - gradlew apprun - -Then, head to http://localhost:8080/demo - - -#### To run API and UI tests: -Note: The app has to be [already running](#to-run-the-web-application) for these tests to pass, and you _need_ -to have installed [Python] and [Chromedriver]. - -In a new terminal, separate from the one where the server is running, run the following: +ENSF 400 - Course Project +Winter Semester 2025 -On Mac/Linux +Team members: - ./gradlew runAllTests +- Sachin Seizer +- Matthew McDougall +- Brendan SMILEY +- Luca Rios -On Windows - - gradlew runAllTests - -#### Summary of relevant Gradle commands -* gradlew coveros - show a cheat sheet of commands for Demo -* gradlew apprun - runs the application -* gradlew check - runs all tests possible with only dependency being Java 8. No need for app to be running. -* gradlew runAllTests - runs the whole set of tests** -* gradlew clean - cleans build products and installs pre-push hook. (see the file in this directory, pre-push) -* gradlew runBehaveTests - runs the UI tests** -* gradlew runApiTests - runs the API tests** -* gradlew generateCucumberReport - runs cucumber and creates a nice-looking HTML report -* gradlew pitest - runs mutation testing (see http://pitest.org/) -* gradlew dependencyCheckAnalyze - analyzes security reports for the dependencies of - this project. See https://www.owasp.org/index.php/OWASP_Dependency_Check -* gradlew sonarqube - runs static analysis using SonarQube. Sonarqube must be running - check http://localhost:9000 -* gradlew integrate - runs the database integration tests -* gradlew startH2Console - Starts a console to examine the H2 database file. (user and - password are empty, URL to use is jdbc:h2:./build/db/training) -* gradlew ... taskTree - a utility that will show the task tree for a particular task +## Project Initialization +1. Clone the repository - ** Requires the app to be running - (usually in another terminal) and all optional dependencies installed. - -#### The whole shebang - a CI/CD pipeline +2. Use Java JDK 11 -Details on building out a CI/CD pipeline are found in the "docs/ci_and_cd" directory. -For example, to set it all up on a [local Windows box](https://raw.githubusercontent.com/7ep/demo/master/docs/ci_and_cd/ci_and_cd_for_localhost.txt) +3. Ensure gretty is 3.0.6 not 3.0.4 +4. Follow the remainder of the instructions in the README.md -###### Features of the pipeline: -* A fully functioning and documented demonstration CI/CD pipeline using Jenkins. -* BDD tests run with a report generated -* Static analysis quality-gating using SonarQube -* UI tests running on Chrome -* Performance testing with Jmeter -* Security analysis with OWASP's "DependencyCheck" -* Complex commands wrapped simply using Gradle -* Mutation testing with Pitest -* Javadocs built +## GitHub Repository & Git Workflow (15%) +For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. +### Pull Request from @SuperSachinS ---- + -## Screenshots: -![Jenkins pipeline](https://c2.staticflickr.com/8/7889/33202009658_11422b7f20_b.jpg) +## Containerization (20%) -![Zap attach proxy](https://c2.staticflickr.com/8/7905/33202009438_8f367e20ec_o.png) +### Background/Development/Usage -![SonarQube analysis](https://c2.staticflickr.com/8/7823/33202009548_e678128200_b.jpg) +Below is the process taken to containerize the application: -![Running performance tests](https://c2.staticflickr.com/8/7854/47077017751_7e045f68dd_b.jpg) +1. Created a Dockerfile +2. Build the Docker image using `docker build --tag 'ensf400-g20' .` +3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. +4. Run `docker compose up` to start the application and keep it running. +5. Access the application at `http://localhost:8080/demo` + +### Dockerfile + +The Dockerfile can be found [here](./Dockerfile) +As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. + +### Docker Compose + +The Docker Compose file can be found [here](./docker-compose.yml), this helps ensure that the containerization procedure will scale moving forward with the project. Additionally, we used the docker-compose.yml to ensure that the application did not immediately exit after starting up. + +### Docker Image on Docker Hub + +Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). + +use the following command to pull the image: + +```bash +docker pull mattmcdou/ci-cd-pipeline-automation-app:latest +``` + +use the following command to run the container, and keep it open: + +```bash +docker run -it -p 8080:8080 mattmcdou/ci-cd-pipeline-automation-app:latest +``` + +## CI/CD Pipeline Automation (40%) + +❗ TODO ❗ + +## Testing & Code Quality (10%) + +❗ TODO ❗ + +## Documentation & Demo (15%) + +❗ TODO ❗ diff --git a/REPORT-G20.md b/REPORT-G20.md deleted file mode 100644 index fbfe7627..00000000 --- a/REPORT-G20.md +++ /dev/null @@ -1,77 +0,0 @@ -# CI-CD-Pipeline-Automation - -ENSF 400 - Course Project -Winter Semester 2025 - -Team members: - -- Sachin Seizer -- Matthew McDougall -- Brendan SMILEY -- Luca Rios - -## Project Initialization - -1. Clone the repository - -2. Use Java JDK 11 - -3. Ensure gretty is 3.0.6 not 3.0.4 -4. Follow the remainder of the instructions in the README.md - -## GitHub Repository & Git Workflow (15%) - -For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. - -### Pull Request from @SuperSachinS - - - -## Containerization (20%) - -### Background/Development/Usage - -Below is the process taken to containerize the application: - -1. Created a Dockerfile -2. Build the Docker image using `docker build --tag 'ensf400-g20' .` -3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. -4. Run `docker compose up` to start the application and keep it running. -5. Access the application at `http://localhost:8080/demo` - -### Dockerfile - -The Dockerfile can be found [here](./Dockerfile) -As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. - -### Docker Compose - -The Docker Compose file can be found [here](./docker-compose.yml), this helps ensure that the containerization procedure will scale moving forward with the project. Additionally, we used the docker-compose.yml to ensure that the application did not immediately exit after starting up. - -### Docker Image on Docker Hub - -Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). - -use the following command to pull the image: - -```bash -docker pull mattmcdou/ci-cd-pipeline-automation-app:latest -``` - -use the following command to run the container, and keep it open: - -```bash -docker run -it -p 8080:8080 mattmcdou/ci-cd-pipeline-automation-app:latest -``` - -## CI/CD Pipeline Automation (40%) - -❗ TODO ❗ - -## Testing & Code Quality (10%) - -❗ TODO ❗ - -## Documentation & Demo (15%) - -❗ TODO ❗ From c3f74c30299ae9316695e15b3a39463b3cc35b2b Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Mon, 17 Mar 2025 17:23:26 -0600 Subject: [PATCH 15/17] Mod: Change README names and added -it to command, it works now --- README-DEMO.md | 185 +++++++++++++++++++++++++++++++++++++++ README.md | 232 +++++++++++++------------------------------------ REPORT-G20.md | 77 ---------------- 3 files changed, 247 insertions(+), 247 deletions(-) create mode 100644 README-DEMO.md delete mode 100644 REPORT-G20.md diff --git a/README-DEMO.md b/README-DEMO.md new file mode 100644 index 00000000..cef0ff62 --- /dev/null +++ b/README-DEMO.md @@ -0,0 +1,185 @@ +## Demo - demonstrates an application and tests + +This is an application by [Coveros](https://www.coveros.com/) to demonstrate good +software practices. As we say in agile... _Working software over comprehensive +documentation_ ... but that doesn't mean we can't have pretty good documentation too. + +#### Quick Start: + +* Install [Java](https://www.java.com/en/download/) if you don't already have it. +* Clone or [download](https://github.com/7ep/demo/archive/master.zip) this repo. (if you download, unzip the file to a directory.) +* On the command line in the top directory of this repo, run `gradlew apprun` +* Visit the application with your browser at http://localhost:8080/demo + +#### Summary: + +Demo consists of a simple web application and tests. Its goal is to provide +an environment suitable for demonstration and practice in valuable development +techniques. Some of the techniques exemplified are: +* [Unit](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/authentication/RegistrationUtilsTests.java) [tests](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/library/LibraryUtilsTests.java) developed by [TDD](https://en.wikipedia.org/wiki/Test-driven_development) using [Junit](https://junit.org/junit5/) as a driver and [Mockito](https://site.mockito.org/) for mocks, with coverage reports. +* [UI tests](https://github.com/7ep/demo/blob/master/src/ui_tests/behave/features/librarian_ui.feature) using [multiple frameworks](https://github.com/7ep/demo/tree/master/src/ui_tests) +* [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) [tests](https://github.com/7ep/demo/blob/master/src/bdd_test/resources/library/check_out_a_book.feature) using gherkin + * [Cucumber](https://docs.cucumber.io/) tests, with reports + * [Behave](https://behave.readthedocs.io/en/latest/) UI tests that use [Selenium](https://www.selenium.dev/) web driver. +* [Integration tests](https://github.com/7ep/demo/blob/master/src/integration_test/java/com/coveros/training/persistence/PersistenceLayerTests.java) that test the [H2 database](https://www.h2database.com/html/main.html) +* [Database versioning](https://github.com/7ep/demo/blob/master/src/main/resources/db/migration/V2__Rest_of_tables_for_auth_and_library.sql), with [Flyway](https://flywaydb.org/) +* Security analysis using [DependencyCheck](https://www.owasp.org/index.php/OWASP_Dependency_Check) +* Hot-swap code with [Gretty](https://github.com/gretty-gradle-plugin/gretty) +* Enhanced type system using [Checker Framework](https://checkerframework.org/) +* See its [architecture](https://github.com/7ep/demo/blob/master/docs/dev_notes/architecture.txt) + + +Its essential goals: +* Just works, any platform. +* As simple as possible +* Minimal system requirements +* Fast and easy to install and to run +* High test coverage +* Multiple business domains +* Easy to maintain and improve +* Well documented +* High performance +* Illustrates maximum number of techniques +* Easy to get up to speed + +#### Table of contents: +1. [Optional dependencies](#optional-dependencies) +1. [Chromedriver installation notes](#chromedriver-installation-notes) +1. [Python installation notes](#python-installation-notes) +1. [To build and run tests](#to-build-and-run-tests) +1. [To run the application](#to-run-the-web-application) +1. [To run API and UI tests](#to-run-api-and-ui-tests) +1. [Summary of relevant Gradle commands](#summary-of-relevant-gradle-commands) +1. [The whole shebang - CI/CD pipeline](#the-whole-shebang---a-cicd-pipeline) + +###### Optional Dependencies +If you want API testing and Selenium testing, you will need +to visit these links and download / install the applications found there. +* [Python](https://www.python.org/downloads/) +* [Chromedriver](http://chromedriver.chromium.org/downloads) +* [Chrome internet browser](https://www.google.com/chrome/) + +--- + +#### Chromedriver installation notes +make sure that the [Chromedriver](https://chromedriver.chromium.org/) executable is installed in one of the directories that is +on your path. To see your path, type the following in a command line: + +on Windows: + + echo %PATH% + +On Mac/Linux: + + echo $PATH + +If you run the command, `chromedriver` on the command line, you should get a result similar to this: + + Starting ChromeDriver ... + +#### Python installation notes +Python can be downloaded [here](https://www.python.org/downloads/) + +To run API tests and Selenium tests, an easy way to handle its +dependencies is to use *pipenv*. To get this installed, first download +[get-pip.py](https://bootstrap.pypa.io/get-pip.py), and run the following on the command line: + + python get-pip.py + +Then, + + pip install pipenv + +And in the demo directory, + + pipenv install + +#### To build and run tests: +On the command line, run the following: + +On Mac/Linux + + ./gradlew check + +On Windows + + gradlew check + +#### To run the web application: +On the command line, run the following: + +On Mac/Linux + + ./gradlew apprun + +On Windows + + gradlew apprun + +Then, head to http://localhost:8080/demo + + +#### To run API and UI tests: +Note: The app has to be [already running](#to-run-the-web-application) for these tests to pass, and you _need_ +to have installed [Python] and [Chromedriver]. + +In a new terminal, separate from the one where the server is running, run the following: + +On Mac/Linux + + ./gradlew runAllTests + +On Windows + + gradlew runAllTests + +#### Summary of relevant Gradle commands +* gradlew coveros - show a cheat sheet of commands for Demo +* gradlew apprun - runs the application +* gradlew check - runs all tests possible with only dependency being Java 8. No need for app to be running. +* gradlew runAllTests - runs the whole set of tests** +* gradlew clean - cleans build products and installs pre-push hook. (see the file in this directory, pre-push) +* gradlew runBehaveTests - runs the UI tests** +* gradlew runApiTests - runs the API tests** +* gradlew generateCucumberReport - runs cucumber and creates a nice-looking HTML report +* gradlew pitest - runs mutation testing (see http://pitest.org/) +* gradlew dependencyCheckAnalyze - analyzes security reports for the dependencies of + this project. See https://www.owasp.org/index.php/OWASP_Dependency_Check +* gradlew sonarqube - runs static analysis using SonarQube. Sonarqube must be running - check http://localhost:9000 +* gradlew integrate - runs the database integration tests +* gradlew startH2Console - Starts a console to examine the H2 database file. (user and + password are empty, URL to use is jdbc:h2:./build/db/training) +* gradlew ... taskTree - a utility that will show the task tree for a particular task + + + ** Requires the app to be running + (usually in another terminal) and all optional dependencies installed. + +#### The whole shebang - a CI/CD pipeline + +Details on building out a CI/CD pipeline are found in the "docs/ci_and_cd" directory. +For example, to set it all up on a [local Windows box](https://raw.githubusercontent.com/7ep/demo/master/docs/ci_and_cd/ci_and_cd_for_localhost.txt) + +###### Features of the pipeline: +* A fully functioning and documented demonstration CI/CD pipeline using Jenkins. +* BDD tests run with a report generated +* Static analysis quality-gating using SonarQube +* UI tests running on Chrome +* Performance testing with Jmeter +* Security analysis with OWASP's "DependencyCheck" +* Complex commands wrapped simply using Gradle +* Mutation testing with Pitest +* Javadocs built + + + +--- + +## Screenshots: +![Jenkins pipeline](https://c2.staticflickr.com/8/7889/33202009658_11422b7f20_b.jpg) + +![Zap attach proxy](https://c2.staticflickr.com/8/7905/33202009438_8f367e20ec_o.png) + +![SonarQube analysis](https://c2.staticflickr.com/8/7823/33202009548_e678128200_b.jpg) + +![Running performance tests](https://c2.staticflickr.com/8/7854/47077017751_7e045f68dd_b.jpg) diff --git a/README.md b/README.md index cef0ff62..77104433 100644 --- a/README.md +++ b/README.md @@ -1,185 +1,77 @@ -## Demo - demonstrates an application and tests - -This is an application by [Coveros](https://www.coveros.com/) to demonstrate good -software practices. As we say in agile... _Working software over comprehensive -documentation_ ... but that doesn't mean we can't have pretty good documentation too. - -#### Quick Start: - -* Install [Java](https://www.java.com/en/download/) if you don't already have it. -* Clone or [download](https://github.com/7ep/demo/archive/master.zip) this repo. (if you download, unzip the file to a directory.) -* On the command line in the top directory of this repo, run `gradlew apprun` -* Visit the application with your browser at http://localhost:8080/demo - -#### Summary: - -Demo consists of a simple web application and tests. Its goal is to provide -an environment suitable for demonstration and practice in valuable development -techniques. Some of the techniques exemplified are: -* [Unit](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/authentication/RegistrationUtilsTests.java) [tests](https://github.com/7ep/demo/blob/master/src/test/java/com/coveros/training/library/LibraryUtilsTests.java) developed by [TDD](https://en.wikipedia.org/wiki/Test-driven_development) using [Junit](https://junit.org/junit5/) as a driver and [Mockito](https://site.mockito.org/) for mocks, with coverage reports. -* [UI tests](https://github.com/7ep/demo/blob/master/src/ui_tests/behave/features/librarian_ui.feature) using [multiple frameworks](https://github.com/7ep/demo/tree/master/src/ui_tests) -* [BDD](https://en.wikipedia.org/wiki/Behavior-driven_development) [tests](https://github.com/7ep/demo/blob/master/src/bdd_test/resources/library/check_out_a_book.feature) using gherkin - * [Cucumber](https://docs.cucumber.io/) tests, with reports - * [Behave](https://behave.readthedocs.io/en/latest/) UI tests that use [Selenium](https://www.selenium.dev/) web driver. -* [Integration tests](https://github.com/7ep/demo/blob/master/src/integration_test/java/com/coveros/training/persistence/PersistenceLayerTests.java) that test the [H2 database](https://www.h2database.com/html/main.html) -* [Database versioning](https://github.com/7ep/demo/blob/master/src/main/resources/db/migration/V2__Rest_of_tables_for_auth_and_library.sql), with [Flyway](https://flywaydb.org/) -* Security analysis using [DependencyCheck](https://www.owasp.org/index.php/OWASP_Dependency_Check) -* Hot-swap code with [Gretty](https://github.com/gretty-gradle-plugin/gretty) -* Enhanced type system using [Checker Framework](https://checkerframework.org/) -* See its [architecture](https://github.com/7ep/demo/blob/master/docs/dev_notes/architecture.txt) - +# CI-CD-Pipeline-Automation -Its essential goals: -* Just works, any platform. -* As simple as possible -* Minimal system requirements -* Fast and easy to install and to run -* High test coverage -* Multiple business domains -* Easy to maintain and improve -* Well documented -* High performance -* Illustrates maximum number of techniques -* Easy to get up to speed - -#### Table of contents: -1. [Optional dependencies](#optional-dependencies) -1. [Chromedriver installation notes](#chromedriver-installation-notes) -1. [Python installation notes](#python-installation-notes) -1. [To build and run tests](#to-build-and-run-tests) -1. [To run the application](#to-run-the-web-application) -1. [To run API and UI tests](#to-run-api-and-ui-tests) -1. [Summary of relevant Gradle commands](#summary-of-relevant-gradle-commands) -1. [The whole shebang - CI/CD pipeline](#the-whole-shebang---a-cicd-pipeline) - -###### Optional Dependencies -If you want API testing and Selenium testing, you will need -to visit these links and download / install the applications found there. -* [Python](https://www.python.org/downloads/) -* [Chromedriver](http://chromedriver.chromium.org/downloads) -* [Chrome internet browser](https://www.google.com/chrome/) - ---- - -#### Chromedriver installation notes -make sure that the [Chromedriver](https://chromedriver.chromium.org/) executable is installed in one of the directories that is -on your path. To see your path, type the following in a command line: - -on Windows: - - echo %PATH% - -On Mac/Linux: - - echo $PATH - -If you run the command, `chromedriver` on the command line, you should get a result similar to this: - - Starting ChromeDriver ... - -#### Python installation notes -Python can be downloaded [here](https://www.python.org/downloads/) - -To run API tests and Selenium tests, an easy way to handle its -dependencies is to use *pipenv*. To get this installed, first download -[get-pip.py](https://bootstrap.pypa.io/get-pip.py), and run the following on the command line: - - python get-pip.py - -Then, - - pip install pipenv - -And in the demo directory, - - pipenv install - -#### To build and run tests: -On the command line, run the following: - -On Mac/Linux - - ./gradlew check - -On Windows - - gradlew check - -#### To run the web application: -On the command line, run the following: - -On Mac/Linux - - ./gradlew apprun - -On Windows - - gradlew apprun - -Then, head to http://localhost:8080/demo - - -#### To run API and UI tests: -Note: The app has to be [already running](#to-run-the-web-application) for these tests to pass, and you _need_ -to have installed [Python] and [Chromedriver]. - -In a new terminal, separate from the one where the server is running, run the following: +ENSF 400 - Course Project +Winter Semester 2025 -On Mac/Linux +Team members: - ./gradlew runAllTests +- Sachin Seizer +- Matthew McDougall +- Brendan SMILEY +- Luca Rios -On Windows - - gradlew runAllTests - -#### Summary of relevant Gradle commands -* gradlew coveros - show a cheat sheet of commands for Demo -* gradlew apprun - runs the application -* gradlew check - runs all tests possible with only dependency being Java 8. No need for app to be running. -* gradlew runAllTests - runs the whole set of tests** -* gradlew clean - cleans build products and installs pre-push hook. (see the file in this directory, pre-push) -* gradlew runBehaveTests - runs the UI tests** -* gradlew runApiTests - runs the API tests** -* gradlew generateCucumberReport - runs cucumber and creates a nice-looking HTML report -* gradlew pitest - runs mutation testing (see http://pitest.org/) -* gradlew dependencyCheckAnalyze - analyzes security reports for the dependencies of - this project. See https://www.owasp.org/index.php/OWASP_Dependency_Check -* gradlew sonarqube - runs static analysis using SonarQube. Sonarqube must be running - check http://localhost:9000 -* gradlew integrate - runs the database integration tests -* gradlew startH2Console - Starts a console to examine the H2 database file. (user and - password are empty, URL to use is jdbc:h2:./build/db/training) -* gradlew ... taskTree - a utility that will show the task tree for a particular task +## Project Initialization +1. Clone the repository - ** Requires the app to be running - (usually in another terminal) and all optional dependencies installed. - -#### The whole shebang - a CI/CD pipeline +2. Use Java JDK 11 -Details on building out a CI/CD pipeline are found in the "docs/ci_and_cd" directory. -For example, to set it all up on a [local Windows box](https://raw.githubusercontent.com/7ep/demo/master/docs/ci_and_cd/ci_and_cd_for_localhost.txt) +3. Ensure gretty is 3.0.6 not 3.0.4 +4. Follow the remainder of the instructions in the README.md -###### Features of the pipeline: -* A fully functioning and documented demonstration CI/CD pipeline using Jenkins. -* BDD tests run with a report generated -* Static analysis quality-gating using SonarQube -* UI tests running on Chrome -* Performance testing with Jmeter -* Security analysis with OWASP's "DependencyCheck" -* Complex commands wrapped simply using Gradle -* Mutation testing with Pitest -* Javadocs built +## GitHub Repository & Git Workflow (15%) +For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. +### Pull Request from @SuperSachinS ---- + -## Screenshots: -![Jenkins pipeline](https://c2.staticflickr.com/8/7889/33202009658_11422b7f20_b.jpg) +## Containerization (20%) -![Zap attach proxy](https://c2.staticflickr.com/8/7905/33202009438_8f367e20ec_o.png) +### Background/Development/Usage -![SonarQube analysis](https://c2.staticflickr.com/8/7823/33202009548_e678128200_b.jpg) +Below is the process taken to containerize the application: -![Running performance tests](https://c2.staticflickr.com/8/7854/47077017751_7e045f68dd_b.jpg) +1. Created a Dockerfile +2. Build the Docker image using `docker build --tag 'ensf400-g20' .` +3. Run the Docker image using `docker run -it -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. +4. Run `docker compose up` to start the application and keep it running. +5. Access the application at `http://localhost:8080/demo` + +### Dockerfile + +The Dockerfile can be found [here](./Dockerfile) +As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. + +### Docker Compose + +The Docker Compose file can be found [here](./docker-compose.yml), this helps ensure that the containerization procedure will scale moving forward with the project. Additionally, we used the docker-compose.yml to ensure that the application did not immediately exit after starting up. + +### Docker Image on Docker Hub + +Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). + +use the following command to pull the image: + +```bash +docker pull mattmcdou/ci-cd-pipeline-automation-app:latest +``` + +use the following command to run the container, and keep it open: + +```bash +docker run -it -p 8080:8080 mattmcdou/ci-cd-pipeline-automation-app:latest +``` + +## CI/CD Pipeline Automation (40%) + +❗ TODO ❗ + +## Testing & Code Quality (10%) + +❗ TODO ❗ + +## Documentation & Demo (15%) + +❗ TODO ❗ diff --git a/REPORT-G20.md b/REPORT-G20.md deleted file mode 100644 index fbfe7627..00000000 --- a/REPORT-G20.md +++ /dev/null @@ -1,77 +0,0 @@ -# CI-CD-Pipeline-Automation - -ENSF 400 - Course Project -Winter Semester 2025 - -Team members: - -- Sachin Seizer -- Matthew McDougall -- Brendan SMILEY -- Luca Rios - -## Project Initialization - -1. Clone the repository - -2. Use Java JDK 11 - -3. Ensure gretty is 3.0.6 not 3.0.4 -4. Follow the remainder of the instructions in the README.md - -## GitHub Repository & Git Workflow (15%) - -For our github workflow, we created rules to ensure branch protections. Those rules include not allowing collaborators to commit changes directly to main and requiring a reviewer for each pull request. - -### Pull Request from @SuperSachinS - - - -## Containerization (20%) - -### Background/Development/Usage - -Below is the process taken to containerize the application: - -1. Created a Dockerfile -2. Build the Docker image using `docker build --tag 'ensf400-g20' .` -3. Run the Docker image using `docker run -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. -4. Run `docker compose up` to start the application and keep it running. -5. Access the application at `http://localhost:8080/demo` - -### Dockerfile - -The Dockerfile can be found [here](./Dockerfile) -As seen in the Dockerfile, we had to use the same versioning requirements that were needed to run the application locally. This meant using an exact gradle image with the correct version of gradle and java JDK. Afterwards the Dockerfile copies the project directory into the container and then runs the application using gradle instead of the gradle wrapper provided in the project. - -### Docker Compose - -The Docker Compose file can be found [here](./docker-compose.yml), this helps ensure that the containerization procedure will scale moving forward with the project. Additionally, we used the docker-compose.yml to ensure that the application did not immediately exit after starting up. - -### Docker Image on Docker Hub - -Our docker image can be found in a repository on docker hub [here](https://hub.docker.com/repository/docker/mattmcdou/ci-cd-pipeline-automation-app/tags/latest/sha256-cedc83a81df4c45f3a1312ecd1c3a48de0c5cf1e51c645d8446d645863fcfaca). - -use the following command to pull the image: - -```bash -docker pull mattmcdou/ci-cd-pipeline-automation-app:latest -``` - -use the following command to run the container, and keep it open: - -```bash -docker run -it -p 8080:8080 mattmcdou/ci-cd-pipeline-automation-app:latest -``` - -## CI/CD Pipeline Automation (40%) - -❗ TODO ❗ - -## Testing & Code Quality (10%) - -❗ TODO ❗ - -## Documentation & Demo (15%) - -❗ TODO ❗ From 160c15465c53e009c25d961b6819a2dcf5b15676 Mon Sep 17 00:00:00 2001 From: Brendan Smiley Date: Mon, 17 Mar 2025 17:24:11 -0600 Subject: [PATCH 16/17] Remove: Old description --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 77104433..9cc794a8 100644 --- a/README.md +++ b/README.md @@ -35,8 +35,8 @@ Below is the process taken to containerize the application: 1. Created a Dockerfile 2. Build the Docker image using `docker build --tag 'ensf400-g20' .` -3. Run the Docker image using `docker run -it -p 8080:8080 ensf400-g20`, NOTE: the application will close immediately after starting up, use step 4. or use the image on Docker Hub below. -4. Run `docker compose up` to start the application and keep it running. +3. Run the Docker image using `docker run -it -p 8080:8080 ensf400-g20` +4. An alternative way to run the Dockerfile: Run `docker compose up` to start the application and keep it running. 5. Access the application at `http://localhost:8080/demo` ### Dockerfile From debbb6c6dddbbf99696dbfb09e31f3836ab9aeae Mon Sep 17 00:00:00 2001 From: Matthew McDougall <144636483+mattmcdou@users.noreply.github.com> Date: Mon, 17 Mar 2025 19:30:09 -0600 Subject: [PATCH 17/17] Create docker-image.yml --- .github/workflows/docker-image.yml | 55 ++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/docker-image.yml diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml new file mode 100644 index 00000000..d9829413 --- /dev/null +++ b/.github/workflows/docker-image.yml @@ -0,0 +1,55 @@ +name: Docker Image CI + +on: + pull_request: + types: [opened, synchronize] + branches: + - main + + pull_request_target: + types: [closed] + +jobs: + build-test: + name: Build and Test Docker Image + runs-on: ubuntu-latest + if: github.event.action != 'closed' + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Build Docker Image (Test) + run: | + docker build -t mattmcdou/ci-cd-test-image . + + push-image: + name: Push Docker Image on Merge + runs-on: ubuntu-latest + needs: build-test + if: github.event.pull_request.merged == true + + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Log in to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build Docker Image + run: | + docker build --no-cache -t mattmcdou/ci-cd-pipeline-automation-app:latest . + + - name: Tag & Push Versioned Image + run: | + VERSION=$(git rev-parse --short HEAD) + docker tag mattmcdou/ci-cd-pipeline-automation-app:latest mattmcdou/ci-cd-pipeline-automation-app:$VERSION + docker push mattmcdou/ci-cd-pipeline-automation-app:$VERSION + + - name: Push Latest Image + run: | + docker push mattmcdou/ci-cd-pipeline-automation-app:latest +