We at MacPaw practice the approach of service teams. And as one of such teams, the responsibility for delivering software across various environments, from testing to production, falls on our shoulders. In this presentation, I will explain how we are trying to standardize our approach to software delivery in environments with diverse tech stacks and development approaches. The presentation will cover methods such as GitOps, dynamic environments, and event-based software delivery.
10. То що ж з цим не так?
Загальну зміну потрібно зробити у всіх проектах
Потрібно пройти флоу кожної команди
CI процес може бути заблокованим
На деяких проектах може не бути команди
Імперативність
11. А що з безпекою?
Доступ до репозиторію дає доступ до кластеру
Розділення по агентах і ролях – дорого
13. Але як?
Не залежить від проекту
Не залежить від CI
Не потребує апруву від команди
Зміни можна наслідувати як велюси
між проектами
Декларативно
Доступ з кластера до репозиторія
Інфраструктурна конфігурація окремо
від коду проекту
14. А як код потрапить
в інфраструкту?
Automate image updates to Git
15. А як код потрапить
в інфраструкту?
Automate image updates to Git
17. А як бути з динамічними
середовищами?
Не GitOps підхід (Flux for temporary review environments)
Оверхед з декларуванням тимчасових енвів
18. То хто ж нас врятує?
Argo Events
https://github.com/triggermesh/triggermesh/issues/1441
TriggerMesh Tekton Tiggers
https://github.com/tektoncd/triggers/issues/1574
19. Як все ж дізнатись
що і коли розгортати?
Домовленість між Ops та Dev командою.
Наш варіант:
25. Що далі?
Повідомляти про стан енву в GitHub
Вирішення проблеми асинхронності через
інший контракт GitHub Deployment
Спосіб продовжити CI при якомусь
фінальному стані CD
https://github.com/anasinnyk/fwdays-demo-2023
35. То що ж з цим не так?
❏ Загальну зміну потрібно зробити у всіх проектах
❏ Потрібно пройти флоу кожної команди
❏ CI процес може бути заблокованим
❏ На деяких проектах може не бути команди
❏ Імперативність
36. А що з безпекою?
❏ Доступ до репозиторію дає доступ до кластеру
❏ Розділення по агентах і ролях - дорого
38. Але як?
Інфраструктурна конфігурація окремо від коду проекту
❏ Не залежить від проекту
❏ Не залежить від CI
❏ Не потребує апруву від команди
❏ Зміни можна наслідувати як велюси між проектами
❏ Декларативно
❏ Доступ з кластера до репозиторія
40. А як код потрапить в інфраструкту?
https://fluxcd.io/flux/guides/image-update/
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImageUpdateAutomation
metadata:
name: projects
spec:
interval: 5m
sourceRef: # reference for GitRepository resource
git:
checkout:
ref:
branch: main
commit:
author:
email: fluxcd@macpaw.com
name: fluxcd
messageTemplate: chore(flux): update images
update:
path: ./flux/projects
strategy: Setters
41. А як бути з динамічними середовищами?
❏ Не GitOps підхід (https://github.com/fluxcd/flux2/discussions/831)
❏ Оверхед з декларуванням тимчасових енвів
42. То хто ж нас врятує?
❏ TriggerMesh
❏ Tekton Tiggers
❏ Argo Events
https://github.com/triggermesh/triggermesh/issues/1441
https://github.com/tektoncd/triggers/issues/1574
43. Як все ж дізнатись що і коли розгортати?
Домовленість між Ops та Dev командою.
Наш варіант:
us-docker.pkg.dev/macpaw/cleanmymac/analytic/server:pr-111.20230901.2
registry / repository / project / component / image : envName . unique id
48. Що далі?
❏ Повідомляти про стан енву в GitHub
❏ Вирішення проблеми асинхронності через інший контракт GitHub Deployment
❏ Спосіб продовжити CI при якомусь фінальному стані CD