Ontwerp een GitHub Actions Workflow voor geautomatiseerde rollback bij falende implementaties
description
Met deze prompt kan de gebruiker een geavanceerde GitHub Actions workflow ontwikkelen die automatisch terugdraait bij foutieve implementaties. Dit vermindert downtime, verhoogt de stabiliteit van productieomgevingen en zorgt voor betrouwbare deploymentprocessen. Het biedt een praktische oplossing die verder gaat dan standaard deployment workflows door automatische herstelmechanismen te integreren.
prompt
Help me een GitHub Actions workflow te ontwerpen die automatisch een rollback uitvoert bij falende implementaties om de beschikbaarheid van mijn applicatie te garanderen. Huidige workflow configurati ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een aangepaste GitHub Actions workflow die automatisch een rollback uitvoert als de implementatie faalt. De workflow controleert de exit-code van het deploy-script en voert, indien nodig, een rollback uit.
```yaml
name: Node.js CI met Rollback
on:
push:
branches:
- main # of de relevante branch
jobs:
build-en-deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test
- name: Deploy
id: deploy
run: |
./deploy.sh
continue-on-error: true # Zorgt dat de workflow niet stopt bij een fout
- name: Check Deploy Result
id: deploy_check
run: |
if [ "${{ steps.deploy.outcome }}" != "success" ]; then
echo "Deploy mislukt, voer rollback uit..."
echo "rollback_needed=true" >> $GITHUB_OUTPUT
else
echo "Deploy succesvol."
echo "rollback_needed=false" >> $GITHUB_OUTPUT
fi
- name: Rollback uitvoeren
if: steps.deploy_check.outputs.rollback_needed == 'true'
run: |
echo "Start rollback..."
# Voeg hier je rollback commando's toe
./rollback.sh
```
**Uitleg:**
- `continue-on-error: true` zorgt dat de workflow doorgaat zelfs als `./deploy.sh` faalt.
- De stap `Check Deploy Result` controleert of de deploy geslaagd is door de outcome van de deploy-stap te bekijken.
- Als de deploy faalt, wordt de output `rollback_needed=true`.
- De rollback wordt alleen uitgevoerd als de deploy faalde, via de `if`-voorwaarde in de laatste stap.
**Belangrijk:**
- Zorg dat je `rollback.sh` script klaar hebt staan en correct werkt om je applicatie terug te zetten naar de vorige stabiele staat.
- Pas de branch name aan indien nodig.
- Test deze workflow goed in een staging- of testomgeving voordat je deze in productie gebruikt.
provider: deepseek
model: deepseek-chat
Hier is een aangepaste GitHub Actions workflow met automatische rollback-functionaliteit:
```yaml
name: Node.js CI met Rollback
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test
deploy:
runs-on: ubuntu-latest
needs: build
environment: production
steps:
- uses: actions/checkout@v2
- name: Maak backup van huidige versie
run: |
# Voeg hier je backup commando's toe voor AWS
echo "Backup maken van huidige deployment"
# Voorbeeld: aws s3 sync current-deployment/ backup-bucket/backup-$(date +%Y%m%d-%H%M%S)/
- name: Implementeer nieuwe versie
id: deploy
run: |
set +e
./deploy.sh
DEPLOY_EXIT_CODE=$?
echo "exit_code=$DEPLOY_EXIT_CODE" >> $GITHUB_OUTPUT
if [ $DEPLOY_EXIT_CODE -ne 0 ]; then
exit 1
fi
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Rollback bij falende implementatie
if: steps.deploy.outcome == 'failure'
run: |
echo "Implementatie gefaald - Uitvoeren rollback..."
# Voeg hier je rollback script toe voor AWS
# Voorbeeld: ./rollback.sh of aws commando's
echo "Rollback voltooid - Teruggekeerd naar vorige stabiele versie"
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
# Optioneel: Health check na implementatie
- name: Health check
if: steps.deploy.outcome == 'success'
run: |
echo "Health check uitvoeren..."
# Voeg health check commando's toe
# curl -f https://jouw-app.com/health || exit 1
notify:
runs-on: ubuntu-latest
needs: deploy
if: always()
steps:
- name: Notificatie sturen
run: |
if [ "${{ needs.deploy.result }}" == "success" ]; then
echo "Implementatie succesvol"
else
echo "Implementatie gefaald - Rollback uitgevoerd"
fi
```
**Belangrijke aanpassingen:**
- Gescheiden `build` en `deploy` jobs
- Backup stap voorafgaand aan implementatie
- Rollback wordt automatisch uitgevoerd bij exit code ≠ 0
- Environment configuratie voor betere tracking
- Optionele health check en notificaties
**Vereiste aanpassingen:**
1. Vul de AWS backup/rollback commando's aan met je specifieke implementatie
2. Configureer AWS credentials in GitHub Secrets
3. Pas de health check URL aan naar je applicatie
4. Implementeer een betrouwbaar backup/rollback mechanisme voor AWS
Let op: Zorg dat je rollback-script betrouwbaar is en getest is voordat je deze workflow in productie gebruikt.