Вопрос или проблема
Пытаюсь разобраться, как запустить сборку Jenkins на нескольких серверах с подключением по ssh-ключу.
В настоящее время я использовал плагин SSH Remote Host, но этот плагин хорош для 1,2,3,4.. серверов, а не для 100+.
Я погуглил и нашел, что многие люди предлагают решение использовать Ansible, но у меня нет опыта работы с Ansible, поэтому, если у кого-то есть примеры этого процесса для запуска сборки на нескольких серверах с Ansible или любым другим способом, я буду рад услышать.
Я запускаю Jenkins-Master на Windows и Jenkins-Slave на Linux (Ubuntu).
Спасибо.
Это довольно упрощенный пример, но для произвольной задачи, я думаю, он разбивается на следующие шаги:
-
Установите Ansible на jenkins-agent.
pip install ansible
илиapt install ansible
-
Загрузите ваш ssh-ключ в хранилище учетных данных Jenkins. Я предполагаю, что вы используете плагин хранилища учетных данных (но вы также можете загрузить его в ssh-agent или использовать какой-то другой метод для предоставления ключа на jenkins-agents).
i) Управление Jenkins -> Управление учетными данными
ii) добавить учетные данные -> “SSH имя пользователя с приватным ключом”
iii) вставить ключ и дать ему имя, например “SSH_KEY_ANSIBLE”
- Создайте новую произвольную задачу Jenkins и добавьте учетные данные (SSH_KEY_ANSIBLE)
i) Перейдите в раздел окружения сборки конфигурации задачи
ii) отметьте “Использовать секретный текст(ы) или файл(ы)”
iii) добавьте пункт связывания “SSH пользовательский приватный ключ” к SSH_KEY_ANSIBLE
iv) установите переменную Имя пользователя в SSH_USER
, установите файл ключа в SSH_KEY
- добавьте ваш список хостов в ваш инвентарный файл Ansible на jenkins-agent:
/etc/ansible/hosts
[jenkins_job_hosts] myhost1 myhost2 ... myhost101
- Создайте плейбук на jenkins agent, например
/home/jenkins/ansible/my_first_playbook.yml
:
--- - hosts: jenkins_job_hosts tasks: - command: date - debug: msg: добавьте другие задачи ansible здесь....
- Перейдите в раздел сборки в задаче Jenkins.
i) добавьте шаг сборки “Выполнить оболочку”.
ii) используйте следующее для запуска ansible против всех ваших хостов
ansible-playbook --private-key ${SSH_KEY} \
-u ${SSH_USER} \
-i /etc/ansible/hosts \
/home/jenkins/ansible/my_first_playbook.yml
Дополнительные шаги
-
Вы можете поместить ваш инвентарный файл и плейбук в git и проверить их в задаче
-
Также вы можете посмотреть на задания конвейера в синтаксисе groovy в Jenkinsfile, что упрощает управление задачей.
Ответ или решение
Как запустить сборку Jenkins на нескольких серверах с использованием SSH-ключа
Jenkins предлагает множество возможностей для автоматизации сборок на нескольких серверах. В данной статье мы рассмотрим, как использовать Ansible для запуска сборок на 100 и более серверах, используя ваш SSH-ключ для подключения. Это решение особенно полезно для случаев, когда использование плагина SSH Remote Host становится нецелесообразным.
Шаги по настройке Jenkins для многосерверной сборки
-
Установка Ansible на Jenkins-агенте
Первым делом необходимо установить Ansible на вашем Jenkins-агенте (который работает на Linux, например Ubuntu). Вы можете сделать это с помощью следующих команд:
sudo apt update sudo apt install ansible
Или, если у вас установлен Python и pip:
pip install ansible
-
Добавление SSH-ключа в хранилище учетных данных Jenkins
Для безопасного хранения вашего SSH-ключа, выполните следующие шаги:
- Перейдите в раздел Управление Jenkins → Управление учетными данными.
- Нажмите Добавить учетные данные и выберите тип SSH username with private key.
- Вставьте ваш SSH-ключ и дайте ему имя, например,
SSH_KEY_ANSIBLE
.
-
Создание новой задачи в Jenkins
- Создайте новую задачу типа "Freestyle project".
- В разделе Build Environment отметьте пункт Use secret text(s) or file(s).
- Добавьте элемент привязки SSH User Private Key и укажите
SSH_KEY_ANSIBLE
. - Установите переменные:
Username variable
—SSH_USER
,Key file variable
—SSH_KEY
.
-
Конфигурация инвентарного файла Ansible
Для запуска Ansible вам нужно указать, на каких серверах будут выполняться задания. Создайте файл инвентаризации
/etc/ansible/hosts
, в котором перечислите ваши хосты:[jenkins_job_hosts] myhost1 myhost2 ... myhost101
-
Создание плейбука Ansible
Создайте файл плейбука в директории Jenkins-агента, например,
/home/jenkins/ansible/my_first_playbook.yml
:--- - hosts: jenkins_job_hosts tasks: - command: date - debug: msg: "Добавьте свои задачи Ansible здесь..."
-
Настройка выполнения Ansible в Jenkins
Перейдите в секцию сборки вашей задачи в Jenkins:
- Добавьте шаг сборки Execute shell.
- Используйте следующую команду для запуска плейбука Ansible:
ansible-playbook --private-key ${SSH_KEY} \ -u ${SSH_USER} \ -i /etc/ansible/hosts \ /home/jenkins/ansible/my_first_playbook.yml
Дополнительные шаги
- Рассмотрите возможность хранения вашего инвентарного файла и плейбука в системе контроля версий, такой как Git, и извлекать их в процессе выполнения сборки Jenkins.
- Если вы хотите более гибко управлять задачами, вы можете изучить возможности использования Jenkins Pipeline и Groovy в файлах
Jenkinsfile
.
Заключение
Использование Ansible для запуска сборок на нескольких серверах через Jenkins позволяет существенно упростить процесс управления конфигурацией и развертыванием на большом количестве хостов. Следуя приведённым шагам, вы сможете настроить эффективную автоматизацию процессов CI/CD в вашей инфраструктуре.