Як структурувати пов'язаний з DevOps код та конфігурації у сховищі коду?


10

Ми зростаємо як компанія, наша продукція розширюється, і наша діяльність, пов'язана з DevOps, також зростає - ми перейшли від Bamboo до більш гнучким і налаштованим Дженкінсом, використовуючи трубопроводи для розгортання та інші плагіни; перейшов на Ansible і почав використовувати Docker тут і там всередині.

Всі ці речі потребують певного рівня кодування чи конфігурації - відповідні скрипти та конфігурації, грубі сценарії Дженкінса, Dockerfiles та конфігурації YAML.

В даний час, ми створили окремі «опа» репозиторій з каталогами високого рівня для jenkins, ansible, dockerі other(що це страшна назва, але зараз все автоматизації «інші» DevOps є).

Наш підхід не вважається правильним і може не змінювати масштаби, але які найкращі практики та рекомендації зберігати код, пов'язаний з DevOps, у сховищі коду чи сховищах?


6
Я переходжу з методом "кожна частина - додаток, по одному репо на додаток", у шеф-кухаря, що означає 1 репо на кожну кулінарну книгу.
Тенсібай

@Tensibai вірно, я побоювався, що єдине репо "ops" швидко стане непрактичним. Дякую.
alecxe

1
Це була застаріла форма управління кулінарною книжкою в шеф-кухаря, 1 репо з усіма кулінарними книгами і доведено пішохід в більшості випадків, отже, зміни, але мені менш комфортно з відповідальним, щоб сказати, що це також підходило б, трубопроводи Дженкінса (якщо v2) і докерські файли повинні жити з проектом, з яким вони працюють з IMO, і я не маю уявлення про те, що ви ставите під іншим, тому я не можу реально дати жодних порад тут
Tensibai

@Tensibai отримав це! Інше складається з більшості утиліт bash та python або періодично виконуваних скриптів для декількох внутрішніх інструментів. Вони насправді ніде не вміщуються, і ми не могли придумати кращого місця, ніж "інші". Я побачу, чи зможу я розмістити вміст про каталоги також у питанні. Дякую.
alecxe

1
Я б розділив їх на кілька репо за "спорідненістю" роботи, сценарії, що працюють над додатком X разом, у вас може бути сценарій, який використовується в двох додатках, але якщо додаток Зміна способу, сценарій повинен обробляти, з яким додатком він спілкується , краще мати дві окремі версії, тому ATEOTD я б зберігав їх із додатком, до якого вони відносяться, або якщо вони охоплюють кілька додатків у певному сховищі за завданням, тому у вас завжди є версія, яка відповідає розгорнутим програмам, і ви не не потрібно одночасно тегувати незв’язаний сценарій.
Тенсібай

Відповіді:


4

Поточна організація коду та конфігурації, які ви описуєте, структурується за допомогою відповідних технічних рішень. Це погана конструкція, яка додасть багато накладних витрат у нашій діяльності з обслуговування, а також додасть багато пасток і на нашому шляху. Натомість ця організація повинна бути структурована навколо артефактів, які ми розгортаємо.

Причиною цього є те, що ми хочемо розглядати артефакти ( наприклад, зображення докера або програмний пакет) як об’єкти наступних дієслів:

  • будувати
  • тест
  • розгортати

розглянути мінімальний набір автоматизованих завдань, які ми хочемо виконати. Якщо ми хочемо щось змінити про те, як реалізується тестове дієслово, легко відвідати папку, відповідну цьому артефакту, у відповідному сховищі, а потім виявити специфічні для автоматики елементи автоматизації, які потрібно оновити. Натомість, якщо рецепти автоматизації побудовані навколо технічних рішень, тоді нам потрібно зрозуміти, що дженкіни беруть участь у процедурах тестування, і знайти там предмети автоматизації, пов'язані з артефактом. У складних ситуаціях організація навколо технічних рішень робить оновлення дуже важкими, тому що ми повинні апріорі знати всі технічні рішення, що беруть участь у якійсь службі, щоб відповідно їх оновити.

Наприклад, сховище, що містить код веб-сайту та мікро-сервісу "a", може мати такі підкаталоги, присвячені операціям:

./ops/website
./ops/micro-service-a

