community.general.deploy_helper модуль – Управляет некоторыми шагами, общими при развертывании проектов
Примечание
Этот модуль является частью коллекции community.general (версия 9.5.0).
У вас, возможно, уже установлена эта коллекция, если вы используете пакет ansible. Она не включена в ansible-core. Чтобы проверить установку, выполните ansible-galaxy collection list.
Для установки используйте: ansible-galaxy collection install community.general.
Для использования в книге задач укажите: community.general.deploy_helper.
Обзор
- Модуль Deploy Helper управляет некоторыми шагами, общими при развертывании программного обеспечения. Он создаёт структуру папок, управляет символьными ссылками для текущей версии и очищает старые версии.
- Запуск с параметрами
state=queryилиstate=presentвернёт фактdeploy_helper.project_path, значение, которое вы установили в параметреpath,current_path, путь к симлинку, указывающему на активную версию,releases_path, путь к папке для хранения версий,shared_path, путь к папке для хранения общих ресурсов,unfinished_filename, файл для проверки статуса незавершенных сборок,previous_release, версия, на которую указывает симлинк 'current',previous_release_path, полный путь к цели симлинка 'current',new_release, либо параметр 'release', либо сгенерированная метка времени,new_release_path, путь к новой папке версии (не создаваемой модулем).
Параметры
Параметр | Комментарии |
|---|---|
attributes псевдонимы: attr строка | Атрибуты, которые должен иметь создаваемый объект файловой системы. Для получения поддерживаемых флагов обратитесь к странице руководства для chattr на целевой системе. Эта строка должна содержать атрибуты в том же порядке, что и при отображении lsattr. Оператор |
clean логический | |
current_path путь | Имя символической ссылки, создаваемой при завершении развертывания. Используется в По умолчанию: |
group строка | Имя группы, которой должен принадлежать объект файловой системы, как это передается в chown. Если не указано, используется текущая группа текущего пользователя, за исключением случая root, когда может сохраняться предыдущая собственность. |
keep_releases целое число | Количество старых релизов, которые необходимо сохранить при очистке. Используется в По умолчанию: |
mode любой | Разрешения, которые должен иметь создаваемый объект файловой системы. Для тех, кто привык к /usr/bin/chmod, помните, что режимы на самом деле являются восьмеричными числами. Вы должны предоставить Ansible достаточно информации, чтобы правильно их обработать. Для согласованных результатов заключайте восьмеричные числа в кавычки (например, Передача Ansible числа без соблюдения этих правил приведет к десятичному числу, что даст непредсказуемые результаты. Начиная с Ansible 1.8, режим может быть указан как символический режим (например, Если Если Указание |
owner строка | Имя пользователя, которому должен принадлежать объект файловой системы, как это передается в chown. Если не указано, используется текущий пользователь, за исключением случая root, когда может сохраняться предыдущая собственность. Указание числового имени пользователя будет интерпретировано как идентификатор пользователя, а не имя пользователя. Избегайте числовых имён пользователей, чтобы избежать этой путаницы. |
path псевдонимы: dest путь / обязательно | Корневой путь проекта. Возвращается в факте |
release строка | Версия выпуска, которая развертывается. По умолчанию используется формат даты и времени |
releases_path строка | Имя папки, которая будет содержать релизы. Может быть относительным к По умолчанию: |
selevel строка | Часть уровня контекста объекта файловой системы SELinux. Это атрибут MLS/MCS, иногда называемый При установке в значение |
serole строка | Часть роли контекста объекта файловой системы SELinux. При установке в значение |
setype строка | Часть типа контекста объекта файловой системы SELinux. При установке в значение |
seuser строка | Часть пользователя контекста объекта файловой системы SELinux. По умолчанию используется политика При установке в значение |
путь | Имя папки, которая будет содержать общие ресурсы. Может быть относительным к По умолчанию: |
state string | Состояние проекта.
Варианты:
|
unfinished_filename string | Имя файла, указывающего на то, что развертывание не завершено. Все папки в По умолчанию: |
unsafe_writes boolean | Влияние на использование атомной операции для предотвращения повреждения данных или несогласованного чтения из объекта целевой файловой системы. По умолчанию этот модуль использует атомные операции для предотвращения повреждения данных или несогласованного чтения из целевых объектов файловой системы, но иногда системы настроены или просто работают таким образом, что это невозможно. Одним из примеров являются объекты файловой системы, смонтированные в Docker, которые не могут быть обновлены атомно изнутри контейнера и могут быть записаны только небезопасным способом. Этот параметр позволяет Ansible переключаться на небезопасные методы обновления объектов файловой системы, когда атомные операции терпят неудачу (однако он не заставляет Ansible выполнять небезопасные записи). ВАЖНО! Небезопасные записи подвержены гонкам и могут привести к повреждению данных. Варианты:
|
Атрибуты
Атрибут | Поддержка | Описание |
|---|---|---|
check_mode | Поддержка: полная | Может работать в режиме |
diff_mode | Поддержка: нет | Возвращает подробности о том, что изменилось (или, возможно, нуждается в изменении в |
Примечания
Примечание
- Факты возвращаются только для
state=queryиstate=present. Если вы используете оба, вы должны передать любые изменённые параметры в оба вызова, иначе второй вызов перезапишет факты первого. - При использовании
state=clean, релизы упорядочиваются по дате создания. Вы должны иметь возможность переключиться на новую стратегию именования без проблем. - Из-за поведения по умолчанию генерации факта
new_releaseэтот модуль не будет идемпотентным, если вы не передадите собственное имя выпуска сrelease. Из-за характера развертывания программного обеспечения, это не должно быть большой проблемой.
Примеры
# General explanation, starting with an example folder structure for a project:
# root:
# releases:
# - 20140415234508
# - 20140415235146
# - 20140416082818
#
# shared:
# - sessions
# - uploads
#
# current: releases/20140416082818
# The 'releases' folder holds all the available releases. A release is a complete build of the application being
# deployed. This can be a clone of a repository for example, or a sync of a local folder on your filesystem.
# Having timestamped folders is one way of having distinct releases, but you could choose your own strategy like
# git tags or commit hashes.
#
# During a deploy, a new folder should be created in the releases folder and any build steps required should be
# performed. Once the new build is ready, the deploy procedure is 'finalized' by replacing the 'current' symlink
# with a link to this build.
#
# The 'shared' folder holds any resource that is shared between releases. Examples of this are web-server
# session files, or files uploaded by users of your application. It's quite common to have symlinks from a release
# folder pointing to a shared/subfolder, and creating these links would be automated as part of the build steps.
#
# The 'current' symlink points to one of the releases. Probably the latest one, unless a deploy is in progress.
# The web-server's root for the project will go through this symlink, so the 'downtime' when switching to a new
# release is reduced to the time it takes to switch the link.
#
# To distinguish between successful builds and unfinished ones, a file can be placed in the folder of the release
# that is currently in progress. The existence of this file will mark it as unfinished, and allow an automated
# procedure to remove it during cleanup.
# Typical usage
- name: Initialize the deploy root and gather facts
community.general.deploy_helper:
path: /path/to/root
- name: Clone the project to the new release folder
ansible.builtin.git:
repo: ansible.builtin.git://foosball.example.org/path/to/repo.git
dest: '{{ deploy_helper.new_release_path }}'
version: v1.1.1
- name: Add an unfinished file, to allow cleanup on successful finalize
ansible.builtin.file:
path: '{{ deploy_helper.new_release_path }}/{{ deploy_helper.unfinished_filename }}'
state: touch
- name: Perform some build steps, like running your dependency manager for example
composer:
command: install
working_dir: '{{ deploy_helper.new_release_path }}'
- name: Create some folders in the shared folder
ansible.builtin.file:
path: '{{ deploy_helper.shared_path }}/{{ item }}'
state: directory
with_items:
- sessions
- uploads
- name: Add symlinks from the new release to the shared folder
ansible.builtin.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: Finalize the deploy, removing the unfinished file and switching the symlink
community.general.deploy_helper:
path: /path/to/root
release: '{{ deploy_helper.new_release }}'
state: finalize
# Retrieving facts before running a deploy
- name: Run 'state=query' to gather facts without changing anything
community.general.deploy_helper:
path: /path/to/root
state: query
# Remember to set the 'release' parameter when you actually call 'state=present' later
- name: Initialize the deploy root
community.general.deploy_helper:
path: /path/to/root
release: '{{ deploy_helper.new_release }}'
state: present
# all paths can be absolute or relative (to the 'path' parameter)
- community.general.deploy_helper:
path: /path/to/root
releases_path: /var/www/project/releases
shared_path: /var/www/shared
current_path: /var/www/active
# Using your own naming strategy for releases (a version tag in this case):
- community.general.deploy_helper:
path: /path/to/root
release: v1.1.1
state: present
- community.general.deploy_helper:
path: /path/to/root
release: '{{ deploy_helper.new_release }}'
state: finalize
# Using a different unfinished_filename:
- community.general.deploy_helper:
path: /path/to/root
unfinished_filename: README.md
release: '{{ deploy_helper.new_release }}'
state: finalize
# Postponing the cleanup of older builds:
- community.general.deploy_helper:
path: /path/to/root
release: '{{ deploy_helper.new_release }}'
state: finalize
clean: false
- community.general.deploy_helper:
path: /path/to/root
state: clean
# Or running the cleanup ahead of the new deploy
- community.general.deploy_helper:
path: /path/to/root
state: clean
- community.general.deploy_helper:
path: /path/to/root
state: present
# Keeping more old releases:
- community.general.deploy_helper:
path: /path/to/root
release: '{{ deploy_helper.new_release }}'
state: finalize
keep_releases: 10
# Or, if you use 'clean=false' on finalize:
- community.general.deploy_helper:
path: /path/to/root
state: clean
keep_releases: 10
# Removing the entire project root folder
- community.general.deploy_helper:
path: /path/to/root
state: absent
# Debugging the facts returned by the module
- community.general.deploy_helper:
path: /path/to/root
- ansible.builtin.debug:
var: deploy_helper
Ссылки на коллекцию
© 2012–2018 Michael DeHaan
© 2018–2024 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/latest/collections/community/general/deploy_helper_module.html