
Unser Gast, Entwickler der Pantheon-Entwicklertools, spricht darüber, wie WordPress-Bereitstellungen mithilfe von GitLab CI / CD automatisiert werden können.
Bei Pantheon beschäftige ich mich mit Entwicklerbeziehungen, daher suche ich immer nach neuen Wegen, um WordPress- und Drupal-Entwicklern bei der Lösung von Automatisierungsproblemen in ihren Workflows zu helfen. Dazu experimentiere ich gerne mit neuen Werkzeugen und kombiniere sie für eine effektive Arbeit miteinander.
Ich sehe oft Entwickler, die mit einem einzigen Entwicklungsserver gequält werden.
So lala Spaß - warten Sie, bis Sie an der Reihe sind, einen Server zu verwenden, oder senden Sie Clients eine URL mit dem Hinweis: "Schauen Sie hier, aber nicht hier."
Multidev-Umgebungen - eines der coolen Tools von Pantheon - lösen dieses Problem, da Sie mit ihnen auf Anfrage Umgebungen für Git-Zweige erstellen können. Jede Multidev-Umgebung verfügt über eine eigene URL und Datenbank, sodass die Entwickler leise arbeiten, die Qualität überprüfen und die Genehmigung erhalten, ohne sich gegenseitig auf die Fersen zu treten.
Pantheon verfügt jedoch über keine Tools für die Versionskontrolle oder die kontinuierliche Integration und Bereitstellung (CI / CD). Dies ist jedoch eine flexible Plattform, in die Sie alle Tools integrieren können.
Mir ist auch aufgefallen, dass für die Entwicklung des Teams ein Tool und für die Montage und Bereitstellung andere verwendet werden.
Zum Beispiel haben sie verschiedene Tools für die Versionskontrolle und CI / CD. Sie müssen herumspielen und zwischen den Tools wechseln, um den Code zu bearbeiten und Probleme zu diagnostizieren.
GitLab verfügt über ein umfassendes Set an Entwicklungstools: für Versionskontrolle, Tickets, Zusammenführungsanforderungen, die beste CI / CD-Pipeline der Klasse, ein Containerregister und all diese Dinge. Ich bin nicht auf Anwendungen gestoßen, in denen der Entwicklungsworkflow so viel zu verwalten wäre.
Ich liebe die Automatisierung, daher habe ich gelernt, wie man Pantheon mit GitLab verbindet, damit Commits für den Hauptzweig von GitLab in der Hauptentwicklungsumgebung von Pantheon bereitgestellt werden. Durch das Zusammenführen von Anforderungen in GitLab können Code in Multidev-Umgebungen in Pantheon erstellt und bereitgestellt werden.
In diesem Handbuch zeige ich Ihnen, wie Sie eine Verbindung zwischen GitLab und Pantheon herstellen und Ihren WordPress- und Drupal-Workflow optimieren.
Sie können natürlich das GitLab-Repository spiegeln , aber wir werden alles mit Stiften tun, um in GitLab CI zu graben und dieses Tool nicht nur für die zukünftige Bereitstellung zu verwenden.
Einführung
Für diesen Beitrag müssen Sie verstehen, dass Pantheon jede Site in drei Elemente unterteilt: Code, Datenbank und Dateien.
Der Code enthält CMS-Dateien wie den Kernel, Plugins und WordPress-Themes. Diese Dateien werden im von Pantheon gehosteten Git-Repository verwaltet, dh wir können mit Git Code von GitLab nach Pantheon bereitstellen.
Dateien im Pantheon werden als Mediendateien bezeichnet, dh Bilder für die Site. Normalerweise werden sie von Benutzern heruntergeladen und von Git ignoriert.
Erstellen Sie ein kostenloses Konto , erfahren Sie mehr über den Workflow von Pantheon oder melden Sie sich bei pantheon.io für eine Demo an.
Annahmen
Mein Projekt auf Pantheon und GitLab heißt pantheon-gitlab-blog-demo
. Der Name des Projekts muss eindeutig sein. Hier werden wir mit der WordPress-Site arbeiten. Sie können Drupal nehmen, aber Sie müssen etwas ändern.
Ich werde die Git-Befehlszeile verwenden , und Sie können in der GUI arbeiten, wenn Sie möchten.
Erstellen Sie ein Projekt
Erstellen Sie zunächst ein GitLab-Projekt (wir werden darauf zurückkommen).
Erstellen Sie jetzt eine WordPress-Site im Pantheon . Installieren Sie dann WordPress für die Dashboard-Site.
Wenn Ihre Hände jucken, ändern Sie etwas, entfernen Sie beispielsweise Plugins und fügen Sie sie hinzu. Seien Sie geduldig. Die Site ist noch nicht mit GitLab verbunden, und wir möchten, dass alle Codeänderungen über GitLab erfolgen.
Wenn wir WordPress installieren, kehren wir zum Pantheon-Website-Dashboard zurück und ändern den Entwicklungsmodus in Git.

