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
ansible-galaxy install f500.project_deploy_module