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-demoappProjekt. - 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_reviewnur in einem Merge Request ausgeführt wird
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Erweiten Sie 
deploy_reviewmit:rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" 
deploy_productionnur auf dem default Branch ausgeführt wird
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Erweiten Sie 
deploy_productionmit:rules: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH 
1.3 Deployment testen
- Triggern Sie die Pipeline so, dass einmal 
deploy_productionund einmaldeploy_reviewausgefü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_productionausgeführt deploy_reviewauszufü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_productionausgefü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_reviewnotwendig 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.ymlauf 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_KEYundSSH_KNOWN_HOSTS - Der private Schlüssel für 
SSH_PRIVATE_KEYliegt auf ihrer VSCode Instanz unterdemo-ssh-key - Den Wert für 
SSH_KNOWN_HOSTSerhalten 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.ymlauf 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_reviewJob. - Es soll eine Datei mit dem 
CI_COMMIT_REF_NAMEim Namen erstellt werden. - Die Konfiguration der URL soll nicht beachtet werden
 
Lösung (Klicken Sie auf den Pfeil, falls sie nicht weiterkommen)
- Der 
deploy_reviewJob 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