project_deploy_module
Модуль развертывания проекта (deploy_helper)
Включенный модуль - это предлагаемый модуль deploy_helper для ansible-modules-extra.
Общее объяснение, начиная с примерной структуры папок для проекта:
root: releases: - 20140415234508 - 20140415235146 - 20140416082818
shared:
- sessions
- uploads
current: -> releases/20140416082818
Папка 'releases' содержит все доступные релизы. Релиз - это полная сборка приложения, которое разворачивается. Это может быть, например, клон репозитория или синхронизация локальной папки в файловой системе. Использование папок с метками времени - один из способов иметь отдельные релизы, но вы можете выбрать свою собственную стратегию, например, метки git или хеши коммитов.
Во время развертывания должна быть создана новая папка в папке releases, и должны быть выполнены все необходимые шаги сборки. Как только новая сборка готова, процедура развертывания завершается заменой символической ссылки 'current' на ссылку на эту сборку.
Папка 'shared' содержит все ресурсы, которые являются общими между релизами. Примеры этого - файлы сеансов веб-сервера или файлы, загруженные пользователями вашего приложения. Очень часто в папке релиза создаются символические ссылки на общую/подпапку, и создание этих ссылок будет автоматизировано как часть шагов сборки.
Символическая ссылка 'current' указывает на один из релизов. Наверняка на последний, если развертывание не находится в процессе. Корень веб-сервера для проекта будет проходить через эту символическую ссылку, поэтому «время простоя» при переходе на новый релиз сокращается до времени, необходимого для переключения ссылки.
Чтобы отличать успешные сборки от незавершенных, в папку текущего релиза можно поместить файл. Наличие этого файла будет отмечать релиз как незавершенный и позволит автоматизированной процедуре удалить его во время очистки.
Типичное использование:
- name: Инициализировать корень развертывания и собрать факты
deploy_helper: path=/path/to/root
- name: Клонировать проект в новую папку релиза
git: repo=git://foosball.example.org/path/to/repo.git dest={{ deploy_helper.new_release_path }} version=v1.1.1
- name: Добавить незавершенный файл, чтобы разрешить очистку при успешной финализации
file: path={{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }} state=touch
- name: Выполнить некоторые шаги сборки, например, запустить ваш менеджер зависимостей
composer: command=install working_dir={{ deploy_helper.new_release_path }}
- name: Создать несколько папок в общей папке
file: path='{{ deploy_helper.shared_path }}/{{ item }}' state=directory
with_items: ['sessions', 'uploads']
- name: Добавить символические ссылки из нового релиза в общую папку
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: Завершить развертывание, удалив незавершенный файл и переключив символическую ссылку
deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize
Получение фактов перед запуском развертывания
- name: Выполнить 'state=query', чтобы собрать факты, не внося изменений
deploy_helper: path=/path/to/root state=query
Не забудьте установить параметр 'release', когда вы на самом деле вызовете 'state=present' позже
- name: Инициализировать корень развертывания
deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=present
Все пути могут быть абсолютными или относительными (по отношению к параметру 'path')
- deploy_helper: path=/path/to/root
releases_path=/var/www/project/releases
shared_path=/var/www/shared
current_path=/var/www/active
Использование вашей собственной стратегии именования для релизов (например, тег версии):
- 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
Использование другого имени для незавершенного файла:
- deploy_helper: path=/path/to/root
unfinished_filename=README.md
release={{ deploy_helper.new_release }}
state=finalize
Отложенная очистка старых сборок:
- deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize clean=False
- deploy_helper: path=/path/to/root state=clean
Или запуск очистки перед новым развертыванием
- deploy_helper: path=/path/to/root state=clean
- deploy_helper: path=/path/to/root state=present
Сохранение большего количества старых релизов:
- deploy_helper: path=/path/to/root release={{ deploy_helper.new_release }} state=finalize keep_releases=10
Или, если вы используете 'clean=false' при финализации:
- deploy_helper: path=/path/to/root state=clean keep_releases=10
Удаление всей корневой папки проекта
- deploy_helper: path=/path/to/root state=absent
Отладка фактов, возвращаемых модулем
- deploy_helper: path=/path/to/root
- debug: var=deploy_helper
Лицензия
LGPL
Информация об авторе
Рамон де ла Фуэнтe, ramon@delafuente.nl
ansible-galaxy install f500/ansible-project_deploy_module