Ich frickel gerne mit Technik rum. Dazu gehören auch Build-Pipelines in GitLab und letztes Wochenende hab ich mal wieder eine neue aufgesetzt.
Ich wollte gerade den “alten” Blogpost dazu nachlesen und dabei ist mir aufgefallen, wie mein erstes Projekt “Blog per Hugo” unverbloggt blieb, weil ich nie die Musse hatte, das richtig zu verschriftlichen.
Jetzt bin ich auf AstroJS umgestiegen, hab ein Buildfile dafür gebastelt und hab sicher wieder keine Musse, das zu verblogen.
Falls jemand auch mit AstroJS und GitLab-CI bloggen will, hier wenigstens mal mein .gitlab-ci.yml:
stages:
- deploy
variables:
NODE_ENV: production
ASTRO_OUTPUT_DIR: dist
cache:
paths:
- node_modules/
build:
stage: deploy
image: node:bookworm-slim
tags:
- astrojs
before_script:
- apt-get update -y
- apt-get install -y --no-install-recommends openssh-client rsync
- corepack prepare pnpm@latest --activate
- corepack install --global pnpm@latest
- corepack enable
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
script:
- pnpm install ci
- npx astro build
- rsync -av --delete $ASTRO_OUTPUT_DIR/ $DEPLOY_USER@$DEPLOY_HOST:$DEPLOY_PATH
only:
- main
artifacts:
paths:
- $ASTRO_OUTPUT_DIR/
expire_in: 1h
Kurze Erklärung:
- Dein GitLab muss Docker Container starten können
- Du brauchst folgende Variablen in deinem GitLab-Projekt
- DEPLOY_USER - Benutzername für rsync
- DEPLOY_HOST - Server, auf dem die Webseite veröffentlicht werden soll, z.B. “myhost.example.com”
- DEPLOY_PATH - Verziechnispfad, in dem die HTML-Dateien abgelegt werden, z.B. “/var/www/html/”
- SSH_PRIVATE_KEY - Der private SSH-Key, mit dem ein rsync bzw. SSH-Login auf dem Ziel möglich ist.
Die Variablen trägst du einfach in GitLab unter Settings -> CI/CD im Bereich “Variables” ein.
Vorsich: rsync -av —delete löscht am Ziel alle Dateien, die nicht in der Quelle vorkommen. Wer zu letzt lacht, hat ein Backup!