GitHub Actions CI CD Workflow
GitHub Actions: CI/CD Workflows
GitHub Actions ermöglicht automatisierte Workflows direkt im Repository. Testen, bauen und deployen Sie Code automatisch bei jedem Push oder Pull Request.
Grundkonzepte
- Workflow: Automatisierter Prozess (YAML-Datei)
- Job: Gruppe von Steps auf einem Runner
- Step: Einzelne Aufgabe (Befehl oder Action)
- Action: Wiederverwendbare Komponente
- Runner: Server der den Workflow ausführt
Erster Workflow
# .github/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Code auschecken
uses: actions/checkout@v4
- name: Node.js einrichten
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
- name: Abhängigkeiten installieren
run: npm ci
- name: Tests ausführen
run: npm test
- name: Build erstellen
run: npm run build
Trigger-Events
on:
# Bei Push
push:
branches: [ main ]
paths:
- 'src/**'
- '!**.md'
# Bei Pull Request
pull_request:
types: [ opened, synchronize ]
# Zeitgesteuert (Cron)
schedule:
- cron: '0 2 * * *' # Täglich 2 Uhr
# Manuell
workflow_dispatch:
inputs:
environment:
description: 'Deployment-Umgebung'
required: true
default: 'staging'
Matrix-Builds
jobs:
test:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [18, 20, 22]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- run: npm test
Secrets verwenden
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Deploy via SSH
env:
SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SERVER: ${{ secrets.SERVER_IP }}
run: |
echo "$SSH_KEY" > key.pem
chmod 600 key.pem
ssh -i key.pem user@$SERVER "cd /app && git pull"
Artifacts speichern
steps:
- name: Build
run: npm run build
- name: Artifact hochladen
uses: actions/upload-artifact@v4
with:
name: build-output
path: dist/
retention-days: 7
Docker Image bauen & pushen
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Docker Hub Login
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_TOKEN }}
- name: Build und Push
uses: docker/build-push-action@v5
with:
push: true
tags: user/app:latest
Deployment-Workflow
name: Deploy to Production
on:
release:
types: [ published ]
jobs:
deploy:
runs-on: ubuntu-latest
environment: production
steps:
- uses: actions/checkout@v4
- name: Deploy to Server
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/app
git pull origin main
npm install --production
pm2 restart app
Nützliche Actions
| Action | Beschreibung |
|---|---|
actions/checkout |
Repository auschecken |
actions/setup-node |
Node.js einrichten |
actions/cache |
Abhängigkeiten cachen |
docker/build-push-action |
Docker Images |
appleboy/ssh-action |
SSH-Befehle |
Weitere Hilfe
- 📖 GitHub Actions Dokumentation
- 📧 E-Mail: support@enjyn.de