CI CD - arnodeco/project GitHub Wiki

CI/CD

Inleiding tot CI/CD

CI/CD staat voor Continuous Integration en Continuous Deployment. Deze softwareontwikkeling methoden richten zich op het automatiseren en verbeteren van het proces van softwarelevering. Dankzij CI/CD kunnen ontwikkelaars snel en betrouwbaar nieuwe code integreren, testen en uitrollen naar productieomgevingen.

Waarom gebruik maken van CI/CD?

  • Snellere feedback en iteratie

CI/CD stelt ontwikkelaars in staat om continu code te integreren en te testen, wat snelle feedback mogelijk maakt. Hierdoor kunnen problemen sneller worden opgespoord en opgelost, wat de ontwikkelcyclus versnelt en de kwaliteit van de software verbetert.

  • Automatisering en betrouwbaarheid

Door bouw-, test- en implementatieprocessen te automatiseren, zorgt CI/CD voor een betrouwbare en consistente softwarelevering. Automatisering vermindert de kans op menselijke fouten en zorgt voor herhaalbare processen, wat de betrouwbaarheid verhoogt.

  • Verbeterde samenwerking

CI/CD bevordert de samenwerking tussen ontwikkelaars via versiebeheer en geautomatiseerde integratie. Dit maakt het voor teams gemakkelijker om samen te werken en codewijzigingen te integreren, ongeacht hun locatie.

  • Verhoogde release-frequentie

Met CI/CD kunnen organisaties vaker en betrouwbaarder nieuwe versies uitbrengen. Hierdoor komen nieuwe functies en verbeteringen sneller bij de eindgebruikers, wat de gebruikerservaring verbetert en een concurrentievoordeel oplevert.

CI/CD Pipeline Componenten

Source Code Management (SCM)

SCM-systemen zoals Git worden gebruikt voor het beheren van broncode en versiebeheer. Ontwikkelaars checken code in en uit SCM-repositories om samen te werken en wijzigingen bij te houden.

Continuous Integration (CI)

CI-servers zoals Jenkins, GitLab en CircleCI bouwen en testen automatisch codewijzigingen. CI stelt ontwikkelaars in staat om hun code continu te integreren en te valideren via geautomatiseerde tests.

Continuous Deployment (CD)

CD-tools sturen applicaties automatisch naar verschillende omgevingen (review, staging, productie).

Basiscommando's voor CI/CD Tools

Git Clone

Gebruik dit om een repository naar je lokale machine te klonen.

git clone <repository_url>

Git Commit

Met dit commando kan je wijzigingen vastleggen in je repository en eigen boodschap toevoegen die verduidelijkt wat je precies hebt veranderd.

git commit -m "Commit boodschap"

Git Push

Met git push stuur je je lokale bestanden/wijzegingen naar je repository. Hiervoor moet je specifiëren op welke branch je het wilt zetten.

git push origin <branch_naam>

Docker Build

Met Docker Build bouw je een image gebaseerd op je configuraties in je Dockerfile.

docker build <image>

Docker Push

%et Docker Push kan je je Docker image gaan pushen/plaatsen in je Docker registry.

docker push <image>

YAML Configuratie voor CI/CD

Voorbeeld van een eenvoudige CI/CD-configuratie in GitLab CI/CD:

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the application..."

test_job:
  stage: test
  script:
    - echo "Running tests..."

deploy_job:
  stage: deploy
  script:
    - echo "Deploying to production..."

Bron voorbeeld code

CI/CD - Opdracht

1. Broncode van de app klonen

Voor we de applicatie gaan kunnen uitvoeren moeten we natuurlijk de broncode lokaal op onze pc zetten. Dit kan je doen door volgend git commando uit te voeren in bijvoorbeeld Visual Studio Code:

git clone https://github.com/docker/getting-started-app.git

image

Note

Indien de gekloonde app niet automatisch wordt geopend, kan je deze handmatig openen in VS Code. Je vind de app terug in de directory waar je het git commando uitvoerde. In mijn geval is dat dus in het mapje 'arnod' in de 'Users' map op mijn C-schijf.


2. Dockerfile aanmaken

Eens je de getting-started-app hebt gekloond en geopend, ga je een Dockerfile aanmaken ter hoogte van het package.json bestand. In dit bestand voeg je dan volgende code toe:

# syntax=docker/dockerfile:1

FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000

image image

Important

Vergeet dit bestand uiteraard niet op te slaan (CTRL + S).


3. Image bouwen met de terminal

Nu dat je de Dockerfile hebt aangemaakt met de benodigde criteria, check je eerst of de Docker applicatie open staat op je computer (anders kan hij de app niet bouwen). Als dat gebeurt is ga je de image bouwen door het volgende commando uit te voeren in de terminal van Visual Studio Code:

