SlideShare a Scribd company logo
1 of 49
Download to read offline
Rethinking
Continuous
Delivery
Hello
there!
Andrii Nasinnyk
Staff Site Reliability
Engineer
Хто я?
● Кручу інфраструктуру в MacPaw
● Досвід комерційної розробки
на PHP, NodeJS, Go
● Для душі на Haskell та Rust
Twitter GitHub
● Frontend (SPA, Static)
● Mobile (iOS, Android)
● Desktop
● Backend (Containers)
Так де ж цей CD?
Що ж у нас?
Kubernetes GitOps/FluxCD
GitHub
Single repo
Multi repo
CI
GitHub Actions
Azure Pipelines
Jenkins
Наш типово-нетиповий
пайплайн
То як же ми деплоїмо?
То що ж з цим не так?
Загальну зміну потрібно зробити у всіх проектах
Потрібно пройти флоу кожної команди
CI процес може бути заблокованим
На деяких проектах може не бути команди
Імперативність
А що з безпекою?
Доступ до репозиторію дає доступ до кластеру
Розділення по агентах і ролях – дорого
Яка ж альтернатива?
https://github.com/argoproj/argo-cd/issues/3698
Але як?
Не залежить від проекту
Не залежить від CI
Не потребує апруву від команди
Зміни можна наслідувати як велюси
між проектами
Декларативно
Доступ з кластера до репозиторія
Інфраструктурна конфігурація окремо
від коду проекту
А як код потрапить
в інфраструкту?
Automate image updates to Git
А як код потрапить
в інфраструкту?
Automate image updates to Git
Наш Flux flow
А як бути з динамічними
середовищами?
Не GitOps підхід (Flux for temporary review environments)
Оверхед з декларуванням тимчасових енвів
То хто ж нас врятує?
Argo Events
https://github.com/triggermesh/triggermesh/issues/1441
TriggerMesh Tekton Tiggers
https://github.com/tektoncd/triggers/issues/1574
Як все ж дізнатись
що і коли розгортати?
Домовленість між Ops та Dev командою.
Наш варіант:
Як з цим працювати?
Витягуємо дані з евента
Створюємо об’єкт
Наш flow
Demo
Що далі?
Повідомляти про стан енву в GitHub
Вирішення проблеми асинхронності через
інший контракт GitHub Deployment
Спосіб продовжити CI при якомусь
фінальному стані CD
https://github.com/anasinnyk/fwdays-demo-2023
Q&A
Thank you!
Хто я
❏ Кручу інфраструктуру в MacPaw
❏ Досвід комерційної розробки на PHP, NodeJS, Go
❏ Для душі на Haskell та Rust
GitHub
Twitter
Про що
● Frontend (SPA, Static)
● Mobile (iOS, Android)
● Desktop
● Backend (Containers)
Так де ж цей CD?
Що ж у нас?
❏ GitHub
❏ Single repo
❏ Multi repo
❏ Kubernetes
❏ GitOps/FluxCD
❏ CI
❏ GitHub Actions
❏ Azure Pipelines
❏ Jenkins
Наш типово-нетиповий пайплайн
То як же ж ми деплоїмо?
То що ж з цим не так?
❏ Загальну зміну потрібно зробити у всіх проектах
❏ Потрібно пройти флоу кожної команди
❏ CI процес може бути заблокованим
❏ На деяких проектах може не бути команди
❏ Імперативність
А що з безпекою?
❏ Доступ до репозиторію дає доступ до кластеру
❏ Розділення по агентах і ролях - дорого
Яка ж альтернатива?
Але як?
Інфраструктурна конфігурація окремо від коду проекту
❏ Не залежить від проекту
❏ Не залежить від CI
❏ Не потребує апруву від команди
❏ Зміни можна наслідувати як велюси між проектами
❏ Декларативно
❏ Доступ з кластера до репозиторія
А як код потрапить в інфраструкту?
https://fluxcd.io/flux/guides/image-update/
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: cmm-analytic
spec:
image: us-docker.pkg.dev/macpaw/cleanmymac/analytic/server
interval: 1m
provider: gcp
–--
apiVersion: image.toolkit.fluxcd.io/v1beta1
kind: ImagePolicy
metadata:
name: cmm-analytic
spec:
imageRepositoryRef:
name: cmm-analytic
filterTags:
pattern: "v.*-rc.*"
policy:
semver:
range: "^0.x-0"
А як код потрапить в інфраструкту?
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
А як бути з динамічними середовищами?
❏ Не GitOps підхід (https://github.com/fluxcd/flux2/discussions/831)
❏ Оверхед з декларуванням тимчасових енвів
То хто ж нас врятує?
❏ TriggerMesh
❏ Tekton Tiggers
❏ Argo Events
https://github.com/triggermesh/triggermesh/issues/1441
https://github.com/tektoncd/triggers/issues/1574
Як все ж дізнатись що і коли розгортати?
Домовленість між Ops та Dev командою.
Наш варіант:
us-docker.pkg.dev/macpaw/cleanmymac/analytic/server:pr-111.20230901.2
registry / repository / project / component / image : envName . unique id
Як з цим працювати?
apiVersion: argoproj.io/v1alpha1
kind: Sensor
metadata:
name: ${project}-${component}
spec:
dependencies:
- eventSourceName: gcp-pubsub
transform:
jq: |
.body = {
"registry": ((.body | @base64d | fromjson).tag | split("/")[0]),
"repository": ((.body | @base64d | fromjson).tag | split("/")[1]),
"project": ((.body | @base64d | fromjson).tag | split("/")[2]),
"component": ((.body | @base64d | fromjson).tag | split("/")[3]),
"image": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[0]),
"tag": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[-1]),
"pr": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[-1] |
sub("^pr-(?<n>[0-9]+).*$"; .n ))
}
filters: # filter not needed message
triggers: # tigger kubernetes object created
Витягуємо дані з евента
- template:
name: ${project}-${component}-pr
k8s:
operation: patch
source:
resource: # Flux Kustomization here
parameters:
- src: { dependencyName: dep, dataKey: body.pr }
dest: metadata.name
operation: append
- src: { dependencyName: dep, dataKey: body.pr }
dest: spec.postBuild.substitute.pr
- src: { dependencyName: dep, dataKey: body.tag }
dest: GET_FROM_EVENT
- src: { dependencyName: dep, dataKey: body.tag }
dest: spec.postBuild.substitute.latest_tag
parameters:
- src:
dependencyName: dep
dataTemplate: '{{ .Input.body.image | snakecase | printf "spec.postBuild.substitute.%s_tag" }}'
dest: k8s.parameters.2.dest
Створюємо об’єкт
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: ${project}-${component}-pr-
namespace: flux-system
spec:
interval: 1m
path: ./flux/projects/${project}/${component}/pr
prune: true
sourceRef:
kind: GitRepository
name: flux-system
namespace: flux-system
postBuild:
substitute:
project: ${project}
component: ${component}
chart_name: ${chart_name:=backend}
chart_version: ${chart_version:=3.0.9}
pr: number
Demo
Що далі?
❏ Повідомляти про стан енву в GitHub
❏ Вирішення проблеми асинхронності через інший контракт GitHub Deployment
❏ Спосіб продовжити CI при якомусь фінальному стані CD
Q&A

