Compare commits

..

7 Commits

Author SHA1 Message Date
4709d4c0e7 update readme 2024-11-17 19:56:50 +03:00
220b967809 fix warngins2 2024-11-17 19:36:22 +03:00
d8759bfa8c add colors 2024-11-17 19:29:04 +03:00
65ade98e04 fix warnings 2024-11-17 19:26:44 +03:00
52192b4d24 update job run 2024-11-17 19:19:57 +03:00
55ffb7055c fix job run 2024-11-17 19:10:08 +03:00
2f21245787 test new run job 2024-11-17 19:02:14 +03:00
8 changed files with 76 additions and 30 deletions

View File

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

50
ansible/Jenkinsfile vendored
View File

@ -1,16 +1,27 @@
pipeline {
agent any
options {
ansiColor('xterm')
}
environment {
ANSIBLE_HOST_KEY_CHECKING = 'false'
VAULT_PASSWORD = credentials('vault_password')
}
parameters {
string(name: 'ADDITIONAL_CONTENT_SITEA_H2', defaultValue: 'Новое сообщение для SiteA', description: 'Additional <h2> content for SiteA')
string(name: 'ADDITIONAL_CONTENT_SITEA_P', defaultValue: 'Дополнительный параграф для SiteA', description: 'Additional <p> content for SiteA')
string(name: 'ADDITIONAL_CONTENT_SITEB_H2', defaultValue: 'Новое сообщение для SiteB', description: 'Additional <h2> content for SiteB')
string(name: 'ADDITIONAL_CONTENT_SITEB_P', defaultValue: 'Дополнительный параграф для SiteB', description: 'Additional <p> content for SiteB')
choice(
name: 'DEPLOY_TARGET',
choices: ['SiteA', 'SiteB', 'All'],
description: 'Выберите сайты для развертывания'
)
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 {
@ -38,19 +49,38 @@ pipeline {
stage('Deploy Site') {
steps {
script {
def selectedHosts
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
]
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(
playbook: 'ansible/playbook.yml',
inventory: "ansible/inventory.yml",
extraVars: extraVars,
limit: 'SiteA,SiteB,proxy'
limit: selectedHosts
)
}
}
@ -72,4 +102,4 @@ pipeline {
echo 'Deployment failed. Please check the logs for more details.'
}
}
}
}

View File

@ -1,4 +1,6 @@
[defaults]
inventory = inventory.yml
roles_path = ./roles
host_key_checking = False
host_key_checking = False
interpreter_python = /usr/bin/python3
force_color = true

View File

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

View File

@ -4,11 +4,14 @@ all:
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_user: ansible
ansible_python_interpreter: /usr/bin/python3.6

View File

@ -31,4 +31,4 @@
- name: Reload Nginx
systemd:
name: nginx
state: reloaded
state: reloaded

View File

@ -1,7 +1,10 @@
upstream backend {
{% for server in upstream_servers %}
server {{ server }} max_fails=1 fail_timeout=10s;
{% endfor %}
{% if siteA.site_ip %}
server {{ siteA.site_ip }} max_fails=1 fail_timeout=10s;
{% endif %}
{% if siteB.site_ip %}
server {{ siteB.site_ip }} max_fails=1 fail_timeout=10s;
{% endif %}
}
server {
@ -34,4 +37,4 @@ server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

View File

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