docker build -t getting-started .
image

Note

Je terminal zou er ongeveer zo moeten uitzien.


4. Een app-cointainer starten

Nu dat je afbeelding gebouwd is kan je deze ook gaan uitvoeren in een container. Dit kan je doen met het volgende commando:

docker run -dp 127.0.0.1:3000:3000 getting-started

Note

-dp voert de container op de achtergond uit (--detach) en creëert een poorttoewijzing tussen de host en de container (--publish). In dit geval publiceert poort 3000 van de container naar 127.0.0.1:3000 oftewel localhost:3000 op de host. Als je geen poorttoewijzing definieert zou je geen toegang hebben tot de app vanaf de host.


Je kan altijd dubbelchecken in de Docker app of de container effectief werd aangemaakt en opgestart:

image

5. Je applicatie openen

Nu dat de image werd gebouwd en je deze hebt gestart in een container, kan je deze gebruiken op de poort die je eerder definieerde. In dit geval is dat dus op http://localhost:3000.

image

Voeg wat items toe om te testen of de app correct werkt:

image

6. Applicatie toevoegen aan de repository

Nu dat we succesvol een app hebben gebouwd en gestart kunnen we deze gaan toevoegen aan de Github repository zodat we er een Github Actions Workflow mee kunnen maken.
Dit kan je doen door je lokale directory te verbinden met de Github repo met volgende commando:

git remote add origin https://github.com/arnodeco/project.git

Vervolgens ga je je lokale bestanden toevoegen en comitten aan de hand van:

git add .
git commit -m "Bestanden toevoegen aan repo"

Nu kan je dan eindelijk je bestanden gaan pushen naar je repo met dit commando:

git push -u origin main

Als alles goed is gegaan, zal je nu je bestanden in je Github repository zien staan.

image

8. Directory aanmaken op Docker Hub

Nu zal je eerst een directory moeten aanmaken op Docker Hub waarmee je jouw action zal verbinden. Dit doe je door in te loggen op Docker Hub en vervolgens een nieuwe repository aan te maken. Je hoeft hier niets in te plaatsen, aangezien onze Workflow Action dit automatisch zal doen.

image

9. Docker Hub inloggegevens toevoegen aan GitHub Secrets

In de stap 10 zullen we een workflow bestand aanmaken, maar die maakt gebruik van je inloggegevens van Docker Hub om te kunnen verbinden. Het is natuurlijk niet zo veilig om je inloggegevens rechtstreeks hier in te plaatsen, daarom zullen we gebruik maken van GitHub secrets om je Docker Hub passwoord en username te definiëren en geheim te houden.


Je doet dit door bovenaan naar de Settings te navigeren en links onder Secrets and Variables op Actions te klikken. Hier kan je dan twee nieuwe repository secrets toevoegen voor zowel je Docker Hub username als je password. Doe dit met de volgende naamgevingen: DOCKER_USERNAME en DOCKER_PASSWORD.

Untitled image

10. Workflow bestand aanmaken

Om een Action Workflow te kunnen maken die de Docker image gaat bouwen en pushen, hebben we een workflow bestand nodig. Hiervoor maak je eerst een mapje .github/workflows in je directory. In dit mapje steek je vervolgens een yml bestand. In dit geval noem ik het docker-image.yml.

image

In dit bestand ga vervolgens deze code plakken:

name: Docker image build and push

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Set up Docker Buildx
      uses: docker/setup-buildx-action@v2

    - name: Log in to Docker Hub
      uses: docker/login-action@v2
      with:
        username: ${{ secrets.DOCKER_USERNAME }}
        password: ${{ secrets.DOCKER_PASSWORD }}

    - name: Build and push Docker image
      uses: docker/build-push-action@v2
      with:
        push: true
        tags: gebruikersnaam/repo-naam:latest

Important

gebruikersnaam/repo-naam:latest moet overeen komen met de repository die je aanmaakte op Docker Hub in stap 8. In mijn geval is dat dus arnodeco/docker-image:latest.

Note

Merk op hoe username en password in dit bestand worden gedefinieerd aan de hand van de repository secrets die we in stap 9 toevoegde!


11. Workflow bestand pushen

Nu dat je je workflow bestand hebt aangemaakt ga je deze pushen naar je Github repository en dan zal je zien dat de Workflow action wordt toegevoegd bij Actions!


Je workflow bestand pushen doe je aan de hand van deze commando's:

git add .github/workflows/docker-image.yml
git commit -m "Github Actions Workflow bestand toevoegen"
git push origin main

Wacht nu enkele seconden en je zal onder de Actions tab je Action Workflow in actie zien!

Untitled 2 image
⚠️ **GitHub.com Fallback** ⚠️