More Related Content

Similar to "Rethinking Continuous Delivery", Andrii Nasinnyk

Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application framework
Quintagroup
 
таблиця
таблицятаблиця
таблиця
chepesyuk
 
Continious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій ГалушкаContinious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій Галушка
HRdepartment
 

Similar to "Rethinking Continuous Delivery", Andrii Nasinnyk (20)

"Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st..."Incremental rollouts and rollbacks with business metrics control at every st...
"Incremental rollouts and rollbacks with business metrics control at every st...
 
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
'Worker threads vs c++ addons' by Novokhatskyi Oleksii at OdessaJS'2020
 
Корнілов Андрій
Корнілов АндрійКорнілов Андрій
Корнілов Андрій
 
Студентський R&D проєкт – практичні навички для студентів без відриву від нав...
Студентський R&D проєкт – практичні навички для студентів без відриву від нав...Студентський R&D проєкт – практичні навички для студентів без відриву від нав...
Студентський R&D проєкт – практичні навички для студентів без відриву від нав...
 
Grok web application framework
Grok web application frameworkGrok web application framework
Grok web application framework
 
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ..."Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
"Laravel Tips & Tricks - 7 Steps to Dramatically Improve Performance", Yehor ...
 
Android Platform Architecture
Android Platform ArchitectureAndroid Platform Architecture
Android Platform Architecture
 
Руйнуємо .NET Міфи
Руйнуємо .NET МіфиРуйнуємо .NET Міфи
Руйнуємо .NET Міфи
 