GitLab Initial Commit
Jetzt müssen Sie den anfänglichen WordPress-Code von der Pantheon-Website auf GitLab übertragen. Dazu klonen wir den Code lokal aus dem Git-Repository der Pantheon-Site und senden ihn dann an das GitLab-Repository.
Um es einfacher und sicherer zu machen, fügen wir Pantheon einen SSH-Schlüssel hinzu und geben das Kennwort nicht jedes Mal ein, wenn wir das Pantheon Git-Repository klonen. Gleichzeitig werden wir GitLab einen SSH-Schlüssel hinzufügen .
Zu diesem Zweck klonen wir die Pantheon-Site lokal, indem wir den Befehl aus dem Feld Mit Git klonen im Site-Dashboard kopieren.

Wenn Sie Hilfe benötigen, lesen Sie die Dokumentation zu Git Getting Started für Pantheon .
Ändern Sie nun den git remote origin
, dass er auf GitLab anstelle von Pantheon verweist. Dies kann git remote
.
Gehen wir zum GitLab-Projekt und kopieren Sie die Repository-URL aus der Dropdown-Liste Klonen auf der Projektdetailseite. Wir wählen die Option Mit SSH klonen, da wir den SSH-Schlüssel bereits konfiguriert haben.

Standardmäßig ist git remote
für die lokale Kopie des Code-Repositorys origin
. Dies kann mit git remote set-url origin [URL GitLab]
geändert werden, wobei anstelle von Klammern die tatsächliche URL eingegeben wird.
Führen Sie git push origin master --force
, um Ihren WordPress-Code von Pantheon an GitLab zu senden.
Die Option –force wird nur einmal benötigt. Dann wird es in git push
Befehlen auf GitLab nicht sein.
Konfigurieren Sie Anmeldeinformationen und Variablen
Erinnern Sie sich, wie wir lokal einen SSH-Schlüssel hinzugefügt haben, um sich bei Pantheon und GitLab anzumelden? Mit dem SSH-Token können GitLab und Pantheon autorisiert werden.
GitLab hat einige großartige Dokumentationen. Sehen wir uns den Abschnitt über SSH-Schlüssel bei Verwendung des Docker-Executors im Dokument zur Verwendung von SSH-Schlüsseln mit GitLab CI / CD an .
Jetzt führen wir die ersten beiden Schritte aus: Erstellen Sie lokal mit ssh-keygen ein neues Paar SSH-Schlüssel und fügen Sie dem Projekt den privaten Schlüssel als Variable hinzu .
Dann setzen wir SSH_PRIVATE_KEY
als GitLab CI / CD-Umgebungsvariable in den Projekteinstellungen.
Erstellen .gitlab-ci.yml
im dritten und vierten Schritt eine .gitlab-ci.yml
mit den folgenden Inhalten:
before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI"
Bis wir die .gitlab-ci.yml
, muss noch etwas hinzugefügt werden.
Jetzt führen wir den fünften Schritt aus und fügen den öffentlichen Schlüssel, den wir im ersten Schritt erstellt haben, zu den Diensten hinzu, auf die Sie in der Build-Umgebung zugreifen müssen .
In unserem Fall möchten wir von GitLab aus Zugriff auf Pantheon erhalten. Befolgen Sie die Anweisungen im Pantheon-Dokument, um Pantheon einen SSH-Schlüssel hinzuzufügen, und führen Sie diesen Schritt aus.
Denken Sie daran: SSH in GitLab geschlossen, im Pantheon geöffnet.
Richten Sie einige weitere Umgebungsvariablen ein. Die erste heißt PANTHEON_SITE. Seine Bedeutung ist der Name der Pantheon-Site auf Ihrem Computer.
Der Name auf dem Computer wird am Ende des Befehls Mit Git klonen angezeigt. Sie haben die Site bereits lokal geklont, daher ist dies der Name des lokalen Repository-Verzeichnisses.

