f500.project_deploy_module

Moduł wdrożeniowy projektu (deploy_helper)

Dołączony moduł to proponowany moduł deploy_helper do ansible-modules-extra.

Ogólne wyjaśnienie, zaczynając od przykładowej struktury folderów dla projektu:

root: releases: - 20140415234508 - 20140415235146 - 20140416082818

shared:
    - sessions
    - uploads

current: -> releases/20140416082818

Folder 'releases' zawiera wszystkie dostępne wersje. Wersja to kompletny build aplikacji, który jest wdrażany. Może to być na przykład klon repozytorium lub synchronizacja lokalnego folderu na twoim systemie plików. Używanie folderów z znacznikami czasowymi to jeden sposób na posiadanie odmiennych wersji, ale możesz wybrać własną strategię, na przykład etykiety git lub hashe commitów.

Podczas wdrożenia należy utworzyć nowy folder w folderze releases, a wszelkie wymagane kroki budowy powinny zostać przeprowadzone. Gdy nowy build jest gotowy, procedura wdrożenia jest 'finalizowana' przez zastąpienie symlinka 'current' linkiem do tego buildu.

Folder 'shared' zawiera wszelkie zasoby, które są wspólne dla wersji. Przykłady to pliki sesji z serwera WWW lub pliki przesyłane przez użytkowników twojej aplikacji. Dość powszechnie stosuje się symlinki z folderu wersji wskazujące na folder wspólny, a tworzenie tych linków byłoby zautomatyzowane jako część kroków budowy.

Symlink 'current' wskazuje na jedną z wersji. Prawdopodobnie na najnowszą, chyba że wdrożenie jest w toku. Główny katalog serwera WWW dla projektu będzie korzystał z tego symlinka, więc czas 'przerwy' podczas przełączania na nową wersję ogranicza się do czasu potrzebnego na zmianę linku.

Aby odróżnić udane buildy od tych niedokończonych, można umieścić plik w folderze wersji, która jest w trakcie realizacji. Istnienie tego pliku oznacza, że wersja jest niedokończona i pozwala na zautomatyzowaną procedurę usunięcia go podczas czyszczenia.

Typowe użycie:

- name: Zainicjalizuj główny folder wdrożenia i zbierz informacje
  deploy_helper: path=/path/to/root
- name: Sklonuj projekt do nowego folderu wersji
  git: repo=git://foosball.example.org/path/to/repo.git dest={{ deploy_helper.new_release_path }} version=v1.1.1
- name: Dodaj plik niedokończony, aby umożliwić czyszczenie po pomyślnej finalizacji
  file: path={{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }} state=touch
- name: Wykonaj kilka kroków budowy, na przykład uruchamiając menedżera zależności
  composer: command=install working_dir={{ deploy_helper.new_release_path }}
- name: Utwórz kilka folderów w folderze shared
  file: path='{{ deploy_helper.shared_path }}/{{ item }}' state=directory
  with_items: ['sessions', 'uploads']
- name: Dodaj symlinki z nowej wersji do folderu shared
  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: Sfinalizuj wdrożenie, usuń plik niedokończony i zmień symlink
  deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize

Zbieranie informacji przed uruchomieniem wdrożenia

- name: Uruchom 'state=query', aby zgromadzić informacje bez wprowadzania zmian
  deploy_helper: path=/path/to/root state=query

Pamiętaj, aby ustawić parametr 'release', gdy faktycznie wywołasz 'state=present' później

- name: Zainicjalizuj główny folder wdrożenia
  deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=present

Wszystkie ścieżki mogą być absolutne lub względne (do parametru 'path')

- deploy_helper: path=/path/to/root
                 releases_path=/var/www/project/releases
                 shared_path=/var/www/shared
                 current_path=/var/www/active

Używanie własnej strategii nazewnictwa dla wersji (etykieta wersji w tym przypadku):

- deploy_helper: path=/path/to/root release=v1.1.1 state=present
- deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize

Używanie innej nazwy pliku niedokończonego:

- deploy_helper: path=/path/to/root
                 unfinished_filename=README.md
                 release={{ deploy_helper.new_release }}
                 state=finalize

Opóźnienie czyszczenia starszych buildów:

- deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize clean=False
- deploy_helper: path=/path/to/root state=clean

Lub uruchamianie czyszczenia przed nowym wdrożeniem

- deploy_helper: path=/path/to/root state=clean
- deploy_helper: path=/path/to/root state=present

Zachowywanie większej liczby starszych wersji:

- deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize keep_releases=10

Lub, jeśli używasz 'clean=false' przy finalizacji:

- deploy_helper: path=/path/to/root state=clean keep_releases=10

Usunięcie całego folderu głównego projektu

- deploy_helper: path=/path/to/root state=absent

Debugowanie informacji zwróconych przez moduł

- deploy_helper: path=/path/to/root
- debug: var=deploy_helper

Licencja

LGPL

Informacje o autorze

Ramon de la Fuente, ramon@delafuente.nl

O projekcie

Deploy_helper module for building (Capistrano like) deploy roles

Zainstaluj
ansible-galaxy install f500.project_deploy_module
Licencja
lgpl-3.0
Pobrania
6.8k
Właściciel
Open source contributions by Future500