БОГДАН ЛОЗИНСЬКИЙ «Технічні аспекти для нетехнічних: автоматизація та баг реп...
БОГДАН ЛОЗИНСЬКИЙ «Технічні аспекти для нетехнічних: автоматизація та баг реп...БОГДАН ЛОЗИНСЬКИЙ «Технічні аспекти для нетехнічних: автоматизація та баг реп...
БОГДАН ЛОЗИНСЬКИЙ «Технічні аспекти для нетехнічних: автоматизація та баг реп...
 
Kotlin для розробки Android
Kotlin для розробки AndroidKotlin для розробки Android
Kotlin для розробки Android
 
iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)iPhone Objective-C Development (ukr) (2009)
iPhone Objective-C Development (ukr) (2009)
 
Version control
Version controlVersion control
Version control
 
таблиця
таблицятаблиця
таблиця
 
Continious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій ГалушкаContinious integration jet brains teamcity. Віталій Галушка
Continious integration jet brains teamcity. Віталій Галушка
 
Golang
GolangGolang
Golang
 
Xdebug (ukr)
Xdebug (ukr)Xdebug (ukr)
Xdebug (ukr)
 
"Key considerations in implementing a distributed message-sending system usin...
"Key considerations in implementing a distributed message-sending system usin..."Key considerations in implementing a distributed message-sending system usin...
"Key considerations in implementing a distributed message-sending system usin...
 
NodeJS.pptx
NodeJS.pptxNodeJS.pptx
NodeJS.pptx
 
Як прокачати трьох студентів за п’ять тижнів
Як прокачати трьох студентів за п’ять тижнівЯк прокачати трьох студентів за п’ять тижнів
Як прокачати трьох студентів за п’ять тижнів
 
Як прокачати трьох студентів за п’ять тижнів
Як прокачати трьох студентів за п’ять тижнівЯк прокачати трьох студентів за п’ять тижнів
Як прокачати трьох студентів за п’ять тижнів
 

More from Fwdays

More from Fwdays (20)

"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y..."How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
"How Preply reduced ML model development time from 1 month to 1 day",Yevhen Y...
 
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
"GenAI Apps: Our Journey from Ideas to Production Excellence",Danil Topchii
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
"Federated learning: out of reach no matter how close",Oleksandr Lapshyn
 
"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets"What is a RAG system and how to build it",Dmytro Spodarets
"What is a RAG system and how to build it",Dmytro Spodarets
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi"Distributed graphs and microservices in Prom.ua",  Maksym Kindritskyi
"Distributed graphs and microservices in Prom.ua", Maksym Kindritskyi
 
"Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl..."Rethinking the existing data loading and processing process as an ETL exampl...
"Rethinking the existing data loading and processing process as an ETL exampl...
 
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T..."How Ukrainian IT specialist can go on vacation abroad without crossing the T...
"How Ukrainian IT specialist can go on vacation abroad without crossing the T...
 
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ..."The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
"The Strength of Being Vulnerable: the experience from CIA, Tesla and Uber", ...
 
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu..."[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
"[QUICK TALK] Radical candor: how to achieve results faster thanks to a cultu...
 
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care..."[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
"[QUICK TALK] PDP Plan, the only one door to raise your salary and boost care...
 
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"..."4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
"4 horsemen of the apocalypse of working relationships (+ antidotes to them)"...
 
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast..."Reconnecting with Purpose: Rediscovering Job Interest after Burnout",  Anast...
"Reconnecting with Purpose: Rediscovering Job Interest after Burnout", Anast...
 
"Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others..."Mentoring 101: How to effectively invest experience in the success of others...
"Mentoring 101: How to effectively invest experience in the success of others...
 
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova"Mission (im) possible: How to get an offer in 2024?",  Oleksandra Myronova
"Mission (im) possible: How to get an offer in 2024?", Oleksandra Myronova
 
"Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv..."Why have we learned how to package products, but not how to 'package ourselv...
"Why have we learned how to package products, but not how to 'package ourselv...
 
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin..."How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
"How to tame the dragon, or leadership with imposter syndrome", Oleksandr Zin...
 