PANTHEON_GIT_URL
Nächstes die Umgebungsvariable PANTHEON_GIT_URL
. Dies ist die Git-Repository-URL für die Pantheon-Site, die wir bereits verwendet haben.
Wir geben nur die URL des SSH-Repositorys ohne git clone
und den Site-Namen auf dem Computer am Ende ein.
Fuh. Dies ist erledigt, jetzt können wir unsere .gitlab-ci.yml
.
Erstellen Sie eine Bereitstellungsaufgabe
Was wir anfänglich mit GitLab CI machen werden, ist sehr ähnlich zu dem, was wir zuvor mit Git-Repositorys gemacht haben. Fügen Sie diesmal jedoch das Pantheon-Repository als zweite Remote-Git-Quelle hinzu und senden Sie den Code von GitLab an Pantheon.
Konfigurieren Sie dazu die deploy
und die Task " deploy:dev
, da die Bereitstellung in der Entwicklungsumgebung von Pantheon erfolgt. Infolgedessen .gitlab-ci.yml
aus:
stages: - deploy before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI" deploy:dev: stage: deploy environment: name: dev url: https://dev-$PANTHEON_SITE.pantheonsite.io/ script: - git remote add pantheon $PANTHEON_GIT_URL - git push pantheon master --force only: - master
Die Variablen SSH_PRIVATE_KEY, PANTHEON_SITE
und PANTHEON_GIT_URL
sollten vertraut aussehen - wir haben diese Umgebungsvariablen früher eingerichtet. Mit diesen Variablen können wir die Werte in der .gitlab-ci.yml
viele Male verwenden, und wir müssen sie nur an einer Stelle aktualisieren.
.gitlab-ci.yml
hinzu, .gitlab-ci.yml
an GitLab.
Aktivieren Sie Bereitstellen
Wenn wir alles richtig gemacht haben, wird die Task deploy:dev
in GitLab CI / CD erfolgreich sein und das .gitlab-ci.yml
an Pantheon senden. Mal sehen.



Wir senden Filialen von Zusammenführungsanfragen an Pantheon
Hier verwenden wir meine Lieblings-Pantheon-Funktion - Multidev , mit der Sie auf Anfrage zusätzliche Pantheon-Umgebungen für Git-Zweige erstellen können.
Der Zugriff auf Multidev ist begrenzt , daher ist dieser Abschnitt optional . Wenn Sie jedoch Zugriff haben, können Sie die Produktivität erheblich steigern, indem Sie die automatische Erstellung von Multidev-Umgebungen auf Pantheon aus GitLab-Zusammenführungsanforderungen einrichten.
git checkout -b multidev-support
lokal einen neuen Git-Zweig mit git checkout -b multidev-support
. Jetzt wird sich wieder etwas in .gitlab-ci.yml
.
Ich möchte die Nummer der Zusammenführungsanforderung im Namen der Pantheon-Umgebung angeben. Zum Beispiel ist die erste Zusammenführungsanforderung mr-1
, die zweite ist mr-2
usw.
Die Zusammenführungsanforderung ändert sich, daher müssen wir die Namen der Pantheon-Zweige dynamisch identifizieren. In GitLab ist dies einfach - Sie müssen vordefinierte Umgebungsvariablen verwenden .
Wir können $CI_MERGE_REQUEST_IID
, um die Nummer der Zusammenführungsanforderung anzugeben. Wenden wir all dies zusammen mit den zuvor angegebenen globalen Umgebungsvariablen an und fügen am Ende der .gitlab-ci.yml
eine neue Task "deploy: multidev" .gitlab-ci.yml
.
deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Checkout the merge request source branch - git checkout $CI_COMMIT_REF_NAME # Add the Pantheon git repository as an additional remote - git remote add pantheon $PANTHEON_GIT_URL # Push the merge request source branch to Pantheon - git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force only: - merge_requests
Es wird unserer Aufgabe deploy:dev
ähnlich sein, nur der Zweig wird an Pantheon gesendet und nicht an master
.
Wir haben die aktualisierte .gitlab-ci.yml
hinzugefügt und festgeschrieben und senden jetzt einen neuen Zweig an GitLab mit git push -u origin multidev-support
.
Erstellen Sie nun eine neue Zusammenführungsanforderung aus dem multidev-support
Zweig, indem Sie auf Zusammenführungsanforderung erstellen klicken.

