Kmom01: Introduktion till devops och Docker

By . Latest revision .

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.

Chef Style DevOps Kungfu - Adam Jacob Keynote - ChefConf 2015.

I videon nedanför får vi en kortare genomgång som fokuserar mer på arbetsflödet.

Introduction to DevOps | Devops Tutorial for Beginners.

#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

#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:

Läs:

#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:

#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

#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

#Lästips

#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

  1. 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.
  2. 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.
  3. Skapa en Dockerfile för testning, docker/Dockerfile_test.

    • Vid start ska container köra make test och sen stänga ner.
      • mapparna app och tests ska inte kopieras in utan ligga som volymer.
      • installera requirements/test.txt Istället för prod.txt.
      • skapa en nytt skript som körs vid uppstart. Det ska köra make test, så alla tester körs.
    • 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 med docker-compose up test.
    • Om ni vill, ändra så testerna körs mot en MySQL server istället för SQLite.
  4. 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.
  5. 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 release, 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.
  6. 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.
  7. 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.

Hur det kan se ut när det är klart

#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:

  1. Vad var din uppfattning av devops innan kursen började?

  2. Hur skulle du definiera devops än så länge?

  3. Har du använt Docker förut? Gick det bra att använda det nu?

  4. Hur används Docker inom devops?

  5. Vad är Continuous Delivery?

  6. Hur var storleken på kursmomentet? Vad tycker du om upplägget på kursmomentet?

  7. Veckornas TIL?

#Revision history

  • 2023-10-24: (A, aar) Ny version inför v2. Sammanslagning av kmom01 och kmom02

Document source.