Grunderna i Docker och DevOps · Lektion

Bygg Docker-images med Jenkins

Konfigurera Jenkins-jobb så att Docker-images automatiskt byggs och skickas till ett register när koden ändras.

Lektion 2 av 412 steg

Bygg Docker-images med Jenkins är en gratis lektion i Grunderna i Docker och DevOps på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Grunderna i Docker och DevOps, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Grunderna i Docker och DevOps innehåller totalt 4 lektioner.

Automatisera Docker-byggen

Att bygga Docker-avbildningar manuellt kan vara långsamt, inkonsekvent och felbenäget. Detta gäller särskilt i en teammiljö eller när koden ändras ofta.

Automatisering är nyckeln till tillförlitlig och effektiv programvaruleverans. I den här lektionen lär vi oss att integrera Jenkins med Docker för att automatisera skapandet och pushningen av avbildningar.

Bygg Docker-images med Jenkins — illustration 1

Förutsättningar för Jenkins och Docker

För att Jenkins ska kunna bygga Docker-avbildningar måste det kunna kommunicera med en Docker-daemon. Det innebär att Docker-klienten måste vara installerad på den maskin eller agent där Jenkins-jobbet ska köras.

Ni behöver även:

  • En körande Jenkins-server (från lektion 1)
  • Åtkomst till ett Docker-register (t.ex. Docker Hub)
  • En exempelapplikation och dess Dockerfile

Installera Docker på Jenkins-värden

För att Jenkins ska kunna köra Docker-kommandon måste Docker vara installerat och konfigurerat på Jenkins-servern eller -agenten. Jenkins-användaren behöver ofta behörighet att interagera med Docker-daemonen.

Så här kan Ni konfigurera det på ett Linux-system:

sudo apt-get update
sudo apt-get install -y docker.io
sudo usermod -aG docker jenkins
sudo systemctl restart docker
sudo systemctl restart jenkins

Skydda autentiseringsuppgifter för registret

För att skicka avbildningar till ett Docker-register behöver Jenkins autentiseringsuppgifter. Det är viktigt att lagra dem säkert, inte direkt i Jenkinsfile eller jobbkonfigurationen.

Jenkins inbyggda funktion Credentials passar perfekt för detta:

  • Gå till Manage Jenkins > Manage Credentials.
  • Lägg till en ny autentiseringsuppgift av typen Username with password för Ditt Docker-register.
  • Ge den ett beskrivande ID (till exempel dockerhub-credentials) som Ni kan referera till senare.

Exempel på en Flask-applikation

Vi använder en mycket enkel Python Flask-applikation. Vi lägger den i en fil med namnet app.py. Den visar meddelandet "Hello".

Vi behöver också en fil med namnet requirements.txt för att ange våra Python-beroenden.

# app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello from CoddyKit!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

# requirements.txt
Flask==2.0.2

Skapa Dockerfile

Nu definierar vi vår Docker-avbildning med hjälp av en Dockerfile. Den här filen instruerar Docker om hur avbildningen för vår applikation ska byggas.

Placera denna Dockerfile i samma katalog som app.py och requirements.txt.

# Dockerfile
FROM python:3.9-slim-buster
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
EXPOSE 5000
CMD ["python", "app.py"]

Jenkins-jobb: byggsteg

Nu konfigurerar vi ett Jenkins Freestyle-jobb. I avsnittet Build Steps lägger Ni till steget Execute shell. Det här kommandot bygger Er Docker-avbildning.

Kom ihåg att ersätta yourusername med Ditt Docker Hub-användarnamn eller sökvägen till registret.

# In Jenkins 'Execute shell' build step:
docker build -t yourusername/coddykit-app:latest .

Jenkins-jobb: logga in och skicka

Efter att avbildningen har byggts måste vi skicka den till vårt Docker-register. Det kräver vanligtvis att vi loggar in. Vi använder autentiseringsuppgifterna som lagrades tidigare.

Lägg till ytterligare ett steg av typen Execute shell. Jenkins injicerar autentiseringsuppgifterna som miljövariabler (till exempel DOCKER_USER och DOCKER_PASS) om de har konfigurerats korrekt.

# In Jenkins 'Execute shell' build step:
echo $DOCKER_PASS | docker login -u $DOCKER_USER --password-stdin
docker push yourusername/coddykit-app:latest

Automatisera byggutlösare

CI/CD:s styrka kommer från automatisering. Jenkins kan automatiskt utlösa dessa bygg- och skickningsjobb baserat på olika händelser:

  • SCM Polling: Jenkins kontrollerar regelbundet Git-förvaret efter nya commits.
  • Webhooks: Er Git-leverantör (GitHub, GitLab eller Bitbucket) skickar en avisering till Jenkins varje gång kod skickas.
  • Uppströmsprojekt: Utlöses när ett annat Jenkins-jobb har slutförts utan fel.

Testa Jenkins-jobbet

När Ni har konfigurerat byggstegen och utlösarna sparar Ni Jenkins-jobbet. Ni kan utlösa en build manuellt för att testa det. Kontrollera konsolutdata efter lyckad byggning och skickning av Docker-avbildningen.

En lyckad körning innebär att Er CI-pipeline nu automatiskt kan skapa och lagra nya Docker-avbildningar varje gång koden ändras!

Snabbkontroll

Ni har konfigurerat ett Jenkins-jobb som bygger och skickar en Docker-avbildning. Git-förvaret innehåller nya kodändringar.

Sammanfattning: bygg och skicka

Bra jobbat! I den här lektionen har Ni lärt Er att:

  • Förbereda Jenkins-miljön för interaktion med Docker.
  • Hantera autentiseringsuppgifter för Docker-register på ett säkert sätt i Jenkins.
  • Konfigurera ett Jenkins-jobb som bygger en Docker-avbildning med hjälp av en Dockerfile.
  • Skicka den nybyggda avbildningen till ett Docker-register.
  • Förstå olika sätt att utlösa automatiserade byggen.

Att automatisera dessa steg är en central del av Continuous Integration och lägger grunden för Continuous Delivery!

Gratis att börja

Lär dig Grunderna i Docker och DevOps med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
12
Lektioner
48

Vanliga frågor

Är lektionen ”Bygg Docker-images med Jenkins” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Grunderna i Docker och DevOps, inklusive ”Bygg Docker-images med Jenkins”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Grunderna i Docker och DevOps innehåller totalt 4 lektioner.

Vad lär jag mig i ”Bygg Docker-images med Jenkins”?

Konfigurera Jenkins-jobb så att Docker-images automatiskt byggs och skickas till ett register när koden ändras. Ni övar på Grunderna i Docker och DevOps med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Grunderna i Docker och DevOps?

Du behöver inga förkunskaper. Utbildningen i Grunderna i Docker och DevOps på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Bygg Docker-images med Jenkins”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Grunderna i Docker och DevOps-lektionen?

Ja. Varje Grunderna i Docker och DevOps-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Introduktion till Jenkins
  2. Bygg Docker-images med Jenkins
  3. Automatiserad driftsättning med Jenkins
  4. Jenkins Pipeline as Code med Jenkinsfile
← Tillbaka till Grunderna i Docker och DevOps