Nachdem wir die Zusammenführungsanforderung erstellt haben, sehen wir uns an, wie die CI / CD- deploy:multidev
.

Siehe - ein neuer Zweig wurde zum Pantheon geschickt. Wenn wir jedoch zum Multidev-Bereich im Dashboard der Pantheon-Site gehen, wird die neue Umgebung dort nicht angezeigt.

Schauen Sie sich den Abschnitt Git Branches an.

Infolgedessen erreichte unser mr-1
Zweig das Pantheon. Erstellen Sie eine Umgebung aus dem Zweig mr-1
.

Wir haben eine Multidev-Umgebung erstellt und kehren nun zu GitLab zurück und sehen uns den Abschnitt Operationen> Umgebungen an . Wir werden Einträge für dev
und mr-1
.
Dies liegt daran, dass wir den CI / CD-Aufgaben einen environment
Namen name
und url
hinzugefügt haben. Wenn wir auf das Symbol zum Öffnen der Umgebung klicken, rufen wir die URL der Pantheon-Multidev-Umgebung auf.
Automatisieren Sie die Erstellung von Multidev
Im Prinzip können Sie hier anhalten und daran denken, für jede Zusammenführungsanforderung eine Multidev-Umgebung zu erstellen. Dieser Prozess kann jedoch automatisiert werden.
Pantheon verfügt über ein Terminus- Befehlszeilentool, mit dem Sie automatisch mit der Plattform arbeiten können. In Terminus können Sie Multidev-Umgebungen über die Befehlszeile erstellen - ideal für GitLab CI .
Wir benötigen eine neue Zusammenführungsanforderung, um sie zu testen. Erstellen Sie einen neuen Zweig mit git checkout -b auto-multidev-creation
.
Um Terminus in GitLab CI / CD-Tasks verwenden zu können, benötigen Sie ein Maschinentoken für die Authentifizierung in Terminus und ein Container-Image mit Terminus.
Erstellen Sie ein Pantheon-Maschinentoken , speichern Sie es an einem sicheren Ort und fügen Sie es als globale Umgebungsvariable in GitLab mit dem Namen PANTHEON_MACHINE_TOKEN
.
Wenn Sie vergessen haben, wie GitLab-Umgebungsvariablen hinzugefügt werden, kehren Sie zu der Stelle zurück, an der wir PANTHEON_SITE
definiert haben.
Erstellen Sie eine Docker-Datei mit Terminus
Wenn Sie Docker nicht verwenden oder Docker- Dockerfile
nicht mögen, nehmen Sie mein registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
Bild und überspringen Sie diesen Abschnitt.
GitLab verfügt über eine Container-Registrierung, in der Sie eine Docker-Datei für unser Projekt erstellen und hosten können. Erstellen wir eine Docker-Datei mit Terminus, um mit Pantheon zu arbeiten.
Terminus ist ein Befehlszeilenprogramm in PHP. Beginnen wir also mit dem PHP-Image. Ich installiere Terminus über Composer, daher nehme ich das offizielle Docker Composer-Image als Grundlage. Erstellen Sie eine Dockerfile
im lokalen Repository-Verzeichnis mit den folgenden Inhalten:
# Use the official Composer image as a parent image FROM composer:1.8 # Update/upgrade apk RUN apk update RUN apk upgrade # Make the Terminus directory RUN mkdir -p /usr/local/share/terminus # Install Terminus 2.x with Composer RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"
Befolgen Sie die Anweisungen zum Zusammenstellen und Senden von Bildern aus dem Abschnitt Erstellen und Push-Bilder in der Dokumentation zur Containerregistrierung , um das Bild aus der Dockerfile
zu sammeln und an GitLab zu senden.
Öffnen Sie den Registrierungsabschnitt im GitLab-Projekt. Wenn alles nach Plan lief, wird es unser Image geben. .gitlab-ci.yml
Sie den Link zum Image-Tag - wir benötigen ihn für die .gitlab-ci.yml
.

