Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Порівняння попередніх версій Попередня ревізія
devops:jenkins [14/11/2025 22:59] – створено osvexdevops:jenkins [14/11/2025 23:00] (поточний) osvex
Рядок 1: Рядок 1:
-`====== Автоматизація деплою стеку моніторингу за допомогою Jenkins + Ansible + Git ======`+====== Автоматизація деплою стеку моніторингу за допомогою Jenkins + Ansible + Git ======
  
 Ця стаття — шпаргалка з налаштування безпечного CI/CD пайплайну "Push-to-Deploy". Ця стаття — шпаргалка з налаштування безпечного CI/CD пайплайну "Push-to-Deploy".
  
-**Мета:** Автоматично оновлювати та перезапускати Docker Compose стек моніторингу на сервері щоразу, коли відбувається `git pushу `mainгілку.+**Мета:** Автоматично оновлювати та перезапускати Docker Compose стек моніторингу на сервері щоразу, коли відбувається git push у main гілку.
  
 ----- -----
  
-`===== Архітектура рішення =====`+===== Архітектура рішення =====
  
 Ми використовуємо модель із **поділом обов'язків** для максимальної безпеки та гнучкості: Ми використовуємо модель із **поділом обов'язків** для максимальної безпеки та гнучкості:
Рядок 13: Рядок 13:
 * **Git (GitHub):** Єдине "джерело правди" для всіх конфігурацій. * **Git (GitHub):** Єдине "джерело правди" для всіх конфігурацій.
  
-* **Ansible (на хост-сервері):** "Виконавець" (CD). Він встановлений на самому сервері `sim-servі єдиний, хто має доступ до Docker та файлів проєкту. Він виконує інструкції (плейбуки).+* **Ansible (на хост-сервері):** "Виконавець" (CD). Він встановлений на самому сервері sim-serv і єдиний, хто має доступ до Docker та файлів проєкту. Він виконує інструкції (плейбуки).
  
-* **Jenkins (в Docker):** "Оркестратор" (CI). Він ізольований у своєму контейнері **без** доступу до `docker.sockі **без** `rootправ. Його єдина задача — "слухати" GitHub і, у разі змін, "дзвонити" по SSH на хост-сервер, наказуючи Ansible виконати плейбук.+* **Jenkins (в Docker):** "Оркестратор" (CI). Він ізольований у своєму контейнері **без** доступу до docker.sock і **без** root прав. Його єдина задача — "слухати" GitHub і, у разі змін, "дзвонити" по SSH на хост-сервер, наказуючи Ansible виконати плейбук.
  
 ----- -----
  
-`===== Крок 1: Налаштування Ansible (Виконавець) на хост-сервері =====`+===== Крок 1: Налаштування Ansible (Виконавець) на хост-сервері =====
  
-Все це виконується на сервері `sim-serv(наприклад, з-під користувача `osvex`).+Все це виконується на сервері sim-serv (наприклад, з-під користувача osvex).
  
-`==== Встановлення Ansible та Docker-бібліотек ====`+==== Встановлення Ansible та Docker-бібліотек ====
  
 \<code bash\> \<code bash\>
Рядок 43: Рядок 43:
 \</code\> \</code\>
  
-`==== Створення робочої папки та файлів Ansible ====`+==== Створення робочої папки та файлів Ansible ====
  
-Ми зберігаємо всі конфігурації Ansible у `/home/osvex/ansible/`.+Ми зберігаємо всі конфігурації Ansible у /home/osvex/ansible/.
  
-**1. Файл `inventory(де виконувати):**+**1. Файл inventory (де виконувати):**
  
-Це наш список серверів. Оскільки Ansible керує сам собою, ми використовуємо `localhost`.+Це наш список серверів. Оскільки Ansible керує сам собою, ми використовуємо localhost.
  
 \<code ini\> \<code ini\>
Рядок 61: Рядок 61:
 \</code\> \</code\>
  
-**2. Файл `deploy_monitoring.yml(що робити):**+**2. Файл deploy_monitoring.yml (що робити):**
  
 Це "плейбук", або інструкція для Ansible. Він оновлює Git-репозиторій та перезапускає Docker Compose. Це "плейбук", або інструкція для Ansible. Він оновлює Git-репозиторій та перезапускає Docker Compose.
