raffienficiaud.ansible_atlassian_bambooagent_role

Ansible Atlassian BambooAgent 角色

该角色在目标机器上运行 Atlassian Bamboo 远程代理所需的操作。

此角色执行以下操作:

  • 创建运行 Bamboo 代理的用户,
  • 安装 Bamboo 服务器的证书,使得可以从服务器直接下载 Bamboo 代理的 jar 文件而不绕过任何安全措施(可选)。
  • 创建 Bamboo 代理的启动脚本,填充额外路径(构建工具)和其他选项(来自系统的选项如 CUDA_VISIBLE_DEVICES 或额外的 Bamboo 代理配置)
  • 注册 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_agent_root {{ bambooagent_install_root }}/bamboo-agent-home 运行 Bamboo 代理所需的特定文件根文件夹(.jar 文件、包装器等)。
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。在 OSX 上,JAVA_HOME 在代理启动时会自动设置。

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 代理管理视图中管理已批准的代理更容易。这可以像以下示例一样使用,将填充变量 bamboo_agent_UUID

- 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 上安装代理:路径的长度对大多数使用的工具很重要,缩短路径前缀非常重要。因此,可以在某个位置安装代理,然后指向根分区下的构建文件夹。
  • 当您想将构建数据与代理的数据和配置分开时:您可以使用不同的磁盘(快速的用于构建文件夹,较小的用于代理),或在这些文件夹上有单独的备份策略。

如前所述,构建文件夹只能在代理正确安装并注册到 Bamboo 服务器后设置。之后,正确的文件夹结构和配置文件将出现在安装文件夹中,可以更改构建文件夹。

更改构建文件夹的示例:

- 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 \
  远程机器名称或组 \
  -m win_service \
  -a "name=bamboo-remote-agent state=stopped" \
  --inventory inventory-bamboo.yml \
  --become

# 修改一些安装设置
ansible-playbook \
  --limit 远程机器名称或组 \
  --inventory inventory-bamboo.yml \
  --become \
  --tags=update_bamboo_config \
  playbooks/my-windows-play.yml

# 再次启动服务
ansible \
  远程机器名称或组 \
  -m win_service \
  -a "name=bamboo-remote-agent state=restarted" \
  --inventory inventory-bamboo.yml \
  --become

请注意,一些更新的字段可能不会出现在服务器上。从服务器中移除代理并在之后重新注册应该可以解决(在 Bamboo 代理中存在已知 bug)。

依赖

无额外依赖。

示例剧本

- hosts: bambooagents

  vars:
    - program_location: /folder/containing/installers/
    - server_url: https://my.local.network/bamboo/

    # Bamboo 代理的主文件夹(例如,在 Linux/OSX/等上应不同)
    - local_var_bambooagent_install_root: "/somebigdrive/bambooagent"

    # 用于计算要传输到远程的 bamboo 代理 JAR 文件的名称
    - bambooagent_version: "6.8.1"

    # 此指向可以从服务器下载的 .jar 的本地副本。
    - 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:
    # 这安装 bamboo 代理,并重写变量
    - 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('.') }}"

    # 声明系统构建者能力(python 二进制文件,已安装)的示例
    - 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

作者信息

欢迎在相应的 Github 项目上对 Ansible 提出任何评论、PR 或 bug 报告。

变更日志

0.1

  • 第一个正式版本(实际上不是,但之前的发布没有变更日志)
  • 将角色名称更改为 atlassian_bambooagent_role 以遵循 这些指南
  • 额外的代码审查
  • 新选项 bamboo_verify_certificates,在从 Bamboo 获取 JAR 时避免检查服务器证书。这在 OSX 上非常有用(见 这里),当服务器有公共证书时。 如果服务器使用自己的 CA,该 CA 已通过角色在系统范围内安装。
  • 现在 Windows 上安装的服务取自变量 bambooagent_service_name(而不是默认的 bamboo-remote-agent)。这使得在同一台 Windows 机器上运行多个代理成为可能。
  • 在从 Bamboo 服务器获取 JAR 时修复了在 Windows 上的 bug。
  • 在编写能力时修复了 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