← Neuigkeiten

Deploy+: vollständige Bash-Skripte und Variablen für jedes Deployment

Neuigkeiten 5 Min. Lesezeit

Bisher war das Skript von Deploy+ eine Liste von Befehlen: eine Zeile, um Abhängigkeiten zu installieren, eine weitere, um die Dateien der Website zu bauen, noch eine, um den Cache vorzubereiten. Das funktioniert gut, solange jeder Schritt unabhängig ist. Wollten Sie aber prüfen, wie das Deployment gestartet wurde, ein Tool nur einmal laden oder eine Variable über mehrere Befehle hinweg behalten, landete die ganze Logik in einer einzigen Zeile oder in einer separaten Datei im Repository.

Jetzt können Sie im Editor wählen, wie das Skript ausgeführt wird und welche Informationen es erhält. Die Auswahl gilt pro Repository.

Der Skript-Editor von Deploy+ mit den Modi und den verfügbaren Variablen

Ein echtes Skript, von Anfang bis Ende

Der neue Modus Vollständiges Bash-Skript führt den gesamten Text in einer einzigen Shell aus. Sie können Bedingungen, Schleifen und Funktionen verwenden, das Verzeichnis wechseln oder NVM einmal laden und Node.js in den folgenden Zeilen weiter nutzen. Zum Beispiel:

composer install --no-dev --no-interaction

if [[ "$HOSTSUAR_DEPLOY_TRIGGER" == "webhook" ]]; then
    php artisan migrate --force
fi

export NVM_DIR="$HOME/.nvm"
. "$NVM_DIR/nvm.sh"
npm ci --include=dev
npm run build

Das Skript läuft in der frisch geklonten Version, bevor sie veröffentlicht wird. Schlägt ein Befehl fehl, den Bash als Fehler behandelt, bricht das Deployment ab und die vorherige Version bleibt online. Wie bei jedem Skript mit set -e stoppt ein Fehler innerhalb einer Pipe die Ausführung nicht, wenn der letzte Befehl erfolgreich endet. Bei Bedarf können Sie am Anfang set -o pipefail ergänzen. Interaktive Befehle erhalten auch keine Tastatureingaben: Verwenden Sie Optionen wie --no-interaction.

Der Modus Ein Befehl pro Zeile steht weiterhin zur Verfügung. Jede Zeile startet im Ordner der neuen Version und läuft wie bisher für sich. Bereits verbundene Repositories behalten diesen Modus und ihre Einstellungen, ihre Deployments ändern sich nicht, bis Sie etwas anderes wählen.

Das Skript weiß, was es deployt

Der Schalter Deployment-Daten fügt Variablen wie $HOSTSUAR_DEPLOY_TRIGGER, $HOSTSUAR_DEPLOY_BRANCH, $HOSTSUAR_DEPLOY_COMMIT und $HOSTSUAR_DEPLOY_RELEASE_PATH hinzu. So können Sie zum Beispiel entscheiden, ob eine Aufgabe bei einem durch einen Push gestarteten Deployment laufen soll, oder den Hash des tatsächlich geklonten Commits verwenden. Es gibt außerdem Pfade zur vorherigen Version, zu den gemeinsam genutzten Dateien und zum veröffentlichten Ordner.

Diese Variablen enthalten weder das Token des Repositorys noch das Secret des Webhooks. In neuen Repositories sind sie aktiviert, in bestehenden können Sie sie bei Bedarf im Editor einschalten. Sie funktionieren in beiden Skriptmodi. Muss beim Zurücksetzen eine Version neu gebaut werden, die nicht mehr auf dem Server liegt, erhält das Skript HOSTSUAR_DEPLOY_TRIGGER=rollback.

Die .env, nur wenn Sie sie beim Build brauchen

Der zweite Schalter, Variablen aus der .env, übergibt dem Skript die Schlüssel der gemeinsam genutzten .env als Umgebungsvariablen. Auch die Prozesse, die es startet, wie Composer, npm oder Artisan, erben sie. Das ist nützlich, wenn ein Build oder ein eigenständiger Befehl $APP_NAME oder ein Passwort lesen muss und die Datei nicht selbst lädt. Deploy+ liest die .env nach den Regeln von Laravel. Es führt sie nicht wie ein Bash-Skript aus und ändert die Datei nicht.

Die Option ist standardmäßig ausgeschaltet. Die Ausgabe des Skripts wird im Verlauf gespeichert, geben Sie also keine Passwörter aus und aktivieren Sie kein set -x. Deploy+ blendet Werte aus, die es als geheim erkennt, aber dieser Schutz ersetzt nicht die Sorgfalt bei dem, was das Skript ausgibt. Prüfen Sie in Laravel-Projekten mit Dateien wie .env.production außerdem, welche Werte Vorrang haben: Variablen, die das Skript bereits erhalten hat, werden beim Laden dieser anderen Datei nicht ersetzt.

Die beiden Modi und die Schalter finden Sie unter Hosting → Ihr Dienst → Deploy+ → Deployment-Skript. Die Anleitung zu Deploy+ enthält die vollständige Liste der Variablen, Beispiele und die Details zu jedem Modus.

Wir arbeiten weiter an Verbesserungen.

Sehen Sie, woran wir gerade arbeiten, oder schreiben Sie uns, wenn Ihnen etwas fehlt.