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
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: < ...
try_prompt
generate_helper
disclaimerOnPageApi
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