Є третій спосіб, як ви самі сказали. Я думаю, ви змішуєте розробку, тестування та розгортання. Я пропоную розглянути весь SDLC як єдине ціле, щоб спершу зрозуміти, чого саме ви намагаєтеся досягти. Це велика тема, але я зроблю все можливе, щоб підсумувати.
TL; DR;
Словом, вам потрібно розділити:
- ваш код, від
- конфігурація програми від
- конфігурація системного середовища.
Кожен повинен бути незалежним один від одного та належним чином:
- керована версія
- перевірений
- розгортається
Більш довга версія
По-перше, у вас є програма, що складається з коду та (окремих наборів) конфігурації. Це потрібно перевірити, як для побудови, так і для наміченої функції - це називається постійною інтеграцією (CI). Є багато постачальників цієї послуги як в Інтернеті, так і на локальному рівні - наприклад, CircleCI для хмарного постачальника, який посилається на ваше сховище, а також створює і тестує щоразу, коли ви здійснюєте їх виконання. Якщо ваш сховище ввімкнено та не може використовувати хмарного постачальника, щось на зразок Дженкінсабуло б рівнозначним. Якщо ваша програма є досить стандартною, можливо, існує наявне зображення Docker, яке може використовувати служба CI. Якщо ні, то вам доведеться створити такий або кластер таких, щоб ваш код програми та конфігурацію можна було розгорнути. Правильно налаштований, у вас буде безліч статистичних даних щодо якості коду вашої програми.
Далі, як тільки ви будете задоволені функціональністю та правильністю вашої програми, база коду повинна бути відповідним тегом для конкретного випуску. Потім ця збірка повинна бути розгорнена до тестового середовища. Зауважте, що код буде таким самим, як перевірений у вашій ІП (доказово, якщо ви це зробили правильно), але ваша конфігурація може відрізнятися. Знову деякі постачальники CI можуть запропонувати цей крок, щоб ви могли протестувати розгортання пакувальної програми та дискретної конфігурації. Цей етап зазвичай буде включати функціональне тестування користувача (на нову функціональність), а також автоматизоване тестування (для відомих функціональних можливостей). Якщо випуск проходить цей етап, у вас є кандидат на випуск для інтеграційного тестування. Ви можете запустити тести автоматизації з іншого контейнера Docker,деякі показники, що зумовлюють тестування зусиль, - це 1: 1 для кодування зусиль (хоча я сам у цьому не впевнений).
Передостаннє, наступний крок - ви будуєте своє (системне) середовище так, ніби це виробництво. Якщо ви використовуєте Docker у виробництві, саме тут ви подумаєте про посилення безпеки, оптимізацію мережі та сервера тощо. Ваші зображення Docker можуть базуватися на тих, які ви використовували в розробці (в ідеалі - так), але можливі зміни масштабування та безпеки , як я сказав. На сьогодні функціональне тестування програми має бути завершеним, ви більше переймаєтесь безпекою та продуктивністю. Відповідно до функціонального тестування, ваші тести тут можна розробляти, розгортати та запускати з інших зображень Docker. Цей крок раніше був жахливо дорогим і його рідко робили, тому для того, щоб відтворити виробництво, вам потрібне було виділене обладнання. Сьогодні це цілком життєздатно, оскільки ви можете встати і зруйнувати все навколишнє середовище практично будь-якого масштабу на вимогу.
Нарешті, у вас є випуск, який повинен бути готовий до виробництва лише з невеликим набором дельти конфігурації, ніж тестування ваших інтеграційних тестувань (IP-адреси, URI-адреси бази даних, паролі тощо). Ваша база коду була протестована щонайменше у трьох різних середовищах. точка та більшість конфігурацій системи принаймні один раз.