Maak een GitHub Actions Workflow voor Geautomatiseerde Omgevingsspecifieke Configuratie
description
Helpt bij het automatiseren en centraliseren van omgevingsspecifieke configuratie binnen GitHub Actions workflows, waardoor handmatige fouten verminderen en de consistentie van deployments over verschillende omgevingen verbetert.
prompt
Help me een GitHub Actions workflow te maken die automatisch omgevingsspecifieke configuraties toepast tijdens het CI/CD proces. Projecttype: <voer je projecttype in, bijvoorbeeld Node.js, Python>. Omgevingen om te ondersteunen: <noem de deployment omgeving ...
try_prompt
generate_helper
disclaimerOnPageApi
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Hier is een uitgebreide GitHub Actions workflow die automatisch omgevingsspecifieke configuraties toepast op basis van de branch of tag. Deze workflow ondersteunt development, staging en productie omgevingen en kopieert het juiste .env-bestand naar een standaard locatie voor je buildproces.
```yaml
name: CI
on:
push:
branches:
- main
- staging
- production
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set environment
id: env
run: |
if [[ "${GITHUB_REF}" == "refs/heads/main" ]]; then
echo "ENVIRONMENT=development" >> $GITHUB_ENV
echo "ENV_FILE=.env.dev" >> $GITHUB_ENV
elif [[ "${GITHUB_REF}" == "refs/heads/staging" ]]; then
echo "ENVIRONMENT=staging" >> $GITHUB_ENV
echo "ENV_FILE=.env.staging" >> $GITHUB_ENV
elif [[ "${GITHUB_REF}" == "refs/heads/production" ]]; then
echo "ENVIRONMENT=production" >> $GITHUB_ENV
echo "ENV_FILE=.env.prod" >> $GITHUB_ENV
else
echo "Onbekende branch, standaard omgeving wordt gebruikt."
echo "ENVIRONMENT=development" >> $GITHUB_ENV
echo "ENV_FILE=.env.dev" >> $GITHUB_ENV
fi
- name: Kopieer omgevingsconfiguratie
run: |
cp ${{ env.ENV_FILE }} .env
- name: Install dependencies
run: npm install
- name: Build
run: npm run build
```
**Uitleg:**
- De workflow wordt getriggerd bij pushes naar de `main`, `staging` en `production` branches.
- De stap "Set environment" bepaalt welke omgeving actief is op basis van de branch en stelt de variabelen `ENVIRONMENT` en `ENV_FILE` in.
- Daarna wordt het juiste `.env`-bestand gekopieerd naar de hoofdmap (of een andere locatie afhankelijk van je projectstructuur) zodat je buildproces de juiste configuratie gebruikt.
- Vervolgens worden dependencies geïnstalleerd en de build uitgevoerd.
**Aanpassingen:**
- Pas de branchnamen aan indien je andere namen gebruikt.
- Indien je `.env`-bestanden zich op een andere locatie bevinden of je een ander pad gebruikt, pas de `cp`-commando aan.
- Je kunt deze workflow uitbreiden met deployment-stappen afhankelijk van je deploymentproces.
Heeft je nog verdere wensen of vragen?
provider: deepseek
model: deepseek-chat
Zeker, hier is een aangepaste GitHub Actions workflow die automatisch omgevingsspecifieke configuraties toepast voor jouw Node.js project:
```yaml
name: CI/CD
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- environment: development
env-file: .env.dev
- environment: staging
env-file: .env.staging
- environment: production
env-file: .env.prod
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Copy environment file
run: cp ${{ matrix.env-file }} .env
- name: Build application
run: npm run build
- name: Run tests
run: npm test
- name: Deploy to environment
if: matrix.environment != 'development'
run: echo "Implementeer hier jouw deploy script voor ${{ matrix.environment }}"
# Voorbeeld: npm run deploy:${{ matrix.environment }}
```
**Belangrijke aanpassingen en uitleg:**
1. **Matrix Strategy**: De workflow gebruikt een matrix om parallel builds voor alle omgevingen uit te voeren
2. **Omgevingsspecifieke bestanden**: Elke omgeving gebruikt zijn eigen .env bestand
3. **Conditionele deploy**: Alleen staging en productie worden gedeployed (development is alleen build/test)
4. **Node.js setup**: Toegevoegd voor betere caching en versiebeheer
**Aanvullende aanbevelingen:**
1. **Secrets voor productie**:
```yaml
- name: Deploy to production
if: matrix.environment == 'production'
run: |
echo "${{ secrets.PROD_DEPLOY_KEY }}" > deploy_key
chmod 600 deploy_key
# Voeg hier je deploy commando toe
```
2. **Omgevingsspecifieke triggers**:
```yaml
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
```
3. **Voor .env bestanden structuur**:
```
# .env.dev
NODE_ENV=development
API_URL=http://localhost:3000
# .env.staging
NODE_ENV=staging
API_URL=https://staging.api.com
# .env.prod
NODE_ENV=production
API_URL=https://api.com
```
Deze workflow zorgt ervoor dat elke omgeving de juiste configuratie krijgt tijdens het CI/CD proces!