Aufbauend auf den Beitrag Kurz howto Continuous Integration mit GitLab CI wird dieser um Continuous Delivery erweitert. Dies geschieht anhand eines ssh-key ohne Passphrase und der weiteren Konfiguration der .gitlab-ci.yml. Im Netzwerk befindet sich ein zweiter Server, der die Daten per scp vom GitLab Server erhält.
Anlegen ssh-key für den gitlab-runner user.
:~# su - gitlab-runner :~$ ssh-keygen #-> leere passphrase Generating public/private rsa key pair. Enter file in which to save the key (/home/gitlab-runner/.ssh/id_rsa): Created directory '/home/gitlab-runner/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/gitlab-runner/.ssh/id_rsa. Your public key has been saved in /home/gitlab-runner/.ssh/id_rsa.pub. The key fingerprint is: d7:6f:99:eb:2b:7b:5a:4e:60:16:14:e2:94:b5:60:a5 gitlab-runner@debtest The key's randomart image is: +---[RSA 2048]----+ | =+=. | | +.= . | | E o | | . . | | S . = | | . o o o | | B | | .=.. | | o*=. | +-----------------+
Der komplette Inhalt von /home/gitlab-runner/.ssh/id_rsa.pub wird auf den Remote-Server in die Datei .ssh/authorized_keys kopiert. Der Einfachheit halber in ein bestehendes user Konto in diesem falle hp.
:~$ cd /home/hp :~$ mkdir .ssh :~$ vim .ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDU4J55viEEJ+gNrRyWGEt+u6tLLa2K2xzsWcZXUB9KkIgFRJRdE7bFV+aA0IVg1rEbFFH8ZXxPE3hj9dhr4WRZj3tLSZPLxSgYRbabN3aPe6ZcCBCfNqt1RnQVPKxokHpbIMv1TggpQ7EPsIsyaKFBb/lecROSdjDn4cdJ+KdFDpYGkPrJDqe09SD2io+VbkZGd1jVJhPk1Heua5PfgFNWVIOBpiwaPYwnPhYl71qmDPWKuMme6AzAh/qBXirKRqBpRJtBZFTpimPTYCEIfvGGe+U2iXrdQR6iW+GtaAAwxp3QURgjBaHXWyKAAQ00fn9eMEN52yf6DFIWaeZgcFkT gitlab-runner@debtest :~$ chmod 600 .ssh/authorized_keys :~$ chmod 700 .ssh :~$ chown -R hp. .ssh
Ein Testaufruf auf der Konsole zeigt, ob der ssh Zugriff ohne weitere Eingabe funktioniert. Beim ersten Aufruf muss noch eine Frage mit yes zum akzeptieren des Remote-Server ssh-key beantwortet werden. Diese Meldung sollte bei einem erneuten Aufruf wegfallen und ein Login ohne weitere Eingabe sollte möglich sein.
:~# su - gitlab-runner :~$ ssh hp@192.168.202.225 The authenticity of host '192.168.202.225 (192.168.202.225)' can't be established. ECDSA key fingerprint is 6b:12:3f:a0:fe:bf:2d:1e:a3:9b:4a:21:f1:3f:95:f1. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.202.225' (ECDSA) to the list of known hosts. The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. hp@devdeb:~$
Die Erweiterung für das Deployment der .gitlab-ci.yml im Repository.
tidy_html: stage: test script: - tidy -q -e *.html - php -l *.php - zip /tmp/htmltest-$(date '+%s').zip * deploy to devdeb: stage: deploy script: scp -r * hp@192.168.202.225:/opt/cd_test/ environment: devdeb
Bei einem Commit in das Repository kann im GitLab GUI der Build Test und das Deployment unter Pipelines -> Pipelines beobachtet werden.

Je nachdem, ob bei stage Test oder stage Deploy der Build fehlschlägt, wird dies ebenfalls angezeigt.

Mit weiteren Klicks auf die verschiedenen „Icons“ werden wieder erweiterte Informationen zur Verfügung gestellt. Hier ein Beispiel für das fehlgeschlagene Deployment auf den Remote-Server.

Unter Pipelines -> Environments und dem konfigurierten environment: devdeb aus der .gitlab-ci.yml befinden sich alle erfolgreich gelaufenen Deployments. Diese können mit einem Klick auf Rollback auf einen zurückliegenden Stand zurückgesetzt werden.
