Slide 1

Slide 1 text

jgs CSC 309 Software Engineering II Lecture 10: Continuous Integration Dr. Javier Gonzalez-Sanchez [email protected] www.javiergs.com Building 14 -227 Office Hours: By appointment

Slide 2

Slide 2 text

jgs Previously …

Slide 3

Slide 3 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 3 Key Ideas CSC 308

Slide 4

Slide 4 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 4 Key Ideas CSC 309 architecture design code unit testing integration testing verification verification quality measure

Slide 5

Slide 5 text

jgs 1. Continuous Integration

Slide 6

Slide 6 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 6 § What? The practice of automating the integration of code changes from multiple contributors into a single software project. Continuous Integration (CI) https://www.pagerduty.com

Slide 7

Slide 7 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 7 Continuous Integration (CI) https://www.devopsschool.com/blog/top-10-continuous-integration-tool/ used in combination with automated tests use a build server to implement continuous compilation, running unit and integration tests, and even static analyses and profile performance.

Slide 8

Slide 8 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 8 § When? Several times a day – Grady Booch 1991 Agile methods recommend continuous integration to discover software problems earlier (Ken Beck, 1998) Continuous Integration (CI)

Slide 9

Slide 9 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 9 § Which One? Money, Experience, Learning Curve Jenkins, Travis, and CircleCI have been popular options. Tools Build Test Report

Slide 10

Slide 10 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 10 GitHub A code hosting platform (free for public projects) Tool

Slide 11

Slide 11 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 11 § GitHub launched their own Continuous Integration(CI) and Deployment (CD) system called GitHub Actions. § You can implement CI directly inside the tool that store your code (2019). Tools

Slide 12

Slide 12 text

jgs 2. GitHub Actions Set Up

Slide 13

Slide 13 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 13 GitHub

Slide 14

Slide 14 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 14 Maven A build automation tool used

Slide 15

Slide 15 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 15 … pom.xml

Slide 16

Slide 16 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 16 src/test/java/*.java

Slide 17

Slide 17 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 17 GitHub Actions 1 2

Slide 18

Slide 18 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 18 § Actions are individual jobs that can be combined in a Workflow to create a complex pipeline. (Jobs such as build the code in your repository and run your tests) § A Workflow can be configured in YAML file and triggered to run on specific events (such as each time someone pushes code to the master branch). Workflow YAML file events jobs

Slide 19

Slide 19 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 19 .gitbub/workflows/maven.yml YAML file events jobs 👆

Slide 20

Slide 20 text

jgs 3. Run

Slide 21

Slide 21 text

jgs Javier Gonzalez-Sanchez | CSC 308 | Winter 2023 | 21 push

Slide 22

Slide 22 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 22 GitHub Actions 1

Slide 23

Slide 23 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 23 GitHub Actions 1 2

Slide 24

Slide 24 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 24 GitHub Actions 1

Slide 25

Slide 25 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 25 GitHub Actions

Slide 26

Slide 26 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 26 Email

Slide 27

Slide 27 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 30

Slide 28

Slide 28 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 31 § Chapter 25 Configuration Management - Continuous Integration § Understanding GitHub Actions https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions § Maven https://maven.apache.org/guides/introduction/introduction-to-the-pom.html References

Slide 29

Slide 29 text

jgs

Slide 30

Slide 30 text

jgs CSC 309 Software Engineering II Lab 10: Continuous Integration Dr. Javier Gonzalez-Sanchez [email protected] www.javiergs.com Building 14 -227 Office Hours: By appointment

Slide 31

Slide 31 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 35 1. IDE • Use your IDE • Create a new project and either choice as build system Maven or add Maven as you did before.

Slide 32

Slide 32 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 36 2. Code • Add this class: public class Main { public static void main(String args[]) { hypothenuse(10, 20); } public static double hypothenuse(double a, double b) { return Math.sqrt(Math.pow(a,2) + Math.pow(b,2)); } } • It should be in src/main/java folder. • Check your Maven

Slide 33

Slide 33 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 37 3. Test Case • Create a test case. You can do that by selecting your class name, right-clicking, selecting generate…/Test… • Select the method to be tested and click OK.

Slide 34

Slide 34 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 38 4. Junit Dependency • Either your IDE takes car of the dependency or goes and add it manually as follows (this is Junit 5) org.junit.jupiter junit-jupiter 5.8.2 test

Slide 35

Slide 35 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 39 5. Run Your Test Case • You can test something like this: import org.junit.jupiter.api.Assertions; class MainTest { @Test void hypothenuse() { Assertions.assertEquals( Main.hypothenuse(10,20), 22.360679774997898 ); } }

Slide 36

Slide 36 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 40 6. Build • And let us ask Maven to build the application also. org.apache.maven.plugins maven-surefire-plugin 2.22.2

Slide 37

Slide 37 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 41 7. Connect your IDE and your GitHub Repository • VCS / Share your project on GitHub

Slide 38

Slide 38 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 42 8. Do NOT share everything • VCS / Share your project on GitHub

Slide 39

Slide 39 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 43 9. GitHub readme.md 1. Go To GitHub and add a README.md file 2. Edit the README file and add your names (only team members present) 3. Add me as a collaborator (javiergs)

Slide 40

Slide 40 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 44 10. GitHub Actions 1. Go to Actions. 2. Select Java with Maven 3. A maven.yml file will appear 4. Click Commit

Slide 41

Slide 41 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 45 11. GitHub Actions Permissions 1. If the Build fails, then go to Settings/Actions/General and provide Read and Write permissions to Workflow 2. Review your Java versions 8. 11, 15, 19 etc. It is better if they match.

Slide 42

Slide 42 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 46 12. GitHub Actions <> 1. Delete the <> part from the YML file – the last 3 lines

Slide 43

Slide 43 text

jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 | 47 Let’s Work

Slide 44

Slide 44 text

jgs CSC 309 Software Engineering II Javier Gonzalez-Sanchez, Ph.D. [email protected] Winter 2023 Copyright. These slides can only be used as study material for the class CSC308 at Cal Poly. They cannot be distributed or used for another purpose.