Рядок 107: Рядок 107:
 ----- -----
  
-`===== Крок 2: Налаштування Jenkins (Оркестратор) в Docker =====`+===== Крок 2: Налаштування Jenkins (Оркестратор) в Docker =====
  
 Jenkins запускається у власному ізольованому Docker-контейнері. Jenkins запускається у власному ізольованому Docker-контейнері.
  
-==== `docker-compose.ymlдля Jenkins ==== `+==== docker-compose.yml для Jenkins ====
  
-Це **безпечна** конфігурація. Ми **НЕ** використовуємо `user: rootі **НЕ** прокидаємо `docker.sock`. Єдиний зв'язок зі світом — це "домашня" папка Jenkins.+Це **безпечна** конфігурація. Ми **НЕ** використовуємо user: root і **НЕ** прокидаємо docker.sock. Єдиний зв'язок зі світом — це "домашня" папка Jenkins.
  
 \<code yaml\> \<code yaml\>
Рядок 131: Рядок 131:
 restart: unless-stopped restart: unless-stopped
  
-``` +\\
 # Секція 'user: root' видалена для безпеки # Секція 'user: root' видалена для безпеки
  
Рядок 145: Рядок 144:
 - "traefik.enable=true" - "traefik.enable=true"
  
-- "traefik.http.routers.jenkins.rule=Host(`jenkins.osvex.com`)"+- "traefik.http.routers.jenkins.rule=Host(jenkins.osvex.com)"
  
 - "traefik.http.routers.jenkins.entrypoints=websecure" - "traefik.http.routers.jenkins.entrypoints=websecure"
Рядок 169: Рядок 168:
 - shared_traefik - shared_traefik
  
-``` +\\
 networks: networks:
  
Рядок 179: Рядок 177:
 \</code\> \</code\>
  
-`==== Встановлення прав на папку Jenkins ====`+==== Встановлення прав на папку Jenkins ====
  
-Оскільки Jenkins тепер працює від імені користувача `jenkins(UID 1000), ми повинні надати йому права на "домашню" папку:+Оскільки Jenkins тепер працює від імені користувача jenkins (UID 1000), ми повинні надати йому права на "домашню" папку:
  
 \<code bash\> \<code bash\>
Рядок 189: Рядок 187:
 \</code\> \</code\>
  
-`==== Необхідні плагіни Jenkins ====`+==== Необхідні плагіни Jenkins ====
  
 У Jenkins (через **Manage Jenkins -\> Plugins**) мають бути встановлені: У Jenkins (через **Manage Jenkins -\> Plugins**) мають бути встановлені:
Рядок 199: Рядок 197:
 ----- -----
  
-`===== Крок 3: Налаштування "Мосту" (SSH-ключі та Webhook) =====`+===== Крок 3: Налаштування "Мосту" (SSH-ключі та Webhook) =====
  
-Ми створюємо два окремих SSH-ключа для двох різних завдань. Вони зберігаються у `/srv/docker/jenkins/.ssh/(що відповідає `/var/jenkins_home/.ssh/всередині контейнера).+Ми створюємо два окремих SSH-ключа для двох різних завдань. Вони зберігаються у /srv/docker/jenkins/.ssh/ (що відповідає /var/jenkins_home/.ssh/ всередині контейнера).
  
-`==== Ключ 1: Для підключення до GitHub (`id\_rsa`) ====`+==== Ключ 1: Для підключення до GitHub (id\_rsa) ====
  
-1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте `SSH Username with private key`:+1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте SSH Username with private key:
  
-* **ID:** `github-ssh-key`+* **ID:** github-ssh-key
  
-* **Username:** `git`+* **Username:** git
  
-* **Private Key:** (Вміст `id_rsa`)+* **Private Key:** (Вміст id_rsa)
  
-2. **Налаштування GitHub:** Перейдіть у **Репозиторій -\> Settings -\> Deploy keys** та додайте публічний ключ (вміст `id_rsa.pub`).+2. **Налаштування GitHub:** Перейдіть у **Репозиторій -\> Settings -\> Deploy keys** та додайте публічний ключ (вміст id_rsa.pub).
  
-`==== Ключ 2: Для підключення до хоста (Ansible) (`id\_rsa\_ansible`) ====`+==== Ключ 2: Для підключення до хоста (Ansible) (id\_rsa\_ansible) ====
  
