Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CSC309 Lecture 10

CSC309 Lecture 10

Software Engineering II
CI
(202405)

Javier Gonzalez-Sanchez

January 31, 2023
Tweet

More Decks by Javier Gonzalez-Sanchez

Other Decks in Programming

Transcript

  1. 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
  2. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

    4 Key Ideas CSC 309 architecture design code unit testing integration testing verification verification quality measure
  3. 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
  4. 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.
  5. 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)
  6. 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
  7. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

    10 GitHub A code hosting platform (free for public projects) Tool
  8. 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
  9. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

    14 Maven A build automation tool used
  10. 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
  11. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

    19 .gitbub/workflows/maven.yml YAML file events jobs 👆
  12. 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
  13. jgs

  14. 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
  15. 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.
  16. 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
  17. 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.
  18. 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) <dependencies> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.8.2</version> <scope>test</scope> </dependency> </dependencies>
  19. 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 ); } }
  20. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

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

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

    42 8. Do NOT share everything • VCS / Share your project on GitHub
  23. 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)
  24. 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
  25. 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.
  26. jgs Javier Gonzalez-Sanchez | CSC 309 | Winter 2023 |

    46 12. GitHub Actions <<Optional>> 1. Delete the <<optional>> part from the YML file – the last 3 lines
  27. 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.