Intensiv DevOps-uddannelse · Lektion

Bygning af Docker-images med Jenkins

Konfigurér Jenkins-jobs til automatisk at bygge og pushe Docker-images til et registry, når koden ændres.

Lektion 2 af 412 trin

Bygning af Docker-images med Jenkins er en gratis Intensiv DevOps-uddannelse-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Intensiv DevOps-uddannelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Automatisering af Docker-builds

Manuel opbygning af Docker-images kan være langsom, inkonsekvent og fejlbehæftet. Det gælder især i et teammiljø eller ved hyppige kodeændringer.

Automatisering er afgørende for pålidelig og effektiv softwarelevering. I denne lektion lærer vi, hvordan du integrerer Jenkins med Docker for at automatisere oprettelse og push af images.

Bygning af Docker-images med Jenkins — illustration 1

Forudsætninger for Jenkins og Docker

For at Jenkins kan bygge Docker-images, skal den kunne kommunikere med en Docker-daemon. Det betyder, at Docker-klienten skal være installeret på den maskine eller agent, hvor dit Jenkins-job skal køre.

Du skal også bruge:

  • En kørende Jenkins-server (fra lektion 1)
  • Adgang til et Docker-register (f.eks. Docker Hub)
  • En eksempelapplikation og dens Dockerfile

Installation af Docker på Jenkins-værten

Hvis Jenkins skal kunne udføre Docker-kommandoer, skal du sikre dig, at Docker er installeret og konfigureret på Jenkins-serveren eller -agenten. Jenkins-brugeren skal ofte have tilladelse til at kommunikere med Docker-dæmonen.

Sådan kan du konfigurere det på et 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

Sikring af registerlegitimationsoplysninger

Hvis Jenkins skal kunne pushe afbildninger til et Docker-register, skal Jenkins bruge legitimationsoplysninger. Det er vigtigt at gemme dem sikkert og ikke direkte i din Jenkinsfile eller jobkonfiguration.

Jenkins' indbyggede funktion Legitimationsoplysninger er velegnet til dette:

  • Gå til Administrer Jenkins > Administrer legitimationsoplysninger.
  • Tilføj en ny legitimationsoplysning af typen Brugernavn med adgangskode til dit Docker-register.
  • Giv den et beskrivende id (f.eks. dockerhub-credentials), så du kan henvise til den senere.

Eksempel på en Flask-applikation

Lad os bruge en meget enkel Python Flask-applikation. Vi placerer den i en fil med navnet app.py. Den viser en grundlæggende meddelelse med teksten 'Hello'.

Vi skal også bruge en requirements.txt-fil til at angive vores Python-afhængigheder.

# 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

Oprettelse af Dockerfile

Dernæst definerer vi vores Docker-afbildning ved hjælp af en Dockerfile. Denne fil instruerer Docker i, hvordan vores applikationsafbildning skal bygges.

Placér denne Dockerfile i samme mappe som din app.py og 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-job: Byggetrin

Lad os nu konfigurere et Jenkins Freestyle-job. Tilføj et trin af typen Udfør shell i sektionen Byggetrin. Denne kommando bygger din Docker-afbildning.

Husk at erstatte yourusername med dit Docker Hub-brugernavn eller din registersti.

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

Jenkins-job: Log ind- og push-trin

Efter at have bygget afbildningen skal vi pushe den til vores Docker-register. Det kræver typisk, at du logger ind. Vi bruger de legitimationsoplysninger, der blev gemt tidligere.

Tilføj endnu et trin af typen Udfør shell. Jenkins indsætter legitimationsoplysningerne som miljøvariabler (f.eks. DOCKER_USER og DOCKER_PASS), hvis det er konfigureret korrekt.

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

Automatisering af byggetriggere

Styrken ved CI/CD kommer fra automatisering. Jenkins kan automatisk udløse disse bygge- og push-job baseret på forskellige hændelser:

  • SCM-afstemning: Jenkins kontrollerer med jævne mellemrum dit Git-lager for nye commits.
  • Webhooks: Din Git-udbyder (GitHub, GitLab eller Bitbucket) sender en meddelelse til Jenkins, hver gang der pushes kode.
  • Overordnede projekter: Udløses, når et andet Jenkins-job er gennemført uden fejl.

Test af Jenkins-jobbet

Når du har konfigureret byggetrin og triggere, skal du gemme dit Jenkins-job. Du kan udløse en bygning manuelt for at teste det. Hold øje med konsoloutputtet for at se, om Docker-afbildningen bliver bygget og pushet uden fejl.

En vellykket kørsel betyder, at din CI-pipeline nu automatisk kan oprette og gemme nye Docker-afbildninger, hver gang din kode ændres!

Hurtigt tjek

Du har konfigureret et Jenkins-job til at bygge og pushe en Docker-afbildning. Dit Git-lager har nye kodeændringer.

Opsummering: Byg og push

Godt gået! I denne lektion lærte du, hvordan du:

  • forbereder dit Jenkins-miljø til interaktion med Docker
  • administrerer legitimationsoplysninger til Docker-registre sikkert i Jenkins
  • konfigurerer et Jenkins-job til at bygge en Docker-afbildning ved hjælp af en Dockerfile
  • pusher den nybyggede afbildning til et Docker-register
  • forstår forskellige måder at udløse automatiserede bygninger på

Automatisering af disse trin er en central del af Continuous Integration og danner grundlaget for Continuous Delivery!

Gratis at komme i gang

Lær Intensiv DevOps-uddannelse med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
142
Lektioner
568

Ofte stillede spørgsmål

Er lektionen “Bygning af Docker-images med Jenkins” gratis?

Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “Bygning af Docker-images med Jenkins”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Bygning af Docker-images med Jenkins”?

Konfigurér Jenkins-jobs til automatisk at bygge og pushe Docker-images til et registry, når koden ændres. Du øver dig i Intensiv DevOps-uddannelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Intensiv DevOps-uddannelse?

Der kræves ingen tidligere erfaring. Intensiv DevOps-uddannelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Bygning af Docker-images med Jenkins”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Intensiv DevOps-uddannelse-lektion?

Ja. Alle Intensiv DevOps-uddannelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Introduktion til Jenkins
  2. Bygning af Docker-images med Jenkins
  3. Automatiseret deployment med Jenkins
  4. Jenkins Pipeline as Code med Jenkinsfile
← Tilbage til Intensiv DevOps-uddannelse