-1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте `SSH Username with private key`:+1. **Налаштування Jenkins:** Перейдіть у **Manage Jenkins -\> Credentials -\> Global** та додайте SSH Username with private key:
  
-* **ID:** `ansible-ssh-key`+* **ID:** ansible-ssh-key
  
-* **Username:** `osvex(ваш логін на хост-сервері)+* **Username:** osvex (ваш логін на хост-сервері)
  
-* **Private Key:** (Вміст `id_rsa_ansible`)+* **Private Key:** (Вміст id_rsa_ansible)
  
-2. **Налаштування хост-сервера:** Додайте публічний ключ (вміст `id_rsa_ansible.pub`) до списку довірених для користувача `osvex`:+2. **Налаштування хост-сервера:** Додайте публічний ключ (вміст id_rsa_ansible.pub) до списку довірених для користувача osvex:
  
 \<code bash\> \<code bash\>
Рядок 235: Рядок 233:
 \</code\> \</code\>
  
-==== Налаштування `known\_hosts(у Jenkins) ==== `+==== Налаштування known\_hosts (у Jenkins) ====
  
 Jenkins повинен "довіряти" серверам, до яких він підключається. Jenkins повинен "довіряти" серверам, до яких він підключається.
Рядок 251: Рядок 249:
 \</code\> \</code\>
  
-`==== Налаштування GitHub Webhook ====`+==== Налаштування GitHub Webhook ====
  
 У **Репозиторій -\> Settings -\> Webhooks** додайте новий Webhook: У **Репозиторій -\> Settings -\> Webhooks** додайте новий Webhook:
  
-* **Payload URL:** `https://jenkins.osvex.com/github-webhook/`+* **Payload URL:** https://jenkins.osvex.com/github-webhook/
  
-* **Content type:** `application/json`+* **Content type:** application/json
  
 ----- -----
  
-===== Крок 4: Фінальний `Jenkinsfile(Мозок) ===== `+===== Крок 4: Фінальний Jenkinsfile (Мозок) =====
  
 Цей файл лежить у корені вашого Git-репозиторію моніторингу. Він описує всю логіку пайплайну. Цей файл лежить у корені вашого Git-репозиторію моніторингу. Він описує всю логіку пайплайну.
Рядок 273: Рядок 271:
 agent any // Запускати на будь-якому агенті agent any // Запускати на будь-якому агенті
  
-``` +\\
 stages { stages {
  
Рядок 345: Рядок 342:
 } }
  
-``` +\\
 } }
  
Рядок 353: Рядок 349:
 ----- -----
  
-`===== Фінальний потік роботи (Workflow) =====`+===== Фінальний потік роботи (Workflow) =====
  
-1. Ви робите `git pushзі змінами у `docker-compose.ymlабо `prometheus.yml`.+1. Ви робите git push зі змінами у docker-compose.yml або prometheus.yml.
  
-2. GitHub "ловить" цей push і надсилає Webhook на `https://jenkins.osvex.com`.+2. GitHub "ловить" цей push і надсилає Webhook на https://jenkins.osvex.com.
  
-3. Jenkins "прокидається", запускає пайплайн, завантажує `Jenkinsfile`.+3. Jenkins "прокидається", запускає пайплайн, завантажує Jenkinsfile.
  
-4. Етап "Deploy" підключається по SSH до `[email protected](до вашого хост-сервера).+4. Етап "Deploy" підключається по SSH до [email protected] (до вашого хост-сервера).
  
-5. Jenkins виконує команду: `ansible-playbook ...`+5. Jenkins виконує команду: ansible-playbook ...
  
 6. Ansible (на хості) виконує плейбук: 6. Ansible (на хості) виконує плейбук:
  
-* Заходить у `/home/osvex/docker/monitoringі робить `git pull`.+* Заходить у /home/osvex/docker/monitoring і робить git pull.
  
-* Запускає `docker compose up -d ...`+* Запускає docker compose up -d ...
  
 7. Jenkins отримує "успішний" статус від Ansible і завершує пайплайн з зеленим кольором. 7. Jenkins отримує "успішний" статус від Ansible і завершує пайплайн з зеленим кольором.
  
  • devops/jenkins.txt
  • Востаннє змінено: 14/11/2025 23:00
  • повз osvex