slogan3

Ontwerp een GitHub Actions Workflow voor Geautomatiseerde Database Migraties

description

Met deze prompt kun je een betrouwbare en efficiënte GitHub Actions workflow ontwikkelen die automatische database migraties uitvoert. Dit lost het probleem op van handmatige en foutgevoelige migraties, verhoogt de consistentie van je databaseversies en integreert migratiebeheer naadloos in je CI/CD pipeline. Het is beter dan alternatieven omdat het specifiek rekening houdt met rollback strategieën en migratielogs, wat zorgt voor meer zekerheid tijdens deploys.

prompt

try_prompt

Help me een GitHub Actions workflow te ontwerpen die geautomatiseerde database migraties uitvoert als onderdeel van mijn CI/CD pipeline. Projecttype: <voer je projecttype in, bijvoorbeeld Node.js, Python>. Database type: <voer het type database in, bijvoorbeeld PostgreSQL, MySQL>. Migratie too ... more
generate_helper
disclaimerOnPageApi image_legal_disclaimer...

ai_answers

provider: openai
model: gpt-4.1-nano
Hier is een voorstel voor een GitHub Actions workflow die geautomatiseerde database migraties uitvoert met Flyway in een Node.js-project met PostgreSQL. De workflow voert migraties uit bij elke push, logt de migratie-uitkomsten, voert een rollback uit bij fouten en slaat de logs op in een S3-bucket. ```yaml name: CI met Database Migraties on: push: branches: - main # Pas aan naar jouw hoofdtak jobs: build: runs-on: ubuntu-latest env: POSTGRES_HOST: localhost POSTGRES_PORT: 5432 POSTGRES_DB: jouw_database_naam POSTGRES_USER: jouw_db_gebruiker POSTGRES_PASSWORD: jouw_db_wachtwoord S3_BUCKET: jouw-s3-bucket MIGRATION_LOG_PATH: migratie_log_$(date +%Y%m%d%H%M%S).log steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Node.js uses: actions/setup-node@v2 with: node-version: '14' # Pas aan indien nodig - name: Install dependencies run: npm install - name: Start PostgreSQL database uses: harmon758/postgresql-action@v1 with: postgresql-version: '13' # Pas aan indien nodig connection-string: postgres://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.POSTGRES_HOST }}:${{ env.POSTGRES_PORT }}/${ { env.POSTGRES_DB }} - name: Download Flyway CLI run: | wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/8.0.0/flyway-commandline-8.0.0-linux-x64.tar.gz | tar -xz sudo ln -s $(pwd)/flyway-8.0.0/flyway /usr/local/bin/flyway - name: Run Flyway Migration id: flyway_migration run: | # Voer migratie uit en log de output set +e flyway -url=jdbc:postgresql://${{ env.POSTGRES_HOST }}:${{ env.POSTGRES_PORT }}/${{ env.POSTGRES_DB }} \ -user=${{ env.POSTGRES_USER }} \ -password=${{ env.POSTGRES_PASSWORD }} \ -locations=filesystem:./migraties \ -logLevel=info \ migrate > migratie_log.txt 2>&1 EXIT_CODE=$? # Check op fouten if [ $EXIT_CODE -ne 0 ]; then echo "Migratie mislukt, uitvoeren rollback..." flyway -url=jdbc:postgresql://${{ env.POSTGRES_HOST }}:${{ env.POSTGRES_PORT }}/${{ env.POSTGRES_DB }} \ -user=${{ env.POSTGRES_USER }} \ -password=${{ env.POSTGRES_PASSWORD }} \ -locations=filesystem:./migraties \ -logLevel=info \ undo >> migratie_log.txt 2>&1 exit $EXIT_CODE fi # Sla de log op in een variabele cat migratie_log.txt continue-on-error: false - name: Upload migratie log naar S3 if: always() uses: jakejarvis/s3-sync-action@v0.5.1 with: args: --acl private migratie_log.txt s3://${{ env.S3_BUCKET }}/logs/${{ env.MIGRATION_LOG_PATH }} env: AWS_S3_BUCKET: ${{ env.S3_BUCKET }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_REGION: 'eu-west-1' # Pas aan indien nodig - name: Run Tests run: npm test ``` **Belangrijke punten:** - Vervang placeholder-waarden zoals `jouw_database_naam`, `jouw_db_gebruiker`, `jouw_db_wachtwoord`, en `jouw-s3-bucket` door je eigen gegevens. - Zorg dat je AWS credentials (`AWS_ACCESS_KEY_ID` en `AWS_SECRET_ACCESS_KEY`) als secrets hebt ingesteld in je GitHub repository. - De migraties moeten in de map `./migraties` staan volgens de Flyway configuratie. - De workflow voert een rollback uit bij migratiefouten (`undo`), zorg dat je migraties en undo scripts correct hebt ingesteld. - Je kunt de Flyway CLI versie aanpassen afhankelijk van je voorkeur. Mocht je aanvullende wensen of vragen hebben, dan help ik je graag verder!
provider: deepseek
model: deepseek-chat
Hier is een GitHub Actions workflow voor geautomatiseerde Flyway database migraties in je Node.js/PostgreSQL project: ```yaml name: CI with Database Migrations on: [push] env: AWS_REGION: 'eu-west-1' # Pas aan naar jouw regio S3_BUCKET: 'jouw-migratie-logs-bucket' # Vervang met jouw bucket naam jobs: build: runs-on: ubuntu-latest services: postgres: image: postgres:13 env: POSTGRES_PASSWORD: postgres POSTGRES_DB: test_db options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '18' cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Setup Flyway run: | wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/9.0.0/flyway-commandline-9.0.0-linux-x64.tar.gz | tar xvz sudo ln -s $PWD/flyway-9.0.0/flyway /usr/local/bin/flyway - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v4 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ env.AWS_REGION }} - name: Create Flyway configuration run: | cat > flyway.conf << EOF flyway.url=jdbc:postgresql://localhost:5432/test_db flyway.user=postgres flyway.password=postgres flyway.locations=filesystem:./migrations flyway.outOfOrder=true EOF - name: Execute migrations with rollback capability id: migrate continue-on-error: true run: | set -e # Start timing START_TIME=$(date +%s) # Create log file LOG_FILE="flyway_migration_$(date +%Y%m%d_%H%M%S).log" # Execute migration and capture output echo "Starting Flyway migration..." | tee $LOG_FILE flyway migrate -configFiles=flyway.conf 2>&1 | tee -a $LOG_FILE MIGRATION_EXIT_CODE=${PIPESTATUS[0]} END_TIME=$(date +%s) DURATION=$((END_TIME - START_TIME)) echo "Migration duration: ${DURATION}s" | tee -a $LOG_FILE if [ $MIGRATION_EXIT_CODE -eq 0 ]; then echo "SUCCESS: Migration completed successfully" | tee -a $LOG_FILE echo "status=success" >> $GITHUB_OUTPUT else echo "FAILED: Migration failed with exit code $MIGRATION_EXIT_CODE" | tee -a $LOG_FILE echo "status=failed" >> $GITHUB_OUTPUT echo "exit_code=$MIGRATION_EXIT_CODE" >> $GITHUB_OUTPUT fi # Upload log to S3 aws s3 cp $LOG_FILE s3://$S3_BUCKET/migration-logs/${GITHUB_SHA}/$LOG_FILE exit $MIGRATION_EXIT_CODE - name: Rollback on failure if: steps.migrate.outputs.status == 'failed' run: | echo "Executing rollback due to migration failure..." ROLLBACK_LOG="flyway_rollback_$(date +%Y%m%d_%H%M%S).log" # Attempt repair first flyway repair -configFiles=flyway.conf 2>&1 | tee $ROLLBACK_LOG # Then attempt baseline if repair doesn't work if [ ${PIPESTATUS[0]} -ne 0 ]; then echo "Repair failed, attempting baseline..." | tee -a $ROLLBACK_LOG flyway baseline -configFiles=flyway.conf 2>&1 | tee -a $ROLLBACK_LOG fi # Upload rollback log aws s3 cp $ROLLBACK_LOG s3://$S3_BUCKET/rollback-logs/${GITHUB_SHA}/$ROLLBACK_LOG echo "Rollback procedures completed" ``` ## Vereiste GitHub Secrets: - `AWS_ACCESS_KEY_ID` - AWS toegangssleutel - `AWS_SECRET_ACCESS_KEY` - AWS geheim toegangssleutel ## Vereiste projectstructuur: ``` project/ ├── migrations/ │ ├── V1__Initial_setup.sql │ ├── V2__Add_users_table.sql │ └── ... └── flyway.conf ``` ## Belangrijke kenmerken: 1. **Rollback functionaliteit**: Bij fouten worden repair en baseline commando's uitgevoerd 2. **Logging naar S3**: Alle migratie- en rollback logs worden opgeslagen in S3 3. **PostgreSQL service**: Geïntegreerde database voor testing 4. **Foutafhandeling**: Continue-on-error met gedetailleerde status tracking 5. **Flyway configuratie**: Aanpasbare database configuratie Pas de database credentials, AWS regio en S3 bucket naam aan volgens jouw omgeving.