Когда говорим о высокой доступности (HA), мы имеем в виду системы, которые могут работать непрерывно без сбоев в течение длительного времени. Jenkins — один из ключевых компонентов DevOps, а потому критически важно, чтобы он оставался высокодоступным. В статье разберём два способа настройки Jenkins в режиме высокой доступности с использованием IaC в IBM Cloud: настройка Jenkins в режиме высокой доступности в IBM Cloud с помощью сценариев Terraform и Ansible; использование шаблонов схем (schematics templates) на IBM Cloud в рамках template-based подхода. Примечание: вы также можете адаптировать эти способы к другим облачным платформам. аккаунт IBM Cloud; Docker; Jenkins; репозиторий GitHub;  базовые знания NGINX или HAProxy; базовые знания Terraform и Ansible; базовые знания CI/CD. Выполнение инструкций займёт около 30 минут. Общая схема архитектуры Jenkins с использованием IBM Cloud: Пользователь отправляет трафик балансировщику нагрузки (NGINX или HAProxy). Балансировщик нагрузки отправляет трафик контроллеру Jenkins. Если контроллер не работает, трафик перенаправляется на резервный сервер Jenkins. «CI/CD с Jenkins» Для обеспечения высокой доступности любого приложения важно внутреннее хранилище, поэтому перейдём к подготовке внутреннего хранилища Jenkins: В меню навигации IBM Cloud выберите «Classic Infrastructure» > «File Storage».  Нажмите «Order File Storage». Введите необходимые данные и подготовьте файловое хранилище. Вам нужно выбрать облачную часть хранилища файлов, размер хранилища файлов и способ оплаты — ежемесячно или ежечасно (мы выбрали общий тип хранения на длительный срок). После вы сможете посмотреть файловые хранилища, доступные в системе: Вы можете это, используя любой из следующих способов: IBM Cloud CLI; IBM SoftLayer Portal; Terraform.  В рамках этой статьи мы используем скрипты Terraform для подготовки трёх серверов: одного — для балансировки нагрузки, и двух — для Jenkins. The main.tf script: The variables.tf script: The provider.tf script: The versions.tf script: Для запуска и настройки HAPproxy на каждом из серверов используйте роль Ansible. Основной модуль — playbook_haproxy.yml. Плейбук Ansible для настройки сервера балансировки нагрузки: Более подробную информацию о HAProxy вы найдёте в репозитории configJenkins GitHub repo. Ниже показан файл конфигурации для HAProxy. HAProxy принимает трафик через порт 80 и перенаправляет его на порт 8080 на сервере Jenkins. Основной модуль — playbook_jenkins.yml. Он использует Docker Compose для запуска Jenkins. Jenkins работает на двух серверах. Вам необходимо синхронизировать логи на обеих нодах. Для этого используйте shell script на обеих нодах, а также используйте cron для назначения джобы каждую минуту. Cron добавится как часть playbook_jenkins.yml: Скрипт будет вызывать Jenkins reload API для перезагрузки конфигурации Jenkins каждую минуту. 1. Загрузите main.tf, provider.tf, variable.tf и version.tf в свой репозиторий GitHub. 2. В консоли IBM Cloud нажмите > «Schematics» > «Create a Schematics Workspace». 3. Введите уникальное имя рабочего пространства и нажмите «Create». 3. Введите URL-адрес репозитория GitHub и нажмите «Save template information». 4. Настройте переменные для проверки подлинности ключей API и учётных данных пользователя и сохраните изменения. Это те же самые переменные, которые были объявлены в файлах variable.tf и provider.tf.  5. Нажмите «Enable continuous delivery», чтобы создать цепочку инструментов DevOps. 6. Введите данные для цепочки инструментов: Toolchain name: имя создаваемой цепочки инструментов. Region: область, где должна быть создана цепочка инструментов. Resource group: выберите группу ресурсов. Repository type: Новый. IBM Cloud API key: IAM key for IBM Cloud. 7. В меню навигации IBM Cloud нажмите «Schematics» > «Workspaces». Выберите местоположение из раскрывающегося списка: 8. Нажмите «Generate plan»: 9. Нажмите «View log»: 10. Если в журнале нет ошибок, нажмите «Apply plan». 11. В меню навигации выберите «DevOps», чтобы просмотреть цепочку инструментов: Ansible — один из самых простых инструментов управления конфигурацией, который не требует установки агента. 1. Загрузите плейбук Ansible на GitHub: Вы создаёте два действия: одно для Jenkins (hajenkins), а другое для nginx (loadbalancer). 2. В меню навигации консоли IBM Cloud нажмите «Schematics». 3. В поле Управление конфигурацией выберите «Create action». 4. Заполните форму, чтобы создать действие. 5. Введите URL-адрес GitHub и нажмите «Retrieve playbooks»: 6. Нажмите на раскрывающийся список «Playbook», чтобы выбрать плэйбук. 7. Нажмите «Verbosity», чтобы выбрать уровень логирования. 8. В поле «Key» введите дополнительные переменные и нажмите «Save»: 9. Нажмите «Create Inventory», чтобы создать файл инвентаризации, в котором будут хосты в IBM Cloud Classic Infrastructure. Вы также можете ввести IP-адрес хоста-бастиона и закрытый ключ, который плэйбук использует для входа на хосты. 10. Нажмите «Run Action» для выполнения плейбука: 11. Просмотрите журнал Ansible: Повторите шаги, чтобы создать действие для Jenkins. Из этой статьи вы узнали, как настроить Jenkins в режиме высокой доступности в IBM Cloud. Описанный метод считается cloud-agonistic — его можно использовать с другими облачными провайдерами с учётом различий платформ. При этом применяется IaC, поэтому конфигурацию можно поддерживать на GitHub или в репозитории на основе Git. «DevOps Tools для разработчиков»  Редактор в MobileUp