Der deploy:multidev
beginnt zu wachsen. Verschieben Sie ihn daher in eine separate Datei. Erstellen Sie eine neue private/multidev-deploy.sh:
#!/bin/bash # Store the mr- environment name export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID # Authenticate with Terminus terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN # Checkout the merge request source branch git checkout $CI_COMMIT_REF_NAME # Add the Pantheon Git repository as an additional remote git remote add pantheon $PANTHEON_GIT_URL # Push the merge request source branch to Pantheon git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force # Create a function for determining if a multidev exists TERMINUS_DOES_MULTIDEV_EXIST() { # Stash a list of Pantheon multidev environments PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)" while read -r multiDev; do if [[ "${multiDev}" == "$1" ]] then return 0; fi done <<< "$PANTHEON_MULTIDEV_LIST" return 1; } # If the mutltidev doesn't exist if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV then # Create it with Terminus echo "No multidev for $PANTHEON_ENV found, creating one..." terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV else echo "The multidev $PANTHEON_ENV already exists, skipping creating it..." fi
Das Skript befindet sich in einem privaten Verzeichnis und bietet keinen Webzugriff auf Pantheon . Wir haben ein Skript für unsere Multidev-Logik. Lassen Sie uns nun den deploy:multidev
Datei .gitlab-ci.yml
aktualisieren, deploy:multidev
.gitlab-ci.yml
zu erhalten:
deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Run the multidev deploy script - "/bin/bash ./private/multidev-deploy.sh" only: - merge_requests
Wir müssen sicherstellen, dass unsere Aufgaben in dem erstellten benutzerdefinierten Image .gitlab-ci.yml
. .gitlab-ci.yml
fügen wir das Definitionsbild mit der Registrierungs-URL in .gitlab-ci.yml
. Als Ergebnis haben wir die folgende .gitlab-ci.yml
:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest stages: - deploy before_script: # See https://docs.gitlab.com/ee/ci/ssh_keys/README.html - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config" - git config --global user.email "$GITLAB_USER_EMAIL" - git config --global user.name "Gitlab CI" deploy:dev: stage: deploy environment: name: dev url: https://dev-$PANTHEON_SITE.pantheonsite.io/ script: - git remote add pantheon $PANTHEON_GIT_URL - git push pantheon master --force only: - master deploy:multidev: stage: deploy environment: name: multidev/mr-$CI_MERGE_REQUEST_IID url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/ script: # Run the multidev deploy script - "/bin/bash ./private/multidev-deploy.sh" only: - merge_requests
Fügen Sie private/multidev-deploy.sh
und .gitlab-ci.yml
private/multidev-deploy.sh
und .gitlab-ci.yml
. Kehren Sie nun zu GitLab zurück und warten Sie, bis die CI / CD-Aufgabe abgeschlossen ist. Seien Sie geduldig: Multidev kann einige Minuten dauern.
Dann schauen wir uns die Multidev-Liste im Pantheon an. Oh Wunder! Die Multidev mr-2
Mr mr-2
Umgebung ist bereits vorhanden.

Fazit
Mein Team hat viel mehr Spaß gemacht, als wir angefangen haben, Zusammenführungsanforderungen zu öffnen und Umgebungen automatisch zu erstellen.
Mit den leistungsstarken GitLab- und Pantheon-Tools können Sie GitLab automatisch mit Pantheon verbinden.
Sobald wir GitLab CI / CD verwenden, wird unser Workflow wachsen. Hier sind einige Ideen für den Einstieg:
Schreiben Sie, was Sie von GitLab, Pantheon und Automatisierung halten.
PS Wussten Sie, dass Terminus, das Pantheon-Befehlszeilentool, durch Plugins erweitert werden kann ?
Wir bei Pantheon haben hart an Version 2 unseres Plugins für GitLab-fähige Terminus-Build-Tools gearbeitet . Wenn Sie nicht an den Einstellungen für jedes Projekt basteln möchten, probieren Sie dieses Plugin aus und helfen Sie uns, Beta v2 zu testen. Für den Befehl Terminus build:project:create
benötigen Sie nur das Pantheon-Token und das GitLab-Token. Sie wird ein Beispielprojekt mit Composer und automatisierten Tests bereitstellen, ein neues Projekt in GitLab, der neuen Pantheon-Site, erstellen und diese mithilfe von Umgebungsvariablen und SSH-Schlüsseln verbinden.
Über den Autor
Andrew Taylor erstellt Entwicklertools im Pantheon .