TDDE06 Large-Scale Software Development: Structures and Processes (6 ECTS)
Vt1-Vt2 2020
# Lab 1 - CI
Continuous Integration (CI) och Countinous Delivery (CD) är idag standarder för att testa och leverera mjukvara.
Det används för att flera gånger per dag integrera utvecklarnas ändringar systemet, vilket inkluderar att köra enhetstester för att fastställa att koden fungerar som man har tänkt.
Målet är att se till att det alltid finns en version av produkten som är redo att levereras.
Docker är ett open-source-projekt som automatiserar körandet av applikationer inuti _containers_.
En container innehåller allt som behövs för att applikationen ska köras.
Detta i kombination med att docker är immuterbart innebär att man reperterbart kan köra koden i samma miljö oavsett plattform.
I denna laborationen ska ni få sätta upp ett CI-system med hjälp av Jenkins och Docker.
För högre betyg ska ni även lägga till en deployment-komponent med Chefs.
*För de som vill köra docker-images på IDA finns maskinen 130.236.181.180 tillgänglig. (Alla i kursen ska ha tillgång till maskinen, kan du inte logga in på maskinen kontakta kursledningen)*
## Dokumentation
### Docker
- Filmer som introducerar de viktigaste koncepten inom Docker: [https://training.docker.com/self-paced-training](https://training.docker.com/self-paced-training)
- Getting started
- Linux: https://docs.docker.com/linux/
- OS X: https://docs.docker.com/mac/
- Windows: https://docs.docker.com/windows/
- Officiell dokumentation: https://docs.docker.com
### Jenkins
- Introduktion: [https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins](https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins)
- Setup och introduktion via exempel: [https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins](https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins)
- Dokumentation: [https://jenkins.io/doc/](https://jenkins.io/doc/)
### Chefs
- Basics: [https://learn.chef.io/tutorials/](https://learn.chef.io/tutorials/)
- Dokumentation: [https://docs.chef.io](https://docs.chef.io)
- Docker cookbook: [https://supermarket.chef.io/cookbooks/docker](https://supermarket.chef.io/cookbooks/docker)
## Uppgift
Grunduppgiften består av följande komponenter:
- GitHub repository
- Jenkins Master
- Jenkins Slav
- Docker
Med hjälp av dessa komponenter ska du skapa ett system som tillåter följande workflow:
1. En utvecklare push:ar till ett GitHub repository.
2. Som svar på att det finns nya ändringar på Github drar Jenkins automatiskt ner ditt GitHub repo och bygger din applikation med hjälp av Docker. Dockerfil(erna) behöver således finnas i GitHub repot.
4. En jenkins slav bygger systemet och kör testerna.
5. Notifiera utvecklarna med resultatet av testerna, via t.ex. email eller Slack.
Vilken applikation som ska användas är upp till er att bestämma.
Har ni ett gammalt projekt (t.ex. kandidatarbete) som passar rekommenderar vi att ni använder det.
Kravet på ett sådant projekt är att det består av delar som kan delas upp i tre olika komponenter.
Ett exempel på detta är ett system med en webbserver, applikationskod och en databas.
Komponenterna ska kunna isoleras i varsin dockerbild.
Ifall ni inte har ett eget projekt som passar har vi ett sampleprojekt som kan användas: [git@gitlab.ida.liu.se:large-scale-dev/ci-sample-project.git](git@gitlab.ida.liu.se:large-scale-dev/ci-sample-project.git).
Projektets README.md beskriver det ni behöver veta för att bygga projektet och köra testerna.
Här bör Go-koden, PostgreSQL och NGINX köras i tre separata containers.
För att hantera flera olika bilder rekommenderas det att ni använder Docker-compose.
Detta är dock inget krav.
### Krav
- Det workflow som beskrivs ovan ska kunna genomföras.
- Det ska finnas tre olika dockerbilder.
- Minst en av dockerbilderna ska ni skapa själva från ubuntu:latest ([https://hub.docker.com/_/ubuntu/](https://hub.docker.com/_/ubuntu/)). Alltså inte använda en färdig bild som gör det mesta av jobbet. Däremot får ni givetvis ta inspiration från dessa för att skapa er egna.
### Högre betyg
För högre betyg ska du lägga till ytterligare ett steg i ditt workflow.
Ni ska använda chef för deployment.
Eftersom Docker-compose inte är gjort för att fullt kunna användas i produktion rekommenderas det här att ni kör utan.
Skapa en cookbook för att deploy:a dina dockerbilder.
När användaren har push:at till en viss branch och testerna har passerat, då ska du starta en chef run på din produktionsserver.
### Redovisning
Uppgiften redovisas genom att spela in en screencast där du förklarar de olika aspekterna av ditt ihopsatta ci-system och visar hur det fungerar som helhet.
Alltså: demonstrera att när du skapar push:ar upp en ändring så kör jenkins dina tester (för högre betyg även chefs).
Var noga med att förklara vad som händer i varje steg.
Page responsible: Anders Fröberg
Last updated: 2017-01-11