Как запустить сборку Jenkins на нескольких серверах с помощью SSH-ключа

Вопрос или проблема

Пытаюсь разобраться, как запустить сборку Jenkins на нескольких серверах с подключением по ssh-ключу.

В настоящее время я использовал плагин SSH Remote Host, но этот плагин хорош для 1,2,3,4.. серверов, а не для 100+.

Я погуглил и нашел, что многие люди предлагают решение использовать Ansible, но у меня нет опыта работы с Ansible, поэтому, если у кого-то есть примеры этого процесса для запуска сборки на нескольких серверах с Ansible или любым другим способом, я буду рад услышать.

Я запускаю Jenkins-Master на Windows и Jenkins-Slave на Linux (Ubuntu).

Спасибо.

Это довольно упрощенный пример, но для произвольной задачи, я думаю, он разбивается на следующие шаги:

  1. Установите Ansible на jenkins-agent. pip install ansible или apt install ansible

  2. Загрузите ваш ssh-ключ в хранилище учетных данных Jenkins. Я предполагаю, что вы используете плагин хранилища учетных данных (но вы также можете загрузить его в ssh-agent или использовать какой-то другой метод для предоставления ключа на jenkins-agents).

i) Управление Jenkins -> Управление учетными данными
ii) добавить учетные данные -> “SSH имя пользователя с приватным ключом”
iii) вставить ключ и дать ему имя, например “SSH_KEY_ANSIBLE”

  1. Создайте новую произвольную задачу Jenkins и добавьте учетные данные (SSH_KEY_ANSIBLE)

i) Перейдите в раздел окружения сборки конфигурации задачи
ii) отметьте “Использовать секретный текст(ы) или файл(ы)”
iii) добавьте пункт связывания “SSH пользовательский приватный ключ” к SSH_KEY_ANSIBLE
iv) установите переменную Имя пользователя в SSH_USER, установите файл ключа в SSH_KEY

  1. добавьте ваш список хостов в ваш инвентарный файл Ansible на jenkins-agent:
    /etc/ansible/hosts
 [jenkins_job_hosts]  
 myhost1  
 myhost2  
 ...  
 myhost101
  1. Создайте плейбук на jenkins agent, например /home/jenkins/ansible/my_first_playbook.yml:
---
- hosts: jenkins_job_hosts
  tasks:
    - command: date

    - debug:
        msg: добавьте другие задачи ansible здесь....
  1. Перейдите в раздел сборки в задаче Jenkins.

i) добавьте шаг сборки “Выполнить оболочку”.
ii) используйте следующее для запуска ansible против всех ваших хостов

ansible-playbook --private-key ${SSH_KEY} \
          -u ${SSH_USER} \
          -i /etc/ansible/hosts \
           /home/jenkins/ansible/my_first_playbook.yml

Дополнительные шаги

  1. Вы можете поместить ваш инвентарный файл и плейбук в git и проверить их в задаче

  2. Также вы можете посмотреть на задания конвейера в синтаксисе groovy в Jenkinsfile, что упрощает управление задачей.

Ответ или решение

Как запустить сборку Jenkins на нескольких серверах с использованием SSH-ключа

Jenkins предлагает множество возможностей для автоматизации сборок на нескольких серверах. В данной статье мы рассмотрим, как использовать Ansible для запуска сборок на 100 и более серверах, используя ваш SSH-ключ для подключения. Это решение особенно полезно для случаев, когда использование плагина SSH Remote Host становится нецелесообразным.

Шаги по настройке Jenkins для многосерверной сборки

  1. Установка Ansible на Jenkins-агенте

    Первым делом необходимо установить Ansible на вашем Jenkins-агенте (который работает на Linux, например Ubuntu). Вы можете сделать это с помощью следующих команд:

    sudo apt update
    sudo apt install ansible

    Или, если у вас установлен Python и pip:

    pip install ansible
  2. Добавление SSH-ключа в хранилище учетных данных Jenkins

    Для безопасного хранения вашего SSH-ключа, выполните следующие шаги:

    • Перейдите в раздел Управление JenkinsУправление учетными данными.
    • Нажмите Добавить учетные данные и выберите тип SSH username with private key.
    • Вставьте ваш SSH-ключ и дайте ему имя, например, SSH_KEY_ANSIBLE.
  3. Создание новой задачи в Jenkins

    • Создайте новую задачу типа "Freestyle project".
    • В разделе Build Environment отметьте пункт Use secret text(s) or file(s).
    • Добавьте элемент привязки SSH User Private Key и укажите SSH_KEY_ANSIBLE.
    • Установите переменные: Username variableSSH_USER, Key file variableSSH_KEY.
  4. Конфигурация инвентарного файла Ansible

    Для запуска Ansible вам нужно указать, на каких серверах будут выполняться задания. Создайте файл инвентаризации /etc/ansible/hosts, в котором перечислите ваши хосты:

    [jenkins_job_hosts]
    myhost1
    myhost2
    ...
    myhost101
  5. Создание плейбука Ansible

    Создайте файл плейбука в директории Jenkins-агента, например, /home/jenkins/ansible/my_first_playbook.yml:

    ---
    - hosts: jenkins_job_hosts
     tasks:
       - command: date
       - debug:
           msg: "Добавьте свои задачи Ansible здесь..."
  6. Настройка выполнения 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 в вашей инфраструктуре.

Оцените материал
Добавить комментарий

Капча загружается...