"Rethinking Continuous Delivery", Andrii Nasinnyk

  • 1.
  • 4. Хто я? ● Кручу інфраструктуру в MacPaw ● Досвід комерційної розробки на PHP, NodeJS, Go ● Для душі на Haskell та Rust Twitter GitHub
  • 5. ● Frontend (SPA, Static) ● Mobile (iOS, Android) ● Desktop ● Backend (Containers)
  • 6. Так де ж цей CD?
  • 7. Що ж у нас? Kubernetes GitOps/FluxCD GitHub Single repo Multi repo CI GitHub Actions Azure Pipelines Jenkins
  • 9. То як же ми деплоїмо?
  • 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 командою. Наш варіант:
  • 20. Як з цим працювати?
  • 24. Demo
  • 25. Що далі? Повідомляти про стан енву в GitHub Вирішення проблеми асинхронності через інший контракт GitHub Deployment Спосіб продовжити CI при якомусь фінальному стані CD https://github.com/anasinnyk/fwdays-demo-2023
  • 26. Q&A
  • 28.
  • 29. Хто я ❏ Кручу інфраструктуру в MacPaw ❏ Досвід комерційної розробки на PHP, NodeJS, Go ❏ Для душі на Haskell та Rust GitHub Twitter
  • 30. Про що ● Frontend (SPA, Static) ● Mobile (iOS, Android) ● Desktop ● Backend (Containers)
  • 31. Так де ж цей CD?
  • 32. Що ж у нас? ❏ GitHub ❏ Single repo ❏ Multi repo ❏ Kubernetes ❏ GitOps/FluxCD ❏ CI ❏ GitHub Actions ❏ Azure Pipelines ❏ Jenkins
  • 34. То як же ж ми деплоїмо?
  • 35. То що ж з цим не так? ❏ Загальну зміну потрібно зробити у всіх проектах ❏ Потрібно пройти флоу кожної команди ❏ CI процес може бути заблокованим ❏ На деяких проектах може не бути команди ❏ Імперативність
  • 36. А що з безпекою? ❏ Доступ до репозиторію дає доступ до кластеру ❏ Розділення по агентах і ролях - дорого
  • 38. Але як? Інфраструктурна конфігурація окремо від коду проекту ❏ Не залежить від проекту ❏ Не залежить від CI ❏ Не потребує апруву від команди ❏ Зміни можна наслідувати як велюси між проектами ❏ Декларативно ❏ Доступ з кластера до репозиторія
  • 39. А як код потрапить в інфраструкту? https://fluxcd.io/flux/guides/image-update/ apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImageRepository metadata: name: cmm-analytic spec: image: us-docker.pkg.dev/macpaw/cleanmymac/analytic/server interval: 1m provider: gcp –-- apiVersion: image.toolkit.fluxcd.io/v1beta1 kind: ImagePolicy metadata: name: cmm-analytic spec: imageRepositoryRef: name: cmm-analytic filterTags: pattern: "v.*-rc.*" policy: semver: range: "^0.x-0"
  • 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
  • 44. Як з цим працювати? apiVersion: argoproj.io/v1alpha1 kind: Sensor metadata: name: ${project}-${component} spec: dependencies: - eventSourceName: gcp-pubsub transform: jq: | .body = { "registry": ((.body | @base64d | fromjson).tag | split("/")[0]), "repository": ((.body | @base64d | fromjson).tag | split("/")[1]), "project": ((.body | @base64d | fromjson).tag | split("/")[2]), "component": ((.body | @base64d | fromjson).tag | split("/")[3]), "image": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[0]), "tag": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[-1]), "pr": ((.body | @base64d | fromjson).tag | split("/")[-1] | split(":")[-1] | sub("^pr-(?<n>[0-9]+).*$"; .n )) } filters: # filter not needed message triggers: # tigger kubernetes object created
  • 45. Витягуємо дані з евента - template: name: ${project}-${component}-pr k8s: operation: patch source: resource: # Flux Kustomization here parameters: - src: { dependencyName: dep, dataKey: body.pr } dest: metadata.name operation: append - src: { dependencyName: dep, dataKey: body.pr } dest: spec.postBuild.substitute.pr - src: { dependencyName: dep, dataKey: body.tag } dest: GET_FROM_EVENT - src: { dependencyName: dep, dataKey: body.tag } dest: spec.postBuild.substitute.latest_tag parameters: - src: dependencyName: dep dataTemplate: '{{ .Input.body.image | snakecase | printf "spec.postBuild.substitute.%s_tag" }}' dest: k8s.parameters.2.dest
  • 46. Створюємо об’єкт apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: ${project}-${component}-pr- namespace: flux-system spec: interval: 1m path: ./flux/projects/${project}/${component}/pr prune: true sourceRef: kind: GitRepository name: flux-system namespace: flux-system postBuild: substitute: project: ${project} component: ${component} chart_name: ${chart_name:=backend} chart_version: ${chart_version:=3.0.9} pr: number
  • 47. Demo
  • 48. Що далі? ❏ Повідомляти про стан енву в GitHub ❏ Вирішення проблеми асинхронності через інший контракт GitHub Deployment ❏ Спосіб продовжити CI при якомусь фінальному стані CD
  • 49. Q&A