кожен з яких має три сценарії, що викликаються build, testі deploy. Тепер, коли організація елементів автоматизації якимось чином з'ясована, звернемо увагу на конфігурацію.

Основні умови та вимоги щодо організації конфігурації встановлюються deployдієсловом при застосуванні до службового артефакту. deployДієслово повинен мати наступні параметри:

  • версія артефакту для розгортання,
  • ціль розгортання артефакту, яка описує конкретне середовище, де працюватиме розгорнутий артефакт ( наприклад, кластер та кінцеві точки, з якими він повинен поговорити)
  • облікові дані, які він повинен використовувати для підключення до інших кінцевих точок ( наприклад, баз даних)
  • конфігурація виконання (наприклад, тривалість записів кешу тощо)

З точки зору експлуатації, ця розбивка параметризації відповідає природному ступеню свободи проблеми розгортання - окрім облікових даних, які можуть бути в комплекті з конфігурацією виконання, але краще відокремити їх, щоб уникнути їх необережного розповсюдження.


5

Я можу відповісти на docker docker, одна з найкращих практик використання docker - зберігати файл docker та файли для складання в одному сховищі проекту, тому де б ви не клонували проект, ви можете створити образ докера, і це добре збережіть декілька версій, наприклад, файлів для компонування докера (prod, staging, dev), щоб ви могли створити зображення та запустити контейнер із певним варіантом для кожної env, наприклад для dev machine, ви можете використовувати конкретну мережу та запустити більше контейнера залежностей чи будь-чого іншого.


4

Код кожного інструмента переходить у своє власне репо. напр

  1. Шаблон Дженкінса Грові в репо про Дженкінса
  2. Відповідні іграшки YAML у власному репо-рене (з ролями, завданнями, підкаталогами інвентаря
  3. Шаблони хмарності / Terrform у власному репо
  4. Докер файли у власних 5 .. І так далі

Це допоможе вам розширити масштаб з точки зору оркестрації процесів та підтримки різних галузей для кожного середовища

Це дозволить отримати більш детальний контроль та вивантажити всі накладні версії до систем контролю версій. Також створіть окремі гілки для кожного середовища та позначте код для кожного випуску виробництва (як це робимо для бази кодів додатків). Подумайте про інфраструктуру та обробляйте її з точки зору коду. (Будь-які зміни в процесі повинні бути кодифіковані та надіслані до QA, SIT, UAT, а потім до PROD), аналогічно застосуванню.

Наприклад, у вас може бути V2.1 з Ansible запускається у виробництві (головна гілка), але V2.0 докер-контейнерів працює в Prod (головна гілка)

Аналогічно зберігайте ваші скрипти DB / скриптів DB у власних сховищах, і, можливо, у вас може бути файл перевірки здоров'я (JSON / YAML), налаштований на показ версій усіх інструментів / частин у кожній розгорнутій URL для відстеження та автоматизації цілей. (Щоб ваші веб-огляди читали URL-адресу та автоматизували розгортання)


2
Проблема цього підходу полягає в тому, що v2.1 знаходиться в qa і не підтверджений, і вам доведеться терміново виправити виробництво, ви не можете модифікувати v2.0, і якщо ви зробите v2.2 для цього патча, існує високий ризик його бути загублений або перезаписаний, коли v2.1 переходить у виробництво, помножте на кількість окремого коду в репо, і незабаром у вас є кошмар спинок (це працює, але мені довелося додати цю відмову :))
Тенсібай

3
Використання гілок для відстеження інформації щодо середовища / розгортання для мене схоже на зразок мурашника: якщо у нас є 20 середовищ, це означає, що ми маємо 20 гілок для синхронізації ... ймовірне джерело помилок та плутанини. Чи можете ви пояснити, чому ви не використовуєте файли конфігурації для відстеження інформації про середовище / розгортання та який ваш робочий процес працює з цими гілками? Це не банальні проблеми!
Michael Le Barbier Grünewald

3

Розмежування Ops, Dev і DevOps сприяє ізоляції та нав'язує настрій "перекинути її на стіну". Для розширення співпраці між командами слід помістити все у сховище, необхідне для створення та розгортання проекту.

Сказавши це, відповідь на питання:

Як структурувати пов'язаний з DevOps код та конфігурації у сховищі коду?

полягає в тому, що якщо для запуску проекту потрібно конфігурація, то слід помістити його в ту саму директорію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.