Sync-Deployment
Ziel
In diesem Projekt geht es um:
- bedingte Jobs
- Zugriff per SSH
- und die Review-Umgebung
Hilfsmittel
- Versuchen Sie zuerst, die unten stehenden Aufgaben mit Hilfe der Folien und des Cheatsheets zu lösen.
- Sollten Sie dabei Probleme haben, finden Sie bei jeder Aufgabe einen ausklappbaren Block, in dem der Lösungsweg beschrieben wird.
Aufgabe 1 - Bedingte Jobs
1.1 Pipeline Editor öffnen
- Öffnen Sie den Pipeline-Editor für ihr
gitlab-ci-demoapp
Projekt. - Löschen Sie den Inhalt der aktuelle
.gitlab-ci.yml
. - Fügen Sie folgende Vorlage ein:
stages:
- build
- test
- deploy
build:
stage: build
script:
- echo $CI_PIPELINE_SOURCE
- echo "Building..."
test:
stage: test
script:
- echo "Testing..."
deploy_review:
stage: deploy
script:
- echo "Deploy review environment..."
deploy_production:
stage: deploy
script:
- echo "Deploy production environment..."
1.2 Separate Deployments
Erweitern Sie die Vorlage so, dass:
deploy_review
nur in einem Merge Request ausgeführt wird
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Erweiten Sie
deploy_review
mit:rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"
deploy_production
nur auf dem default Branch ausgeführt wird
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Erweiten Sie
deploy_production
mit:rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
1.3 Deployment testen
- Triggern Sie die Pipeline so, dass einmal
deploy_production
und einmaldeploy_review
ausgeführt wird - Beobachten Sie das Ergebnis
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Durch den Commit mit ihren Änderungen wird bereits
deploy_production
ausgeführt deploy_review
auszuführen benötigt etwas mehr Schritte- Erstellen Sie ein Issue oder verwenden sie ein bestehendes Issue von vorher.
- Erstellen Sie über das Issue einen Merge Request
Beobachtung: Was ist beim Erstellen des Merge Requests passiert?
- Ein Commit auf den default Branch "main" hat wie erwartet die Pipeline mit
deploy_production
ausgeführt - Das Erstellen eines Merge Requests hat nur "build" und "test" ausgeführt.
- Erklärung: Beim Erstellen einens Merge Requests wird ein Branch angelegt (= "push"-Event). Es folgt aber noch kein "merge_request_event", dss für
deploy_review
notwendig ist. - Aufgabe: Erstellen Sie über die Web IDE einen Commit in ihrem Merge Requests und beobachten Sie erneut das Ergebnis
Beobachtung 2: Was ist bei einem Commit im Merge Request passiert?
- Es wurden zwei Pipelines erstellt. Eine für das Push-Event und eine für das Merge-Request-Event
- Lösung: Das Verhalten lässt sich zum Beispiel durch folgende Workflow-Regel beheben:
workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Execute jobs in merge request context - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Execute jobs when a new commit is pushed to master branch
- Testen Sie die Lösung
Aufgabe 2 - Zugriff per SSH
2.1 Vorbereitung
- Stellen Sie sicher, dass ihre
.gitlab-ci.yml
auf dem Main-Branch wie folgt aussieht.stages: - build - test - deploy workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Execute jobs in merge request context - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Execute jobs when a new commit is pushed to master branch build: stage: build script: - echo $CI_PIPELINE_SOURCE - echo "Building..." test: stage: test script: - echo "Testing..." deploy_review: stage: deploy script: - echo "Deploy review environment..." rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" deploy_production: stage: deploy script: - echo "Deploy production environment..." rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
2.2 SSH Konfigurieren
- Konfigurieren Sie den SSH Zugang für
deploy_production
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Kopieren Sie die entsprechenden Zeilen aus den Folien oder dem Cheatsheet
- Setzten Sie die Variablen
SSH_PRIVATE_KEY
undSSH_KNOWN_HOSTS
- Der private Schlüssel für
SSH_PRIVATE_KEY
liegt auf ihrer VSCode Instanz unterdemo-ssh-key
- Den Wert für
SSH_KNOWN_HOSTS
erhalten Sie über:ssh-keyscan code-{ZAHL}.labs.corewire.de
- Legen Sie eine Datei auf ihrer VSCode Instanz an:
- ssh $SSH_USER@$SSH_HOST "touch /home/coder/workspace/production.txt"
-
Setzten Sie die Variablen wie folgt:
SSH_USER
: rootSSH_HOST
: code-{ZAHL}.labs.corewire.de
-
Commiten Sie ihre Änderungen und überprüfen sie, ob die Datei auf ihrer VSCode Instanz angelegt wurde.
Aufgabe 3 - Review Umgebung
3.1 Vorbereitung
- Stellen Sie sicher, dass ihre
.gitlab-ci.yml
auf dem Main-Branch wie folgt aussieht.stages: - build - test - deploy workflow: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" # Execute jobs in merge request context - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH # Execute jobs when a new commit is pushed to master branch build: stage: build script: - echo $CI_PIPELINE_SOURCE - echo "Building..." test: stage: test script: - echo "Testing..." deploy_review: stage: deploy script: - echo "Deploy review environment..." rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" deploy_production: stage: deploy script: - echo "Deploy production environment..." - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - ssh $SSH_USER@$SSH_HOST "touch /home/coder/workspace/production.txt" rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
3.2 Review-Umgebung konfigurieren
- Konfiguriren Sie die Review-Umgebung für den
deploy_review
Job. - Es soll eine Datei mit dem
CI_COMMIT_REF_NAME
im Namen erstellt werden. - Die Konfiguration der URL soll nicht beachtet werden
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Der
deploy_review
Job soll wie folgt aussehen:deploy_review: stage: deploy rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" environment: name: review/$CI_COMMIT_REF_NAME url: https://$CI_ENVIRONMENT_SLUG.example.com script: - echo "Deploy production environment..." - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - ssh $SSH_USER@$SSH_HOST "touch /home/coder/workspace/review_$CI_COMMIT_REF_NAME.txt"
- Testen Sie ihre Review-Umgebung, indem Sie einen Merge Request mit einem Commit erstellen. Es sollte nun eine neue Datei auf ihrer VSCode Instanz liegen