Compare commits

..

No commits in common. "4709d4c0e77fc2e97118af52836114de3081da22" and "74f04d975c7f3109691e192fe3b9d3569ebdc1e3" have entirely different histories.

8 changed files with 30 additions and 76 deletions

View File

@ -16,10 +16,12 @@
- **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния. - **nginx_proxy/**: Роль для установки и настройки Nginx как прокси-сервера с балансировкой нагрузки и проверкой состояния.
- **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси. - **tasks/**: Задачи для установки Nginx и деплоя конфигурации прокси.
- **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера. - **templates/**: Шаблоны конфигурационных файлов Nginx для прокси-сервера.
- **vars/**: Переменные, используемые в роли `nginx_proxy`.
- **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента. - **nginx_site/**: Роль для установки и настройки Nginx на целевых сайтах (`SiteA` и `SiteB`), а также деплоя HTML контента.
- **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов. - **tasks/**: Задачи для установки Nginx, создания корневых директорий сайтов, деплоя конфигураций и HTML файлов.
- **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов. - **templates/**: Шаблоны конфигурационных файлов Nginx и HTML страниц для сайтов.
- **vars/**: Переменные, используемые в роли `nginx_site`.
- **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера. - **ssl_certificate/**: Роль для генерации самоподписанных SSL сертификатов для прокси-сервера.
- **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов. - **tasks/**: Задачи для установки OpenSSL, создания директории для сертификатов и генерации самоподписанных сертификатов.
@ -57,11 +59,8 @@
- `proxy_domain`: Доменное имя прокси-сервера. - `proxy_domain`: Доменное имя прокси-сервера.
- `proxy_ip`: IP-адрес прокси-сервера. - `proxy_ip`: IP-адрес прокси-сервера.
- **ansible_python_interpreter**: Явное указание пути к Python-интерпретатору на всех хостах.
### В `Jenkinsfile` ### В `Jenkinsfile`
- **DEPLOY_TARGET**: Выбор цели развертывания (`SiteA`, `SiteB`, `All`).
- **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `<h2>` на SiteA. - **ADDITIONAL_CONTENT_SITEA_H2**: Дополнительный контент для заголовка `<h2>` на SiteA.
- **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `<p>` для SiteA. - **ADDITIONAL_CONTENT_SITEA_P**: Дополнительный параграф `<p>` для SiteA.
- **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `<h2>` на SiteB. - **ADDITIONAL_CONTENT_SITEB_H2**: Дополнительный контент для заголовка `<h2>` на SiteB.
@ -73,6 +72,9 @@
- `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS). - `firewall_ports`: Список портов и протоколов, которые необходимо открыть в файрволе (например, SSH, HTTP, HTTPS).
- **nginx_proxy/vars/main.yml**: - **nginx_proxy/vars/main.yml**:
- `upstream_servers`: Список IP-адресов бэкенд-серверов (`SiteA` и `SiteB`) для балансировки нагрузки.
- **ssl_certificate/vars/main.yml**:
- `ssl_cert_path`: Путь к директории, где будут храниться SSL сертификаты. - `ssl_cert_path`: Путь к директории, где будут храниться SSL сертификаты.
- `ssl_cert_file`: Имя SSL сертификата. - `ssl_cert_file`: Имя SSL сертификата.
- `ssl_key_file`: Имя ключа SSL сертификата. - `ssl_key_file`: Имя ключа SSL сертификата.
@ -91,14 +93,11 @@ all:
hosts: hosts:
192.168.0.61: 192.168.0.61:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
SiteB: SiteB:
hosts: hosts:
192.168.0.62: 192.168.0.62:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
proxy: proxy:
hosts: hosts:
192.168.0.63: 192.168.0.63:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6

48
ansible/Jenkinsfile vendored
View File

@ -1,27 +1,16 @@
pipeline { pipeline {
agent any agent any
options {
ansiColor('xterm')
}
environment { environment {
ANSIBLE_HOST_KEY_CHECKING = 'false' ANSIBLE_HOST_KEY_CHECKING = 'false'
VAULT_PASSWORD = credentials('vault_password') VAULT_PASSWORD = credentials('vault_password')
} }
parameters { parameters {
choice( string(name: 'ADDITIONAL_CONTENT_SITEA_H2', defaultValue: 'Новое сообщение для SiteA', description: 'Additional <h2> content for SiteA')
name: 'DEPLOY_TARGET', string(name: 'ADDITIONAL_CONTENT_SITEA_P', defaultValue: 'Дополнительный параграф для SiteA', description: 'Additional <p> content for SiteA')
choices: ['SiteA', 'SiteB', 'All'], string(name: 'ADDITIONAL_CONTENT_SITEB_H2', defaultValue: 'Новое сообщение для SiteB', description: 'Additional <h2> content for SiteB')
description: 'Выберите сайты для развертывания' string(name: 'ADDITIONAL_CONTENT_SITEB_P', defaultValue: 'Дополнительный параграф для SiteB', description: 'Additional <p> content for SiteB')
)
string(name: 'ADDITIONAL_CONTENT_SITEA_H2', defaultValue: 'Новое сообщение для SiteA', description: 'Дополнительный <h2> контент для SiteA')
string(name: 'ADDITIONAL_CONTENT_SITEA_P', defaultValue: 'Дополнительный параграф для SiteA', description: 'Дополнительный <p> контент для SiteA')
string(name: 'ADDITIONAL_CONTENT_SITEB_H2', defaultValue: 'Новое сообщение для SiteB', description: 'Дополнительный <h2> контент для SiteB')
string(name: 'ADDITIONAL_CONTENT_SITEB_P', defaultValue: 'Дополнительный параграф для SiteB', description: 'Дополнительный <p> контент для SiteB')
} }
stages { stages {
@ -49,38 +38,19 @@ pipeline {
stage('Deploy Site') { stage('Deploy Site') {
steps { steps {
script { script {
def selectedHosts
def extraVars = [ def extraVars = [
siteA_h2: params.ADDITIONAL_CONTENT_SITEA_H2,
siteA_p: params.ADDITIONAL_CONTENT_SITEA_P,
siteB_h2: params.ADDITIONAL_CONTENT_SITEB_H2,
siteB_p: params.ADDITIONAL_CONTENT_SITEB_P,
ansible_ssh_private_key_file: env.DECYPTED_KEY_FILE ansible_ssh_private_key_file: env.DECYPTED_KEY_FILE
] ]
switch(params.DEPLOY_TARGET) {
case 'SiteA':
selectedHosts = 'SiteA,proxy'
extraVars.siteA_h2 = params.ADDITIONAL_CONTENT_SITEA_H2
extraVars.siteA_p = params.ADDITIONAL_CONTENT_SITEA_P
break
case 'SiteB':
selectedHosts = 'SiteB,proxy'
extraVars.siteB_h2 = params.ADDITIONAL_CONTENT_SITEB_H2
extraVars.siteB_p = params.ADDITIONAL_CONTENT_SITEB_P
break
case 'All':
selectedHosts = 'SiteA,SiteB,proxy'
extraVars.siteA_h2 = params.ADDITIONAL_CONTENT_SITEA_H2
extraVars.siteA_p = params.ADDITIONAL_CONTENT_SITEA_P
extraVars.siteB_h2 = params.ADDITIONAL_CONTENT_SITEB_H2
extraVars.siteB_p = params.ADDITIONAL_CONTENT_SITEB_P
break
default:
error "Неизвестный DEPLOY_TARGET: ${params.DEPLOY_TARGET}"
}
ansiblePlaybook( ansiblePlaybook(
playbook: 'ansible/playbook.yml', playbook: 'ansible/playbook.yml',
inventory: "ansible/inventory.yml", inventory: "ansible/inventory.yml",
extraVars: extraVars, extraVars: extraVars,
limit: selectedHosts limit: 'SiteA,SiteB,proxy'
) )
} }
} }

View File

@ -2,5 +2,3 @@
inventory = inventory.yml inventory = inventory.yml
roles_path = ./roles roles_path = ./roles
host_key_checking = False host_key_checking = False
interpreter_python = /usr/bin/python3
force_color = true

View File

@ -1,10 +1,3 @@
ansible_python_interpreter: /usr/bin/python3.6
siteA_h2: "Дефолтный заголовок H2 для SiteA"
siteA_p: "Дефолтный параграф для SiteA"
siteB_h2: "Дефолтный заголовок H2 для SiteB"
siteB_p: "Дефолтный параграф для SiteB"
siteA: siteA:
site_title: "SiteA - Добро пожаловать" site_title: "SiteA - Добро пожаловать"
site_h1: "Добро пожаловать на SiteA" site_h1: "Добро пожаловать на SiteA"

View File

@ -4,14 +4,11 @@ all:
hosts: hosts:
192.168.0.61: 192.168.0.61:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
SiteB: SiteB:
hosts: hosts:
192.168.0.62: 192.168.0.62:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6
proxy: proxy:
hosts: hosts:
192.168.0.63: 192.168.0.63:
ansible_user: ansible ansible_user: ansible
ansible_python_interpreter: /usr/bin/python3.6

View File

@ -1,10 +1,7 @@
upstream backend { upstream backend {
{% if siteA.site_ip %} {% for server in upstream_servers %}
server {{ siteA.site_ip }} max_fails=1 fail_timeout=10s; server {{ server }} max_fails=1 fail_timeout=10s;
{% endif %} {% endfor %}
{% if siteB.site_ip %}
server {{ siteB.site_ip }} max_fails=1 fail_timeout=10s;
{% endif %}
} }
server { server {

View File

@ -16,7 +16,7 @@
owner: nginx owner: nginx
group: nginx group: nginx
mode: '0755' mode: '0755'
when: "'SiteA' in group_names" when: inventory_hostname in groups['SiteA']
- name: Create web root for SiteB - name: Create web root for SiteB
file: file:
@ -25,19 +25,19 @@
owner: nginx owner: nginx
group: nginx group: nginx
mode: '0755' mode: '0755'
when: "'SiteB' in group_names" when: inventory_hostname in groups['SiteB']
- name: Deploy SiteA Configuration - name: Deploy SiteA Configuration
template: template:
src: siteA.conf.j2 src: siteA.conf.j2
dest: /etc/nginx/conf.d/siteA.conf dest: /etc/nginx/conf.d/siteA.conf
when: "'SiteA' in group_names" when: inventory_hostname in groups['SiteA']
- name: Deploy SiteB Configuration - name: Deploy SiteB Configuration
template: template:
src: siteB.conf.j2 src: siteB.conf.j2
dest: /etc/nginx/conf.d/siteB.conf dest: /etc/nginx/conf.d/siteB.conf
when: "'SiteB' in group_names" when: inventory_hostname in groups['SiteB']
- name: Deploy SiteA HTML - name: Deploy SiteA HTML
template: template:
@ -48,7 +48,7 @@
site_h1: "{{ siteA.site_h1 }}" site_h1: "{{ siteA.site_h1 }}"
site_h2: "{{ siteA.site_h2 }}" site_h2: "{{ siteA.site_h2 }}"
site_p: "{{ siteA.site_p }}" site_p: "{{ siteA.site_p }}"
when: "'SiteA' in group_names" when: inventory_hostname in groups['SiteA']
- name: Deploy SiteB HTML - name: Deploy SiteB HTML
template: template:
@ -59,7 +59,7 @@
site_h1: "{{ siteB.site_h1 }}" site_h1: "{{ siteB.site_h1 }}"
site_h2: "{{ siteB.site_h2 }}" site_h2: "{{ siteB.site_h2 }}"
site_p: "{{ siteB.site_p }}" site_p: "{{ siteB.site_p }}"
when: "'SiteB' in group_names" when: inventory_hostname in groups['SiteB']
- name: Reload Nginx - name: Reload Nginx
systemd: systemd: