f500.project_deploy_module
Projektbereitstellungsmodul (deploy_helper)
Das enthaltene Modul ist das vorgeschlagene deploy_helper-Modul für ansible-modules-extra.
Allgemeine Erklärung, beginnend mit einem Beispiel für die Ordnerstruktur eines Projekts:
root: releases: - 20140415234508 - 20140415235146 - 20140416082818
shared:
- sessions
- uploads
current: -> releases/20140416082818
Der Ordner 'releases' enthält alle verfügbaren Versionen. Eine Version ist ein kompletter Build der Anwendung, die bereitgestellt wird. Dies kann zum Beispiel eine Klonung eines Repositories oder die Synchronisierung eines lokalen Ordners auf Ihrem Dateisystem sein. Ordner mit Zeitstempeln sind eine Möglichkeit, verschiedene Versionen zu haben, aber Sie können auch Ihre eigene Strategie wie Git-Tags oder Commit-Hashes wählen.
Während einer Bereitstellung sollte ein neuer Ordner im Releases-Ordner erstellt werden, und alle erforderlichen Schritte zur Erstellung sollten durchgeführt werden. Sobald der neue Build bereit ist, wird das Bereitstellungsverfahren 'finalisiert', indem der Symlink 'current' durch einen Link zu diesem Build ersetzt wird.
Der Ordner 'shared' enthält alle Ressourcen, die zwischen den Versionen geteilt werden. Beispiele dafür sind Webserver-Sitzungsdateien oder Dateien, die von Benutzern Ihrer Anwendung hochgeladen werden. Es ist ganz üblich, Symlinks von einem Release-Ordner auf einen shared/Unterordner zu haben, und das Erstellen dieser Links würde als Teil der Erstellung automatisiert.
Der 'current'-Symlink zeigt auf eine der Versionen. Wahrscheinlich auf die neueste, es sei denn, es wird gerade eine Bereitstellung durchgeführt. Das Stammverzeichnis des Webservers für das Projekt wird über diesen Symlink angesprochen, sodass die 'Ausfallzeit', wenn auf eine neue Version umgeschaltet wird, auf die Zeit reduziert wird, die benötigt wird, um den Link zu wechseln.
Um zwischen erfolgreichen Builds und nicht abgeschlossenen zu unterscheiden, kann eine Datei im Ordner der Version platziert werden, die sich gerade in Bearbeitung befindet. Das Vorhandensein dieser Datei kennzeichnet sie als nicht fertig und ermöglicht ein automatisiertes Verfahren, sie während der Aufräumarbeiten zu entfernen.
Typische Verwendung:
- name: Initialisiere das Bereitstellungsroot und sammle Fakten
deploy_helper: path=/pfad/zum/root
- name: Klone das Projekt in den neuen Releases-Ordner
git: repo=git://foosball.example.org/pfad/zum/repo.git dest={{ deploy_helper.new_release_path }} version=v1.1.1
- name: Füge eine nicht abgeschlossene Datei hinzu, um Aufräumarbeiten nach erfolgreichem Abschluss zu ermöglichen
file: path={{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }} state=touch
- name: Führe einige Build-Schritte durch, wie z.B. das Ausführen des Abhängigkeitsmanagers
composer: command=install working_dir={{ deploy_helper.new_release_path }}
- name: Erstelle einige Ordner im shared-Ordner
file: path='{{ deploy_helper.shared_path }}/{{ item }}' state=directory
with_items: ['sessions', 'uploads']
- name: Füge Symlinks von der neuen Version zum shared-Ordner hinzu
file: path='{{ deploy_helper.new_release_path }}/{{ item.path }}'
src='{{ deploy_helper.shared_path }}/{{ item.src }}'
state=link
with_items:
- { path: "app/sessions", src: "sessions" }
- { path: "web/uploads", src: "uploads" }
- name: Finalisiere die Bereitstellung, entferne die nicht abgeschlossene Datei und wechsle den Symlink
deploy_helper: path=/pfad/zum/root release={{ deploy_helper.new_release }} state=finalize
Fakten abrufen, bevor die Bereitstellung ausgeführt wird
- name: Führe 'state=query' aus, um Fakten zu sammeln, ohne etwas zu ändern
deploy_helper: path=/pfad/zum/root state=query
Denken Sie daran, den Parameter 'release' zu setzen, wenn Sie später 'state=present' tatsächlich aufrufen
- name: Initialisiere das Bereitstellungsroot
deploy_helper: path=/pfad/zum/root release={{ deploy_helper.new_release }} state=present
Alle Pfade können absolut oder relativ (zum 'path'-Parameter) sein
- deploy_helper: path=/pfad/zum/root
releases_path=/var/www/projekt/releases
shared_path=/var/www/shared
current_path=/var/www/aktiv
Verwendung Ihrer eigenen Benennungsstrategie für Versionen (ein Versionstag in diesem Fall):
- deploy_helper: path=/pfad/zum/root release=v1.1.1 state=present
- deploy_helper: path=/pfad/zum/root release={{ deploy_helper.new_release }} state=finalize
Verwendung eines anderen unfinished_filename:
- deploy_helper: path=/pfad/zum/root
unfinished_filename=README.md
release={{ deploy_helper.new_release }}
state=finalize
Verschieben der Bereinigung älterer Builds:
- deploy_helper: path=/pfad/zum/root release={{ deploy_helper.new_release }} state=finalize clean=False
- deploy_helper: path=/pfad/zum/root state=clean
Oder Ausführen der Bereinigung vor der neuen Bereitstellung
- deploy_helper: path=/pfad/zum/root state=clean
- deploy_helper: path=/pfad/zum/root state=present
Behalten Sie mehr ältere Versionen:
- deploy_helper: path=/pfad/zum/root release={{ deploy_helper.new_release }} state=finalize keep_releases=10
Oder, wenn Sie 'clean=false' bei der Finalisierung verwenden:
- deploy_helper: path=/pfad/zum/root state=clean keep_releases=10
Entfernen des gesamten Projektstammordners
- deploy_helper: path=/pfad/zum/root state=absent
Debugging der durch das Modul zurückgegebenen Fakten
- deploy_helper: path=/pfad/zum/root
- debug: var=deploy_helper
Lizenz
LGPL
Autoreninformationen
Ramon de la Fuente, ramon@delafuente.nl