raffienficiaud.ansible_atlassian_bambooagent_role
Rola Ansible Atlassian BambooAgent
Ta rola wykonuje niezbędne kroki do uruchomienia zdalnego agenta Atlassian Bamboo na docelowej maszynie.
Rola wykonuje następujące działania:
- tworzy użytkownika uruchamiającego agenta Bamboo,
- instaluje certyfikat serwera Bamboo, dzięki któremu możliwe jest pobranie pliku
jar
agenta Bamboo bez pomijania jakichkolwiek zabezpieczeń (opcjonalnie), - tworzy skrypty startowe dla agenta Bamboo, dodaje dodatkowe ścieżki (narzędzia do budowy) i dodatkowe opcje (np. z systemu, takie jak
CUDA_VISIBLE_DEVICES
lub dodatkowe konfiguracje agenta Bamboo), - rejestruje skrypt startowy agenta Bamboo, aby agent uruchamiał się przy starcie systemu,
- rejestruje automatyczną usługę w systemie operacyjnym,
- uzupełnia możliwości agenta,
- zmienia folder budowy i nazwę agenta.
Wymagania
Java powinna być zainstalowana na docelowym systemie operacyjnym. Rozważ użycie roli ansible-atlassian-bambooagent-oracle-java
w tym celu.
Zmienne roli
Poniższe zmienne muszą być ustawione dla roli.
zmienna | wartość domyślna | znaczenie |
---|---|---|
bamboo_server_url |
"" (pusty ciąg) |
Wskazuje URL Twojej instancji Bamboo. Powinno być ustawione. |
bambooagent_user |
bambooagent |
użytkownik uruchamiający agenta Bamboo |
bambooagent_group |
bambooagent_grp |
grupa, do której należy użytkownik agenta Bamboo |
bambooagent_service_name |
bambooagent |
nazwa usługi uruchamiającej agenta Bamboo. Będzie używana w poleceniach administracyjnych uruchamiania-zatrzymywania |
bambooagent_install_root |
/home/{{ bambooagent_user }} |
folder główny, w którym będą zainstalowane wszystkie programy/skrypty agenta (startowe, inne lokalne programy). To może być folder domowy agenta, chociaż będzie zawierał folder budowy pod bambooagent_agent_root . |
bambooagent_agent_root |
{{ bambooagent_install_root }}/bamboo-agent-home |
folder główny dla plików specyficznych dla uruchamiania agenta Bamboo (plik .jar, wrapper itp). |
bambooagent_version |
5.11.1.1 | wersja agenta |
bamboo_java_jar_file |
"" (pusty ciąg) | Plik .jar uruchamiający agenta Bamboo. Jeśli pusty (domyślny), rola spróbuje pobrać ten plik bezpośrednio z serwera Bamboo. Należy pamiętać, że chodzi o ten z wrapperem usługi. |
bambooagent_jar_filename |
atlassian-bamboo-agent-installer-{{ bambooagent_version }}.jar |
plik jar na zdalnym agencie |
bambooagent_jar_filename_full_path |
{{ bambooagent_install_root }}/{{ bambooagent_jar_filename }} |
pełna lokalizacja pliku jar na zdalnym agencie |
bambooagent_capability_file |
{{ bambooagent_agent_root }}/bin/bamboo-capabilities.properties |
lokalizacja pliku możliwości na zdalnym agencie |
bambooagentjava_additional_options |
|
dodatkowe opcje przekazywane do maszyny wirtualnej Java. Powinny być to listy |
bambooagent_additional_environment |
[] (pusta lista) |
dodatkowe zmienne środowiskowe ustawiane przed uruchomieniem agenta Bamboo (np. CUDA_VISIBLE_DEVICES=1 ). To powinna być lista |
certificate_files |
[] |
Lista definicji certyfikatów (zobacz poniżej). |
bamboo_verify_certificates |
True |
weryfikuje certyfikaty serwera przy pobieraniu pliku JAR z niego. |
Java
Wersja agenta powinna współpracować z zainstalowaną Javą. Na przykład, wersja 5.11 agenta Bamboo wymaga Javy 8. JAVA_HOME
jest automatycznie ustawiane w systemie OSX podczas uruchamiania agenta.
Możliwości Bamboo
Specyficzne możliwości mogą być automatycznie zadeklarowane przez agenta, korzystając z funkcji Atlassian Bamboo: pliku możliwości. Ten plik ma bardzo prosty format i znajduje się w folderze instalacyjnym.
Plik możliwości otrzyma możliwości, które są zadeklarowane podczas uruchamiania playbooka. To jest lista par (słownik) wskazujących nazwę możliwości wraz z jej wartością.
- name: '[BAMBOO] deklaracja pustych możliwości'
set_fact:
bamboo_capabilities: {}
Można zaktualizować możliwości, najpierw odczytując je z dysku, używając np. pre_task
:
pre_tasks:
- name: Odczyt pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
a następnie zapisać je na dysku jako np. post_task
:
post_tasks:
- name: Aktualizacja pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
Odczyt i zapis używają słownika bamboo_capabilities
(jako fact
) jako wejścia/wyjścia. Funkcje dbają o odpowiednie kodowanie /
i \
na różnych platformach.
Typowy play w playbooku wyglądałby tak:
- hosts: my-bamboo-agents
vars:
# ta zmienna musi być ustawiona, aby pobrać plik możliwości
- bambooagent_agent_root: "określony folder agenta lub domyślny"
pre_tasks:
# to odczyta plik możliwości, jeśli istnieje
- name: Odczyt pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
post_tasks:
# to zaktualizuje plik możliwości i utworzy go, jeśli to konieczne
- name: Aktualizacja pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
tasks:
# ... zadania
- name: 'aktualizacja możliwości'
set_fact:
bamboo_capabilities: "{{ bamboo_capabilities | combine({item.key:item.value}) }}"
loop:
- key: 'bamboo_custom_capability'
value: "bamboo_custom_capability_value"
# ...
Usuwanie możliwości
Z biegiem czasu umiejętność utrzymania możliwości jest ważna, szczególnie gdy liczba agentów rośnie. Korzystając z tych samych narzędzi, można usunąć możliwości, które stały się nieaktualne. Można to zrobić, wskazując na liście bamboo_capabilities_to_remove
nazwy możliwości, które należy usunąć.
- hosts: my-bamboo-agents
vars:
- bambooagent_agent_root: "określony folder agenta lub domyślny"
tasks:
- name: '[BAMBOO] usunięcie nieaktualnych możliwości'
set_fact:
bamboo_capabilities_to_remove:
- cache_folder1
- qt_version3
post_tasks:
# to zaktualizuje plik możliwości i utworzy go, jeśli to konieczne
- name: Aktualizacja pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
Pobieranie UUID agenta
Rola zawiera dedykowaną pomoc do pobierania UUID
agenta, co ułatwia zarządzanie zatwierdzonymi agentami w widoku administracyjnym agentów Bamboo. Może to być używane w następującym przykładzie, który wypełni zmienną bamboo_agent_UUID
.
- hosts: my-bamboo-agents
vars:
- bambooagent_agent_root: "określony folder agenta lub domyślny"
tasks:
- name: Pobierz UUID agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: get_agent_uuid
tags: ['never', 'bamboo_agent_uuid']
- name: Wyświetl UUID agenta
debug:
var: bamboo_agent_UUID
tags: ['never', 'bamboo_agent_uuid']
Certyfikat HTTPS do usługi
Certyfikat powinien być w zmiennej certificate_files
(lista certyfikatów jako par alias/nazwa pliku) jak poniżej:
- certificate_files:
- alias: "alias_certifikatu_serwera_bamboo"
file: "{{jakieś_miejsce_katalogu}}/bamboo_server_certificate.crt"
Folder budowy
Folder budowy może być zmieniany po zainstalowaniu i odpowiedniej rejestracji agenta z serwerem Bamboo. Jest to szczególnie istotne w następujących przypadkach:
- agent jest zainstalowany na Windows: długość ścieżek ma znaczenie dla większości narzędzi, które chciałbyś użyć, skrócenie prefiksu ścieżki jest ważne. Możliwe jest zainstalowanie agenta w pewnej lokalizacji, a następnie wskazanie folderu budowy na folder bezpośrednio pod korzeniem partycji.
- gdy chcesz oddzielić dane budowy od danych i konfiguracji agenta: możesz wtedy używać różnych dysków (szybkich dla folderu budowy, mniejszych dla danych agenta), lub mieć oddzielną politykę tworzenia kopii zapasowych na tych folderach.
Jak wspomniano, folder budowy można ustawić tylko po prawidłowej instalacji i rejestracji agenta z serwerem Bamboo. Po tym, w folderze instalacyjnym pojawia się odpowiednia struktura folderu i plik konfiguracyjny, co umożliwia zmianę folderu budowy.
Przykładem zmiany folderu budowy byłoby to:
- hosts: windows-agents
vars:
- bambooagent_agent_root: "{{ bamboo_agents[inventory_hostname].bamboo_folder }}"
tasks:
- name: Aktualizacja konfiguracji agentów
include_role:
name: atlassian_bambooagent_role
tasks_from: update_agent_configuration
vars:
bamboo_agent_name: "nowa-nazwa-dla-agenta"
bamboo_agent_description: "Zdalny agent na XYZ"
bamboo_build_folder: "D:\\"
bambooagent_user: "bamboo_user" # opcjonalnie, aby utworzyć folder budowy z odpowiednimi uprawnieniami
tags: ['never', 'update_bamboo_config']
Poprzednie zadanie nie będzie uruchamiane, chyba że określone explicite w linii poleceń. Lepiej zatrzymać usługę przed uruchomieniem tej aktualizacji. Z linii poleceń można to osiągnąć w ten sposób lub całkowicie zintegrować w play:
ansible \
nazwa-lub-grupa-maszyny-zdalnej \
-m win_service \
-a "name=bamboo-remote-agent state=stopped" \
--inventory inventory-bamboo.yml \
--become
# modyfikujemy niektóre ustawienia instalacji
ansible-playbook \
--limit nazwa-lub-grupa-maszyny-zdalnej\
--inventory inventory-bamboo.yml \
--become \
--tags=update_bamboo_config \
playbooks/my-windows-play.yml
# ponownie uruchamiamy usługę
ansible \
nazwa-lub-grupa-maszyny-zdalnej \
-m win_service \
-a "name=bamboo-remote-agent state=restarted" \
--inventory inventory-bamboo.yml \
--become
Należy zauważyć, że niektóre aktualizowane pola nie będą widoczne na serwerze. Usunięcie agenta z serwera i ponowne zarejestrowanie go powinno to naprawić (znany błąd agenta Bamboo).
Zależności
Brak dodatkowych zależności.
Przykład Playbooka
- hosts: bambooagents
vars:
- program_location: /folder/zawierający/instalatory/
- server_url: https://my.local.network/bamboo/
# folder domowy agenta Bamboo (na przykład, powinien być inny dla Linux/OSX/etc)
- local_var_bambooagent_install_root: "/somebigdrive/bambooagent"
# używany do obliczenia nazwy pliku JAR agenta Bamboo, który będzie przesyłany do zdalnego
- bambooagent_version: "6.8.1"
# to wskazuje lokalną kopię pliku .jar, która może być pobrana z serwera.
- local_copy_of_bamboo_agent_jar: "/some/folder/{{ bambooagent_jar_filename }}"
pre_tasks:
# Odczytuje możliwości, jeśli już istnieją, w przeciwnym razie zwraca pusty słownik
- name: Odczyt pliku możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: read_capability
post_tasks:
# Zapisuje możliwości z powrotem do pliku
- name: Aktualizuje możliwości agenta
include_role:
name: atlassian_bambooagent_role
tasks_from: write_capability
roles:
# Ta rola instaluje agenta Bamboo i nadpisuje zmienne
- name: instalacja agenta 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:
# Przykład deklarowania niestandardowych możliwości
- name: '[BAMBOO] domyślne możliwości'
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('.') }}"
# Przykład deklarowania możliwości budowy systemu (binarny python, już zainstalowany)
- block:
- name: '[BAMBOO] uruchamianie pythona'
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] rejestracja pythona'
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 }}'
Licencja
BSD
Informacje o autorze
Jakiekolwiek uwagi dotyczące Ansible, zgłoszenia PR lub błędów są mile widziane z odpowiedniego projektu na GitHubie.
Dziennik zmian
0.1
- pierwsza oficjalna wersja (naprawdę, ale wcześniejsze wydania nie miały dzienników zmian)
- Zmiana nazwy roli na
atlassian_bambooagent_role
, aby przestrzegać tych wytycznych - dodatkowe linting
- nowa opcja
bamboo_verify_certificates
, aby unikać sprawdzania certyfikatu serwera przy pobieraniu JAR z Bamboo. Jest to przydatne tylko w systemie OSX (zobacz tutaj), gdy serwer ma publiczny certyfikat. - W przypadku, gdy serwer używa własnego CA, ten CA jest już zainstalowany systemowo przez rolę.
- teraz zainstalowana usługa w Windows jest pobierana z zmiennej
bambooagent_service_name
(a nie domyślnie zbamboo-remote-agent
). Umożliwia to uruchomienie kilku agentów na tej samej maszynie z Windows. - naprawa błędu w systemie Windows podczas pobierania JAR z serwera Bamboo
- naprawa błędu przy zapisywaniu możliwości (Windows vs reszta świata)
Installs Atlassian Bamboo remote agent on a target machine
ansible-galaxy install raffienficiaud.ansible_atlassian_bambooagent_role