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

Über das Projekt

Deploy_helper module for building (Capistrano like) deploy roles

Installieren
ansible-galaxy install f500.project_deploy_module
Lizenz
lgpl-3.0
Downloads
6.8k
Besitzer
Open source contributions by Future500