Zum Hauptinhalt springen

Deploy Jobs

Ein Deploy-Job ist ein Befehl, der vor dem Deployment eines neuen Releases ausgeführt wird. Das Release wird nur ausgerollt, wenn der Deploy-Job erfolgreich abgeschlossen ist. Der Befehl des Deploy-Jobs hat Zugriff auf die gleiche Umgebung und dieselben Binärdateien wie die Anwendungs-Runtime. Ein häufiger Anwendungsfall für Deploy-Jobs ist das Ausführen von Datenbank-Schema-Migrationen. Ein Deploy-Job kann entweder bei Anwendungserstellung oder später über den update-Befehl definiert werden.

Wenn ein Deploy-Job scheitert, wird das dazugehörige Release als gescheitert markiert und insofern ein vorheriges Release vorhanden ist, läuft dieses weiter.

Einen Deploy-Job bei Anwendungserstellung definieren

Sie können einen Deploy-Job bei Erstellung einer Anwendung definieren. Dazu können Sie verschiedene Flags im Befehl nctl create app nutzen, die auf den Deploy-Job verweisen.

--deploy-job-command="rake db:prepare"       Befehl zum Ausführen vor dem Deployment des neuen Releases. Wenn dies nicht definiert ist, wird
kein Deploy-Job ausgeführt.
--deploy-job-name="release" Name des Deploy-Jobs. Das Deployment wird nur fortgesetzt, wenn der Job erfolgreich abgeschlossen ist.
--deploy-job-retries=3 Die Häufigkeit, mit der der Job beim Scheitern erneut gestartet wird. Der Standard ist 3, die
maximale Häufigkeit 5.
--deploy-job-timeout=5m Timeout des Jobs. Der Standard ist 5 Minuten, Mindestdauer ist 1 Minute, Höchstdauer 30 Minuten.

$ nctl create app --deploy-job-command="rake db:prepare"

Der Deploy-Job wird jedes Mal ausgeführt, wenn für einen neues Release ein Neustart der Anwendung notwendig ist. Die folgenden Ereignisse führen zur Ausführung des Deploy-Jobs:

  • Ein neuer Build steht zur Verfügung
  • Die Konfiguration der Anwendung wurde verändert (neue Umgebungsvariablen, Veränderung der Grösse, etc.)

Einen Deploy-Job auf anderen Konfigurationsebenen definieren

Da Deploy-Jobs bei Deploio-Anwendungen zur Konfiguration gehören, können Sie sie auch auf anderen Konfigurationsebenen definieren. Sie können einen Deploy-Job zum Beispiel über die Quelldatei für die git-Konfiguration .deploio.yaml festlegen.

deployJob:
name: "release"
command: "rake db:prepare"
retries: 3
timeout: 5m

Den Status eines Deploy-Jobs einsehen

Wenn ein Deploy-Job scheitert, wird der dazugehörige Release als gescheitert markiert und insofern ein vorheriger Release vorhanden ist, läuft dieser weiter. Um den Status eines Deploy-Jobs im Detail zu sehen, können Sie den kompletten Release einsehen:

$ nctl get releases brave-scrambler-vc78b -o yaml
[...]
status:
atProvider:
deployJobStatus:
exitTime: 2023-07-18T11:01:47Z
name: brave-scrambler-vc78b-deploy-job
reason: backoffLimitExceeded
startTime: 2023-07-18T11:00:58Z
status: failed
releaseStatus: failure

Am Ende des Releases sehen Sie den Status. Dort wird detailliert dargestellt, wann und wie der Deploy-Job gescheitert ist. Zusätzlich zum Status wird das Deploy-Job-Log auch dem normalen App-Log zugefügt und kann über den Befehl nctl logs app eingesehen werden.