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

О проекте

Deploy_helper module for building (Capistrano like) deploy roles

Установить
ansible-galaxy install f500/ansible-project_deploy_module
Лицензия
lgpl-3.0
Загрузки
6782
Владелец
Open source contributions by Future500