# Ansible Jenkins Deployment Pipeline ## Обзор Этот репозиторий содержит проект Ansible, интегрированный с Jenkins, для автоматизации развёртывания двух веб-сайтов (`SiteA` и `SiteB`) и прокси-сервера (`Proxy`). Настройка обеспечивает балансировку нагрузки, автоматические проверки состояния (health checks) и динамическое обновление контента без ручного вмешательства. ## Описание Структуры - **group_vars/**: Содержит файлы с переменными групп хостов. В данном случае `all.yml` содержит общие переменные для всех ролей и хостов. - **roles/**: Основная директория с ролями Ansible. - **firewall/**: Роль для настройки и конфигурирования файрвола (`firewalld`), открытия необходимых портов. - **tasks/**: Задачи для установки и настройки `firewalld`. - **vars/**: Переменные, используемые в роли `firewall`. - **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. - **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси. - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера. - **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента. - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов. - **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. - **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. - **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов. - **vars/**: Переменные, используемые в роли `ssl_certificate`. - **playbook.yml**: Основной Ansible playbook, который связывает все роли и определяет порядок их выполнения на соответствующих хостах. - **inventory.yml**: Файл инвентаризации, содержащий информацию о целевых хостах и группах (`SiteA`, `SiteB`, `proxy`). - **ansible.cfg**: Конфигурационный файл Ansible, определяющий пути к ролям и другие настройки. - **Jenkinsfile**: Скрипт для Jenkins Pipeline, который управляет процессом деплоя, включая расшифровку SSH ключей, передачу переменных и запуск Ansible playbook. ## Параметры и Их Назначение ### В `group_vars/all.yml` - **siteA**: - `site_title`: Заголовок страницы SiteA. - `site_h1`: Основной заголовок `

` на странице SiteA. - `site_h2`: Дополнительный заголовок `

` для SiteA. - `site_p`: Параграф `

` контента для SiteA. - `site_domain`: Доменное имя SiteA. - `site_ip`: IP-адрес сервера SiteA. - **siteB**: - `site_title`: Заголовок страницы SiteB. - `site_h1`: Основной заголовок `

` на странице SiteB. - `site_h2`: Дополнительный заголовок `

` для SiteB. - `site_p`: Параграф `

` контента для SiteB. - `site_domain`: Доменное имя SiteB. - `site_ip`: IP-адрес сервера SiteB. - **proxy**: - `proxy_domain`: Доменное имя прокси-сервера. - `proxy_ip`: IP-адрес прокси-сервера. - **ansible_python_interpreter**: Явное указание пути к Python-интерпретатору на всех хостах. ### В `Jenkinsfile` - **DEPLOY_TARGET**: Выбор цели развертывания (`SiteA`, `SiteB`, `All`). - **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `

` на SiteA. - **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `

` для SiteA. - **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `

` на SiteB. - **ADDITIONAL_CONTENT_SITEB_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-адреса и пользователя для каждого хоста: ```yaml 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