Есть ли способ получить Ansible ] запустить сценарий сборки локально на управляющем узле, а затем развернуть полученный артефакт на различных управляемых узлах?
Сообщите мне, если я что-то пропустил, но я просмотрел документацию по оболочке
, , команда
и скрипт
модули, и каждый из них, кажется, разрешает выполнение только на управляемом узле. Я действительно удивлен, что не могу найти способ запустить команду на управляющем узле.
Может быть, это не в рулевой рубке Ansible?
Это идея, что вы должны использовать какой-то другой инструмент, например Make
, для сборки, а Ansible только копирует его на серверы?
Для Ansible, чтобы запустить что-то на другом наборе хостов, попробуйте начать новую игру.
- name: Build thing
# localhost is the node running Ansible
# By default, this already is connection local
# exec instead of ssh
hosts: localhost
tasks:
# Assuming make based build scripts
# make module reports not changed if nothing to do
- make:
chdir: /home/builduser/source/thing/
- name: Install thing
hosts: various
tasks:
- copy:
# copy is an action plugin that handles the copy from localhost to remote for yoy
src: /home/builduser/source/thing/output/thing.rpm
dest: /tmp/thing.rpm
# TODO Use custom repo for content management rather than copying one-off packages
- package:
name: /tmp/thing.rpm
Хотя вы можете использовать Ansible в CI/CD конвейерах и т.д., и он может запускать все, что вам нравится, Ansible не является замечательной системой сборки. Она не ориентирована на артефакты.
Вы можете создать простую задачу для вызова команды make
на localhost
следующим образом:
- name: make an executable
command: make
tags: compile
delegate_to: localhost
connection: local
run_once: True
become: no
Это запустит команду make и выполнит все, что есть в вашем Makefile. Затем в следующей задаче вы можете создать задачу копирования, чтобы скопировать результат на управляемые узлы.