In diesem Tutorial wird Schritt für Schritt gezeigt, wie du eine zunehmend komplexere CI/CD-Pipeline in GitLab erstellst. Dabei wird eine einfache Pipeline konfiguriert, die im Laufe des Tutorials um zusätzliche Funktionalitäten erweitert wird. Am Ende hast du ein voll funktionsfähiges Projekt auf GitLab.com mit einer funktionierenden Dokumentationswebsite, die mit Docusaurus erstellt wurde.
Zuerst musst du ein GitLab-Projekt erstellen, das die Docusaurus-Dateien enthält.
git clone git@gitlab.com:my-username/my-pipeline-tutorial-project.git pipeline-tutorial
cd pipeline-tutorial
npm init docusaurus
Der Docusaurus-Wizard erstellt die Seite im Verzeichnis
website/
. Bewege die Dateien in das Stammverzeichnis und
lösche den Ordner website
:
mv website/* .
rm -r website
Aktualisiere die Konfigurationsdatei
docusaurus.config.js
, um die URL und das Basisverzeichnis
deines Projekts anzupassen.
Erstelle eine einfache .gitlab-ci.yml
Datei, um
sicherzustellen, dass CI/CD aktiviert ist und die Runner verfügbar
sind.
test-job:
script:
- echo "This is my first job!"
- date
Füge diese Datei in das Stammverzeichnis des Projekts ein und committe die Änderungen. Die Pipeline startet automatisch und zeigt die Ergebnisse des Jobs im GitLab-Interface an.
Ein häufiges Szenario in CI/CD ist das Bauen des Projekts. Erstelle einen Build-Job für die Docusaurus-Website.
build-job:
image: node
script:
- npm install
- npm run build
artifacts:
paths:
- "build/"
Die Build-Dateien werden im Verzeichnis build/
gespeichert und als Artefakte verwendet.
Nun fügen wir einen Deploy-Job hinzu, der die gebaute Website bereitstellt.
stages:
- build
- deploy
build-job:
stage: build
image: node
script:
- npm install
- npm run build
artifacts:
paths:
- "build/"
pages:
stage: deploy
script:
- mv build/ public/
artifacts:
paths:
- "public/"
GitLab Pages wird verwendet, um die statische Seite zu hosten. Nachdem die Pipeline abgeschlossen ist, kann die Website unter der URL deines GitLab-Pages-Projekts aufgerufen werden.
Erstelle nun Test-Jobs, um die Markdown- und HTML-Dateien zu validieren.
lint-markdown:
stage: test
image: node
script:
- npm install markdownlint-cli2 --global
- markdownlint-cli2 "blog/**/*.md" "docs/**/*.md"
allow_failure: true
test-html:
stage: test
image: node
script:
- npm install --save-dev htmlhint
- npx htmlhint build/
Der Markdown-Linting-Job prüft die Formatierung der Markdown-Dateien, und der HTML-Linting-Job überprüft den erzeugten HTML-Code.
Ein idealer Workflow beinhaltet das Arbeiten mit Feature-Branches und Merge Requests. Verwende Regeln, um sicherzustellen, dass der Deploy-Job nur für den Standard-Branch ausgeführt wird.
build-job:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
pages:
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
Vermeide redundante Konfigurationen durch den Einsatz von
extends
und default
. Füge eine standardisierte
Regel ein, die von mehreren Jobs wiederverwendet wird.
default:
image: node
.standard-rules:
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
build-job:
extends: .standard-rules
stage: build
script:
- npm install
- npm run build
pages:
image: busybox
stage: deploy
script:
- mv build/ public/