ansible | ||
.gitignore | ||
docker-compose.yml | ||
README.md |
Ansible Jenkins Deployment Pipeline
Обзор
Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (SiteA
и SiteB
) и прокси-сервера (Proxy
). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. Дополнительно внедрены обработчики для перезапуска служб при изменении конфигурации и централизованное управление основным конфигурационным файлом Nginx через group_vars
.
Описание Компонентов
-
group_vars/: Содержит файлы с переменными групп хостов. В
all.yml
определены общие переменные для всех ролей и хостов, включая параметры для Nginx и контент для сайтов. -
roles/: Основная директория с ролями Ansible.
-
firewall/:
- handlers/: Содержит обработчики для перезапуска
firewalld
. - tasks/: Задачи для установки и настройки
firewalld
, открытия необходимых портов. - vars/: Переменные, используемые в роли
firewall
.
- handlers/: Содержит обработчики для перезапуска
-
nginx_proxy/:
- handlers/: Содержит обработчики для перезапуска Nginx.
- tasks/: Задачи для установки Nginx, создания директорий, деплоя конфигураций и тестирования конфигурации.
- templates/: Шаблоны конфигурационных файлов Nginx для прокси-сервера и страниц ошибок.
-
nginx_site/:
- handlers/: Содержит обработчики для перезапуска Nginx.
- tasks/: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов, а также тестирования конфигурации.
- templates/: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов.
-
ssl_certificate/:
- handlers/: Содержит обработчики для перезапуска Nginx после генерации SSL сертификатов.
- tasks/: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
- templates/: Шаблоны или скрипты для генерации SSL сертификатов.
-
-
playbook.yml: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах.
-
inventory.yml: Файл инвентаризации, содержащий информацию о целевых хостах и группах (
SiteA
,SiteB
,proxy
). -
ansible.cfg: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки.
-
jenkinsfile: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook.
Параметры и Их Назначение
В group_vars/all.yml
# group_vars/all.yml
ansible_python_interpreter: /usr/bin/python3.6
# Общие переменные для Nginx
nginx_worker_processes: auto
nginx_error_log: /var/log/nginx/error.log
nginx_error_log_level: warn
nginx_worker_connections: 1024
nginx_access_log: /var/log/nginx/access.log
nginx_keepalive_timeout: 65
nginx_types_hash_max_size: 2048
# Переменные для сайтов SiteA и SiteB
siteA:
site_title: "SiteA - Добро пожаловать"
site_h1: "Добро пожаловать на SiteA"
site_h2: "Дефолтный заголовок H2 для SiteA"
site_p: "Дефолтный параграф для SiteA"
site_domain: "siteA.example.com"
site_ip: "192.168.0.61"
siteB:
site_title: "SiteB - Добро пожаловать"
site_h1: "Добро пожаловать на SiteB"
site_h2: "Дефолтный заголовок H2 для SiteB"
site_p: "Дефолтный параграф для SiteB"
site_domain: "siteB.example.com"
site_ip: "192.168.0.62"
proxy:
proxy_domain: "proxy.example.com"
proxy_ip: "192.168.0.63"
# SSL переменные
ssl_cert_path: "/etc/nginx/ssl"
ssl_cert_file: "proxy.crt"
ssl_key_file: "proxy.key"
ssl_subject: "/C=RU/ST=Some-State/L=Some-City/O=Your Company/CN={{ proxy.proxy_domain }}"
В Jenkinsfile
- DEPLOY_TARGET: Выбор цели развертывания (
SiteA
,SiteB
,All
). - ADDITIONAL_CONTENT_SITEA_H2: Дополнительный контент для заголовка
<h2>
на SiteA. - ADDITIONAL_CONTENT_SITEA_P: Дополнительный параграф
<p>
для SiteA. - ADDITIONAL_CONTENT_SITEB_H2: Дополнительный контент для заголовка
<h2>
на SiteB. - ADDITIONAL_CONTENT_SITEB_P: Дополнительный параграф
<p>
для SiteB.
В Ролях
-
firewall/vars/main.yml:
firewall_ports
: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS).
-
nginx_proxy/vars/main.yml:
ssl_cert_path
: Путь к директории, где будут храниться SSL сертификаты.ssl_cert_file
: Имя SSL сертификата.ssl_key_file
: Имя ключа SSL сертификата.ssl_subject
: Параметры для генерации самоподписанного SSL сертификата.
Как Использовать
Настройка Инвентаря
Отредактируйте inventory.yml
, указав правильные IP-адреса и пользователя для каждого хоста:
all:
children:
SiteA:
hosts:
192.168.0.61:
ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
SiteB:
hosts:
192.168.0.62:
ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
proxy:
hosts:
192.168.0.63:
ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
Настройка Переменных
Все переменные, используемые в проектах, определены в group_vars/all.yml
. При необходимости, вы можете переопределить их через Jenkins параметры или добавить дополнительные переменные.
Запуск Jenkins Pipeline
-
Дешифровка SSH ключей: Jenkins автоматически расшифровывает SSH ключи для доступа к серверам.
-
Выбор Цели Развертывания: Выберите, какой сайт (
SiteA
,SiteB
) или все (All
) нужно развернуть. -
Передача Дополнительных Переменных: Введите дополнительные параметры контента для выбранных сайтов.
-
Запуск Ansible Playbook: Jenkins запускает Ansible playbook с переданными параметрами, развертывая конфигурации и контент на целевых хостах.
Проверка и Отладка
Если при развертывании возникают ошибки:
-
Просмотрите Логи Jenkins: Получите подробную информацию об ошибках.
-
Подключитесь к Целевым Серверам: Проверьте статус служб и конфигурационных файлов.
systemctl status nginx systemctl status firewalld
-
Проверьте Конфигурацию Nginx: Убедитесь, что конфигурационные файлы корректны.
nginx -t
-
Просмотрите Логи Nginx:
sudo journalctl -xeu nginx.service sudo tail -n 100 /var/log/nginx/error.log
Пример Запуска Playbook Локально
Для локального тестирования или отладки вы можете запустить playbook вручную:
ansible-playbook playbook.yml
Дополнительные Возможности
-
Автоматическое Тестирование Конфигураций: Playbook включает задачи для тестирования конфигурации Nginx перед запуском службы, предотвращая запуск с ошибками.
-
Обработчики (Handlers): Автоматический перезапуск служб
nginx
иfirewalld
при изменении конфигурационных файлов. -
Централизованное Управление Конфигурацией: Основной конфигурационный файл Nginx управляется через шаблоны и переменные в
group_vars/all.yml
.
Рекомендации и Лучшие Практики
-
Безопасность:
- Используйте Ansible Vault для защиты чувствительных данных.
- Убедитесь, что SSH ключи и другие секреты не попадают в систему контроля версий.
-
Документация:
- Поддерживайте актуальную документацию, описывающую структуру проекта и инструкции по развертыванию.
-
Тестирование:
- Используйте инструменты вроде Molecule для тестирования Ansible ролей.
- Внедрите проверку конфигураций перед применением изменений.
-
Управление Конфигурациями:
- Централизуйте общие конфигурационные файлы для облегчения управления и уменьшения дублирования.
- Используйте обработчики для автоматического применения изменений.
-
Мониторинг и Логирование:
- Внедрите системы мониторинга для отслеживания состояния сервисов.
- Анализируйте логи для своевременного обнаружения и устранения проблем.
Заключение
Этот проект демонстрирует эффективное использование Ansible и Jenkins для автоматизации развёртывания веб-сайтов и прокси-сервера с учётом безопасности, надёжности и удобства управления. Следуя приведённым инструкциям и рекомендациям, вы сможете быстро адаптировать и расширять данное решение под свои нужды.
Если у вас возникнут дополнительные вопросы или потребуется помощь с настройкой, не стесняйтесь обращаться!
Примечания:
- Убедитесь, что все переменные правильно определены и соответствуют вашим требованиям.
- При необходимости, обновите пути и имена файлов в соответствии с вашей инфраструктурой.
- Для улучшения безопасности рассмотрите использование Ansible Vault для хранения чувствительных данных, таких как SSH ключи и пароли.