f500.project_deploy_module
プロジェクトデプロイモジュール (deploy_helper)
このモジュールは、ansible-modules-extra用に提案されたdeploy_helperモジュールです。
一般的な説明(プロジェクトの例とフォルダ構造から始めます):
ルート: リリース: - 20140415234508 - 20140415235146 - 20140416082818
共有:
- セッション
- アップロード
現在: -> リリース/20140416082818
'releases'フォルダには、利用可能なすべてのリリースが格納されます。リリースはデプロイされるアプリケーションの完全なビルドです。例えば、リポジトリのクローンや、ファイルシステム上のローカルフォルダの同期が考えられます。タイムスタンプ付きのフォルダを持つことは異なるリリースを持つ一つの方法ですが、gitタグやコミットハッシュなど、自分自身の戦略を選ぶこともできます。
デプロイ中、新しいフォルダがリリースフォルダ内に作成され、必要なビルドステップが実行されます。新しいビルドが準備できたら、'current'シンボリックリンクがこのビルドへのリンクに置き換えられ、デプロイ手順が「完了」します。
'共有'フォルダには、リリース間で共有されるリソースが保存されます。例えば、ウェブサーバーのセッションファイルや、アプリケーションのユーザーによってアップロードされたファイルなどです。リリースフォルダから共有のサブフォルダを指すシンボリックリンクを持つことは非常に一般的で、これらのリンクを作成することはビルドステップの一部として自動化されます。
'current'シンボリックリンクは、リリースの1つを指します。おそらく最新のリリースであり、デプロイが進行中でない限りそうです。プロジェクトのウェブサーバーのルートは、このシンボリックリンクを通じてアクセスされるため、新しいリリースに切り替える際の「ダウンタイム」は、リンクを切り替えるのにかかる時間に抑えられます。
成功したビルドと未完了のビルドを区別するために、進行中のリリースのフォルダにファイルを置くことができます。このファイルの存在が未完了を示し、クリーンアップ時に自動的に削除される手続きが可能になります。
典型的な使用法:
- 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
後で 'state=present'を呼び出す際には、'release'パラメータを設定するのを忘れないでください
- 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
または、finalizeで '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
著者情報
ラモン・デ・ラ・フエンテ, ramon@delafuente.nl