Kmom01: Introduktion till devops och Docker
Det är en fullspäckat kurs där vi ska lära oss många ny verktyg och koncept. I kursen ska vi lära oss både om det kulturella inom devops men även det praktiska. Vi börjar med att skaffa en produktionsmiljö och bekantar oss med ett påbörjat projekt som ska kopplas till en CI kedja och driftsätta manuellt.
Kmom01 är två veckor långt!
Innan ni börjar jobba med materialet fixa “GitHub Education Pack och ett domännamn”. Det kan ta ett tag innan det blir godkänt.
#Vad är devops?
#Läs och titta
Kolla på följande video för att få en introduktion till ämnet devops. Devops är ett brett ämne med många olika definitioner, här försöker skaparen av CM (Configuration Management) verktyget Chef beskriva konceptet och komma fram till en rimlig definition.
I videon nedanför får vi en kortare genomgång som fokuserar mer på arbetsflödet.
#Miljö
Tanken är att vi ska jobba med ett projekt igenom hela kursen och då behöver vi verktyg och program för att jobba med koden. Vi kommer ha både en lokal utvecklingsmiljö och en produktionsmiljö.
#Lokal utvecklingsmiljö
Vi kommer att utöka vad som ingår i labbmiljön under kursen.
#Att göra
- installera labbmiljön. Det är rekommenderat att ha minst python version 3.8. Det finns ett problem med 3.11 så om ni har det byt till en högre eller lägre version.
#Produktions miljö
När man jobbar enligt devops ska saker ofta gå snabbt och automatiskt, då underlättar det om man snabbt och enkelt kan starta upp och stänga ner servrar. Därför ska vi använda oss av en molntjänst, mer specifikt Microsoft Azure. OBS! logga inte in via den länken.
#Att göra
Jobba igenom:
För att komma åt varandras servrar har ni ett par alternativ:
- Lägg till varandras SSH filer som authenticated. Lättaste alternativet.
- Dela era SSH filer med varandra. Inte jättesäkert men OK för oss.
- Skapa en extra användare för varandra på servrarna. Proffsigaste alternativet, men då måste man tänka på att användarna behöver samma rättigheter. Det bli mer att tänka på längre fram.
Om något går fel på servern när ni jobbar med resten av materialen så ni behöver skapa om servern i Azure. Då kan ni använda er av skripten i repot för att snabbt göra de 10 första minuterna på en server, så slipper ni göra det manuellt igen.
#Appen
Nästa steg är att bekanta dig med appen som du ska jobba med i kursen.
#Läs och titta
#Docker
I kursen ska ni packa in er kod i en Docker container för att underlätta utveckling, driftsättning och körning av applikationen.
#Läs och titta
#Att göra
Jobba igenom:
- Om ni inte redan har ett, Skapa ett konto på DockerHub.
- Microblog i Docker
Läs:
- Vsupalov’s recension av Docker Usage in ‘The Flask Mega-Tutorial’.
#Continuous Integration
Vi vill ha en CI-kedja till repot så att testerna automatiskt körs när du gör push. I kursen har jag valt att använda GitHub Actions.
#Läs och titta
#Att göra
Jobba igenom:
- “Building and testing Python” i Actions.
#Continuous Delivery
Vi kan se Continuous Delivery som steget efter Continuous Integration. I CI har vi ett flöde där vi kör tester automatisk, nästa steg är när alla tester har blivit godkända. Då vill vi bygga vår applikation så att den finns tillgänglig för driftsättning med de senaste uppdateringarna.
#Läs och titta
Reusing workflows i Actions.
Publishing Docker images från Actions. Dokumentation om alternativ till att bygga er image
#Hur vi jobbar med repot
Ni ska jobba enligt GitHub Flow i ert repo. Det betyder att ni ska ha feature branches, gör pull requests och göra code reviews. För att underlätta det ska ni också fokusera på bra commit meddelanden.
#Läs och titta
Keeping Git Commit Messages Consistent with a Custom Template .
Semantisk versionshantering, en bra versionsstandard för projekt.
CHANGELOG, håll koll på vad som ändras mellan versionerna i ett projekt.
#Lästips
The 12 Factor App är en populär “standard” för att bygga Software-as-a-service och används mycket i devops sammanhang.
DevOps Roadmap Visar upp vanligaste verktygen man behöver kunna för att jobba med de tekniska delarna av devops.
- Här kan ni se vilka av verktygen vi kommer använda oss i kursen, i fylld devops roadmap
Multistage builds, för vår app är detta kanske inte nödvändigt men det är väldigt bra att känna till.
Best practices för Docker.
Building Your Production Tech Stack for Docker Container Platform, video från DockerCon 2018.
#Läsanvisningar
Läsanvisningar hittar ni på sidan bokcirkel.
Kolla i lektionsplanen för att se när vi träffas för bokcirkeln.
#Uppgifter
Jobba i ert repo enligt Hur vi jobbar med repot. Det betyder att
- Ni ska ha feature branches och när ni är klara med en del gör ni pull request till main den andra av er ska göra code review.
- Ni ska ha en template för commit meddelanden.
- Ni ska följa semantisk versionshantering.
- Ni ska ha en CHANGELOG.
Skapa en Dockerfile för Microblog. Om ni redan har jobbat igenom Docker delen så är den klar. Lägg filen i mappen
docker
.- Validera filen med
make validate-docker
. Skapa en compose fil,
docker-compose.yml
, i root mappen av ert repo. Lägg till en service som startar prod containern mot en MySQL container.- Kommandot
docker-compose up prod
ska starta en MySQL och en microblog container.
- Kommandot
- Validera filen med
Skapa en Dockerfile för testning,
docker/Dockerfile_test
.- Vid start ska container köra
make test
och sen stänga ner.- mapparna
app
ochtests
ska inte kopieras in utan ligga som volymer. - installera
requirements/test.txt
Istället förprod.txt
. - skapa en nytt skript som körs vid uppstart. Det ska köra
make test
, så alla tester körs.
- mapparna
- Validera Docker filen med
make validate-docker
. - Lägg till en ny service i
docker-compose.yml
som kör test containern. Den ska gå att starta meddocker-compose up test
. - Om ni vill, ändra så testerna körs mot en MySQL server istället för SQLite.
- Vid start ska container köra
Sätt upp Continuous Integration. Koppla ditt repo till GitHub Actions. När du gör en commit ska Actions köra alla unittester, integrationtester och validera koden.
- Lägg till en Actions badge i README filen för repot.
Sätt upp Continuous Delivery i Actions.
- Skapa ett nytt workflow (separat fil) som bygger och pushar er Docker image till DockerHub men bara om testerna från CI passerar. Ni uppnår det genom att från det nya workflow:et återanvända det som tester koden.
- CD kedjan ska bara köras vid ny tagg, inte varje kommit.
- Ni får inte använda latest taggen, ni ska ha unika taggar för varje ny release. T.ex. använd er semantiska version som tagg.
Lägg till funktionaliteten att följa andras blogginlägg. Jobba igenom Kom igång med followers.
- När ni är klara med det, skapa en ny release i git. CD kedjan ska bygga och publicerar en ny image med funktionaliteten.
Tagga repot, följ semantiska versionshantering fast börja på siffran 11.0.0. Jag har redan taggar detta repo och då kan ni inte börja på 0. Om ni får komplettering på en inlämning öka versionen.
Välj en av era servrar som produktionsserver.
- Installera Docker på er server.
- Driftsätt er nya Docker imagen på den.
- Koppla er image mot en MySQL Docker container. Tänk på att data ska ligga som en volym. Så att all data inte försvinner vid en omstart.
- Sätt upp Nginx med HTTPS så man kommer åt er Microblog via ett av era domännamn.
#Resultat & Redovisning
Svara på nedanstående frågor individuellt, lämna in på Canvas tillsammans med länken till ert gemensamma GitHub-repo och domännamn till microblog sidan.
Se till att följande frågor besvaras i texten:
Vad var din uppfattning av devops innan kursen började?
Hur skulle du definiera devops än så länge?
Har du använt Docker förut? Gick det bra att använda det nu?
Hur används Docker inom devops?
Vad är Continuous Delivery?
Hur var storleken på kursmomentet? Vad tycker du om upplägget på kursmomentet?
Veckornas TIL?
#Revision history
- 2023-10-24: (A, aar) Ny version inför v2. Sammanslagning av kmom01 och kmom02