raffienficiaud.ansible_atlassian_bambooagent_role
Ansible Atlassian BambooAgent ロール
このロールは、ターゲットマシン上で Atlassian Bamboo のリモートエージェントを実行するために必要な操作を行います。
このロールは以下のアクションを実行します:
- bamboo エージェントを実行するユーザーを作成します。
- bamboo サーバーの証明書をインストールし、セキュリティを回避することなくサーバーから直接 bamboo エージェントの
jar
ファイルをダウンロードできるようにします(オプション)。 - bamboo エージェントの起動スクリプトを作成し、追加のパス(ビルドツール)やオプション(システムの環境変数
CUDA_VISIBLE_DEVICES
や追加の Bamboo Agent 設定)を設定します。 - bamboo エージェントの起動スクリプトをブート時にエージェントを起動するように登録します。
- オペレーティングシステム上に自動起動サービスを登録します。
- エージェントの機能を設定します。
- ビルドフォルダーとエージェントの名前を変更します。
要件
ターゲットオペレーティングシステムに Java がインストールされている必要があります。これには ansible-atlassian-bambooagent-oracle-java
ロールの使用を検討してください。
ロールの変数
このロールの設定には以下の変数が必要です。
変数 | デフォルト | 意味 |
---|---|---|
bamboo_server_url |
"" (空文字列) |
Bamboo インスタンスの URL を示します。設定する必要があります。 |
bambooagent_user |
bambooagent |
bamboo エージェントを実行するユーザー |
bambooagent_group |
bambooagent_grp |
bamboo エージェントユーザーが所属するグループ |
bambooagent_service_name |
bambooagent |
bamboo エージェントを実行するサービスの名前。スタート・シャットダウンの管理コマンドでサービスとして表示されます。 |
bambooagent_install_root |
/home/{{ bambooagent_user }} |
エージェントに関連するすべてのプログラム/スクリプトがインストールされるルートフォルダー。 |
bambooagent_agent_root |
{{ bambooagent_install_root }}/bamboo-agent-home |
bamboo エージェントを実行するために特有のファイルのルートフォルダー。 |
bambooagent_version |
5.11.1.1 | エージェントのバージョン |
bamboo_java_jar_file |
"" (空文字列) | Bamboo エージェントランチャーの .jar ファイル。デフォルトでは、ロールがこのファイルを Bamboo サーバーから直接取得しようとします。 |
bambooagent_jar_filename |
atlassian-bamboo-agent-installer-{{ bambooagent_version }}.jar |
リモートエージェント上の jar ファイル |
bambooagent_jar_filename_full_path |
{{ bambooagent_install_root }}/{{ bambooagent_jar_filename }} |
リモートエージェント上の jar ファイルの完全パス |
bambooagent_capability_file |
{{ bambooagent_agent_root }}/bin/bamboo-capabilities.properties |
リモートエージェント上の機能ファイルの場所 |
bambooagentjava_additional_options |
|
Java 仮想マシンに渡す追加オプション。リスト形式にする必要があります。 |
bambooagent_additional_environment |
[] (空リスト) |
bamboo エージェントを実行する前に設定する追加の環境変数(例: CUDA_VISIBLE_DEVICES=1 )。リスト形式にする必要があります。 |
certificate_files |
[] |
証明書の定義リスト(詳細は下記を参照)。 |
bamboo_verify_certificates |
True |
JAR ファイルを取得する際にサーバーの証明書を検証します。 |
Java
エージェントのバージョンは、インストールされた Java とうまく連携する必要があります。例えば、Bamboo エージェントのバージョン 5.11 は Java 8 を必要とします。JAVA_HOME
はエージェントの起動時に自動的に OSX で設定されます。
Bamboo 機能
特定の機能は、Atlassian Bamboo の機能を利用してエージェントによって自動的に宣言されることがあります:機能ファイル。 このファイルは非常に簡単な形式で、インストールフォルダー内にあります。
機能ファイルには、プレイブックを実行することで宣言される機能が設定されます。これは、機能の名前とその値を示すペアのリストです。
- name: '[BAMBOO] 機能の空の宣言'
set_fact:
bamboo_capabilities: {}
機能は、ディスクから読み取ることによって最初に更新することも可能で、例えば pre_task
を使用します:
pre_tasks:
- name: エージェント機能ファイルの読み込み
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
そして、post_task
としてディスクに書き込むことができます:
post_tasks:
- name: エージェント機能ファイルの更新
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
読み取りと書き込みは、辞書 bamboo_capabilities
(fact
として)を入力/出力として使用しています。これらの関数は、異なるプラットフォーム上で /
と \
のエスケープを適切に処理します。
プレイブックの典型的な例は次のようになります:
- hosts: my-bamboo-agents
vars:
- bambooagent_agent_root: "指定されたエージェントルートまたはデフォルト"
pre_tasks:
- name: エージェント機能ファイルの読み込み
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
post_tasks:
- name: エージェント機能ファイルの更新
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
tasks:
- name: '機能を更新'
set_fact:
bamboo_capabilities: "{{ bamboo_capabilities | combine({item.key:item.value}) }}"
loop:
- key: 'bamboo_custom_capability'
value: "bamboo_custom_capability_value"
# ...
機能の削除
時間が経つにつれて、機能の管理が重要になってきます。特にエージェントの数が増えると、古くなった機能を削除することができます。bamboo_capabilities_to_remove
リストに削除する必要がある機能の名前を示すことで実行できます。
- hosts: my-bamboo-agents
vars:
- bambooagent_agent_root: "指定されたエージェントルートまたはデフォルト"
tasks:
- name: '[BAMBOO] 古くなった機能を削除'
set_fact:
bamboo_capabilities_to_remove:
- cache_folder1
- qt_version3
post_tasks:
- name: エージェント機能ファイルの更新
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
エージェント UUID の取得
ロールには、エージェントの UUID
を取得するための専用ヘルパーが含まれています。これにより、Bamboo エージェントの管理が容易になります。次の例のように使用できます。
- hosts: my-bamboo-agents
vars:
- bambooagent_agent_root: "指定されたエージェントルートまたはデフォルト"
tasks:
- name: エージェント UUID を取得
include_role:
name: atlassian_bambooagent_role
tasks_from: get_agent_uuid
tags: ['never', 'bamboo_agent_uuid']
- name: エージェント UUID を表示
debug:
var: bamboo_agent_UUID
tags: ['never', 'bamboo_agent_uuid']
サービスに対する HTTPS 証明書
証明書は certificate_files
という変数に、証明書のエイリアス/ファイル名ペアのリストとして含まれている必要があります。
- certificate_files:
- alias: "bamboo_server_certificate_alias"
file: "{{some_root_location}}/bamboo_server_certificate.crt"
ビルドフォルダー
ビルドフォルダーは、エージェントがインストールされ、Bamboo サーバーに正しく登録された後に変更できます。これが特に関連するのは次のシナリオです:
- エージェントが Windows にインストールされている場合:パスの長さがほとんどのツールに対して重要であり、パスのプレフィックスを短くすることが重要です。エージェントをある場所にインストールし、ビルドフォルダーをパーティションのルート直下のフォルダーにポイントすることができます。
- エージェントのデータと設定からビルドデータを分離したい場合:異なるドライブ(ビルドフォルダー用の高速なドライブや、エージェント用の小さなドライブ)を使用したり、これらのフォルダーに対して異なるバックアップポリシーを適用することができます。
変更の例は次のようになります:
- hosts: windows-agents
vars:
- bambooagent_agent_root: "{{ bamboo_agents[inventory_hostname].bamboo_folder }}"
tasks:
- name: エージェントの設定を更新
include_role:
name: atlassian_bambooagent_role
tasks_from: update_agent_configuration
vars:
bamboo_agent_name: "エージェントの新しい名前"
bamboo_agent_description: "XYZ のリモートエージェント"
bamboo_build_folder: "D:\\"
bambooagent_user: "bamboo_user" # ビルドフォルダーを正しい権限で作成するためのオプション
tags: ['never', 'update_bamboo_config']
前のタスクは、明示的にコマンドラインで指定されない限り実行されません。この更新を行う前にサービスを停止するのが良いです。コマンドラインからは次のように実行できます。またはプレイブック内で完全に統合できます。
ansible \
remote-machine-name-or-group \
-m win_service \
-a "name=bamboo-remote-agent state=stopped" \
--inventory inventory-bamboo.yml \
--become
# インストール設定を変更します
ansible-playbook \
--limit remote-machine-name-or-group \
--inventory inventory-bamboo.yml \
--become \
--tags=update_bamboo_config \
playbooks/my-windows-play.yml
# サービスを再起動します
ansible \
remote-machine-name-or-group \
-m win_service \
-a "name=bamboo-remote-agent state=restarted" \
--inventory inventory-bamboo.yml \
--become
一部の更新されたフィールドはサーバーには表示されないことがあります。サーバーからエージェントを削除し、その後再登録することで解決できます(Bamboo エージェントの既知のバグ)。
依存関係
追加の依存関係はありません。
実例プレイブック
- hosts: bambooagents
vars:
- program_location: /folder/containing/installers/
- server_url: https://my.local.network/bamboo/
- local_var_bambooagent_install_root: "/somebigdrive/bambooagent"
- bambooagent_version: "6.8.1"
- local_copy_of_bamboo_agent_jar: "/some/folder/{{ bambooagent_jar_filename }}"
pre_tasks:
- name: エージェント機能ファイルの読み込み
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
post_tasks:
- name: エージェントの機能を更新
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
roles:
- name: bamboo エージェントをインストールします
role: atlassian_bambooagent_role
vars:
bambooagent_user: "bamboo_service_user"
bambooagent_group: "bamboo_service_group"
bambooagent_agent_root: "/mount/folder/fast/disk/bamboo-agent"
bambooagent_service_name: atlassian-bambooagent
bamboo_server_url: "{{ server_url }}"
bamboo_java_jar_file: "{{ local_copy_of_bamboo_agent_jar }}"
bambooagent_install_root: "{{ local_var_bambooagent_install_root }}"
certificate_files:
- alias: "my.certificate.authority.crt"
file: "/some/local/folder/my.certificate.authority.crt"
tags: bamboo
tasks:
- name: '[BAMBOO] デフォルト機能'
set_fact:
bamboo_capabilities: "{{ bamboo_capabilities | combine({item.key:item.value}) }}"
loop:
- key: 'operating_system'
value: "{{ bamboo_operating_system }}"
- key: agent_name
value: "{{ ansible_fqdn }}"
- key: osversion
value: "{{ ansible_distribution_version.split('.')[:2] | join('.') }}"
- block:
- name: '[BAMBOO] python の実行'
command: python -c "import sys; print('%d.%d\n%s' % (sys.version_info.major, sys.version_info.minor, sys.executable))"
register: bamboo_capability_python_version
- name: '[BAMBOO] python を登録'
set_fact:
bamboo_capabilities: "{{ bamboo_capabilities | combine({item.key:item.value}) }}"
loop:
- key: 'system.builder.command.python{{bamboo_capability_python_version.stdout_lines.0}}'
value: '{{ bamboo_capability_python_version.stdout_lines.1 }}'
ライセンス
BSD
著者情報
Ansible のコメント、PR またはバグ報告は、関連する GitHub プロジェクトから大歓迎です。
変更履歴
0.1
- 最初の公式バージョン(実際には、以前のリリースには変更履歴がありませんでした)
- ロール名を
atlassian_bambooagent_role
に変更し、これらのガイドラインに従います - 追加のリント
- JAR を Bamboo から取得する際のサーバー証明書のチェックを回避する新しいオプション
bamboo_verify_certificates
を追加しました。これは OSX でのみ有用です(ここを参照)で、サーバーが公開証明書を持っている場合。 - Windows のインストールサービスは変数
bambooagent_service_name
から取得されるようになりました(デフォルトのbamboo-remote-agent
ではなく)。これにより、同じ Windows マシンで複数のエージェントを実行できるようになりました。 - Bamboo サーバーから JAR を取得する際のバグを修正しました。
- 機能の書き込みに関するバグを修正しました(Windows とその他のプラットフォームの違いを考慮)。
Installs Atlassian Bamboo remote agent on a target machine
ansible-galaxy install raffienficiaud.ansible_atlassian_bambooagent_role