Maak een aangepaste GitLab CI-pijplijn voor mijn project
description
Met deze prompt kan ik een op maat gemaakte GitLab CI-pijplijn ontvangen die perfect aansluit bij de technologieën en deploymentdoelen van mijn project, waardoor ik builds, tests en deployments effectief kan automatiseren en mijn huidige uitdagingen kan oplossen.
prompt
try_prompt
Help me een GitLab CI-pijplijn te ontwerpen die is afgestemd op mijn projectvereisten. Geef de fasen, taken en scripts die ik moet opnemen voor: < ... more
generate_helper
...
tags
ai_answers
provider: openai
model: gpt-4.1-nano
Natuurlijk! Hier is een voorstel voor een GitLab CI/CD-pijplijn voor jouw Node.js webapplicatie, met automatische build, testen, en zero-downtime deployment via SSH naar een Linux productie server.
**Fasen:**
1. **stages:** defineer de fasen van de pijplijn.
2. **build:** installeer dependencies en bouw de applicatie.
3. **test:** voer tests uit.
4. **deploy:** deploy naar productie met zero downtime.
---
**.gitlab-ci.yml voorbeeld:**
```yaml
stages:
- build
- test
- deploy
variables:
SSH_USER: "your_user"
SSH_HOST: "your.server.com"
SSH_KEY: "$SSH_PRIVATE_KEY" # Zet je private SSH key als CI/CD variabele
APP_DIR: "/var/www/yourapp"
BACKUP_DIR: "/var/www/yourapp_backup"
TEMP_DIR: "/tmp/deploy_temp"
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_KEY" | tr -d '\r' | ssh-add -
build:
stage: build
image: node:18
script:
- npm install
- npm run build # indien je build script hebt
artifacts:
paths:
- node_modules/
- dist/ # of de build output directory
test:
stage: test
image: node:18
dependencies:
- build
script:
- npm test
deploy:
stage: deploy
image: alpine:latest
dependencies:
- build
environment: production
script:
- apk add --no-cache openssh bash
- |
# Maak backup van huidige app
ssh "$SSH_USER@$SSH_HOST" "cp -r $APP_DIR ${BACKUP_DIR}_$(date +%Y%m%d%H%M%S)"
- |
# Upload nieuwe build naar tijdelijke directory op server
scp -r dist/ "$SSH_USER@$SSH_HOST:$TEMP_DIR"
- |
# Zero-downtime deployment via symlinks
ssh "$SSH_USER@$SSH_HOST" bash -c "
set -e
# Maak nieuwe release directory
RELEASE_DIR=\$APP_DIR/releases/\$(date +%Y%m%d%H%M%S)
mkdir -p \$RELEASE_DIR
# Kopieer bestanden naar release directory
cp -r $TEMP_DIR/* \$RELEASE_DIR/
# Update symlink
ln -sfn \$RELEASE_DIR $APP_DIR/current
# (optioneel) herstart applicatie of server
# Bijvoorbeeld: pm2 restart app
"
- |
# Verwijder tijdelijke bestanden
ssh "$SSH_USER@$SSH_HOST" "rm -rf $TEMP_DIR"
```
**Uitleg:**
- **Build-fase:** installeert dependencies en bouwt de app.
- **Test-fase:** voert tests uit op de build.
- **Deploy-fase:**
- Maakt een backup van de huidige live app.
- Uploadt de nieuwe build naar een tijdelijke directory op de server.
- Verplaatst de bestanden naar een nieuwe release directory.
- Wijzigt de symlink `current` naar de nieuwste release (zero downtime).
- (Optioneel) herstart de Node.js applicatie via bijvoorbeeld `pm2`.
**Aanpassingen:**
- Vervang `your_user`, `your.server.com`, en paden door jouw gegevens.
- Zorg dat je SSH-sleutels correct zijn ingesteld in GitLab CI/CD variabelen.
- Pas eventueel de deployment scripts aan afhankelijk van jouw setup (bijv. gebruik van pm2, nginx, etc.).
Dit schema geeft een solide basis voor een geautomatiseerde, betrouwbare, en zero-downtime deployment van jouw Node.js webapplicatie.
provider: deepseek
model: deepseek-chat
no_answer_for_language
error: Generation failed [deepseek] prompt_id=2064 locale=nl err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=en err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=de err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=fr err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=pt err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=es err=DeepSeek connection/timeout | Generation failed [deepseek] prompt_id=2064 locale=zh err=DeepSeek connection/timeout

