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
  • -Djava.awt.headless=true
  • -Dbamboo.home={{ bambooagent_agent_root }}
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_capabilitiesfact として)を入力/出力として使用しています。これらの関数は、異なるプラットフォーム上で /\ のエスケープを適切に処理します。

プレイブックの典型的な例は次のようになります:

- 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
ライセンス
Unknown
ダウンロード
549
所有者
ML Engineer, computer vision and C++/Python addict. Open source advocate. Atlassian enthusiast https://bitbucket.org/renficiaud https://yayimorphology.org