CI/CD pipeline opzetten met GitHub Actions
CI/CD-pipeline opzetten met GitHub Actions
Dit artikel legt uit hoe je een CI/CD-pipeline opzet met GitHub Actions, bedoeld voor ontwikkelaars die hun build-, test- en deployproces willen automatiseren.
Vereisten
- Een GitHub-account met een repository waarin je code staat - Git 2.40.0 of nieuwer geïnstalleerd op je lokale machine - Toegang tot de repository-instellingen (minimaal `write`-rechten) - Een project met een ondersteunde programmeertaal (Node.js 20.x, Python 3.11, Java 17, of vergelijkbaar) - Optioneel: een deployment-target zoals een VPS, cloudplatform, of containerregister
Stappen
1. Maak de workflowdirectory aan
GitHub Actions leest workflowbestanden uit de `.github/workflows`-directory in de root van je repository. Maak deze directory aan:
mkdir -p .github/workflows
2. Maak het workflowbestand aan
Maak een nieuw bestand aan met de naam `ci.yml` in de `.github/workflows`-directory. Dit bestand definieert de volledige pipeline in YAML-formaat.
touch .github/workflows/ci.yml
3. Definieer de workflowtrigger
Open `.github/workflows/ci.yml` in je editor. Begin met de naam van de workflow en de triggers. De `push`-trigger start de pipeline bij elke commit naar `main`, de `pull_request`-trigger bij elke pull request naar `main`:
name: CI/CD Pipeline</p><p>on:
push:
branches: [main]
pull_request:
branches: [main]4. Configureer de build-job
Voeg een job toe die het project bouwt. Deze job draait op een Ubuntu-runner met Node.js 20. De `actions/checkout@v4`-action haalt de code op, en `actions/setup-node@v4` installeert de juiste Node.js-versie:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm run build5. Voeg een testjob toe
Voeg een tweede job toe die tests draait. Deze job is afhankelijk van de build-job via `needs`, zodat tests alleen draaien als de build slaagt. Gebruik `actions/upload-artifact@v4` om buildresultaten te bewaren:
test:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
- run: npm test
- uses: actions/upload-artifact@v4
with:
name: test-results
path: test-results/6. Voeg een deployment-job toe
Voeg een deployment-job toe die alleen draait bij pushes naar `main`, niet bij pull requests. Gebruik `if` om dit te controleren. Deze job gebruikt secrets voor credentials — bewaar die in de repository-instellingen onder Settings → Secrets and variables → Actions:
deploy:
needs: test
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npm run build
- name: Deploy to production
run: |
rsync -avz --delete dist/ user@yourserver.com:/var/www/html/
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}7. Commit en push
Commit de workflowbestanden en push ze naar GitHub. De pipeline start automatisch:
git add .github/workflows/ci.yml
git commit -m "Add CI/CD pipeline with GitHub Actions"
git push origin main8. Controleer de workflowuitvoering
Ga naar je repository op GitHub. Klik op de tab Actions in de bovenste navigatiebalk. Je ziet de workflow die zojuist gestart is. Klik erop om de uitvoering van elke stap te volgen. Foutmeldingen verschijnen direct in de loguitvoer.
Verificatie
Controleer of de pipeline correct draait door de status van de laatste run te bekijken:
gh run list --limit 5
Dit commando toont de laatste vijf workflowruns met hun status (`completed`, `success`, `failure`). Je hebt hiervoor de GitHub CLI (versie 2.40.0 of nieuwer) nodig, geïnstalleerd en geauthenticeerd met `gh auth login`.
Veelgestelde problemen
1. Workflow start niet
Controleer of het bestand `ci.yml` exact in `.github/workflows/` staat, niet in een subdirectory. Controleer ook of de YAML-syntax correct is — een verkeerde indentatie van één spatie zorgt ervoor dat GitHub het bestand negeert. Valideer de syntax met `npx yaml-lint .github/workflows/ci.yml`.
2. `npm ci` faalt met "package-lock.json not found"
`npm ci` vereist een `package-lock.json`-bestand. Genereer dit lokaal met `npm install` en commit het bestand, of vervang `npm ci` door `npm install` in de workflow.
3. Deployment faalt met "Permission denied (publickey)"
De SSH-sleutel die je in het secret `SSH_PRIVATE_KEY` hebt geplaatst, moet overeenkomen met een publieke sleutel in de `authorized_keys` van de doelgebruiker op de server. Test de verbinding eerst handmatig vanaf je lokale machine met `ssh -i /pad/naar/sleutel user@yourserver.com` voordat je de pipeline opnieuw draait.
Deze opzet geeft je een werkende CI/CD-pipeline met gescheiden build-, test- en deployfasen. Je kunt de jobs uitbreiden met extra stappen zoals containerbuilds, security-scans of notificaties — maar de basisstructuur blijft hetzelfde. De vraag is niet of je pipeline faalt, maar wanneer — en hoe snel je de logs weet te vinden die vertellen waarom.