GitOps 를 활용한 DevOps - 방법론 개요, GitOps 도구 및 대안과의 비교
GitOps 에 대한 몇 가지 메모
GitOps 는 Git 을 단일 진실 공급원 (Single Source of Truth) 으로 활용하여 인프라 및 애플리케이션 배포를 관리하는 현대적인 접근 방식입니다. 이는 클라우드 네이티브 환경 특히에서 애플리케이션과 인프라를 배포하고 관리하는 프로세스를 자동화하고 간소화하기 위해 Git 의 버전 관리 기능을 활용합니다.

본질적으로 GitOps 는 Git 에서 정의된 시스템의 원하는 상태를 권한 있는 소스로 간주하며, 자동화 도구를 통해 시스템의 실제 상태가 이 원하는 상태와 일치하도록 보장합니다.
그것이 무엇인지, 어떻게 작동하는지, 일반적인 워크플로우 및 대안들에 대한 내용은 다음과 같습니다.
관련 CI/CD 워크플로우에 대해서는 실용적인 자동화 패턴을 위한 GitHub Actions 치트시트 - 표준 구조 및 가장 유용한 액션 목록 을 참조하십시오.
개발자 도구 및 워크플로우에 대한 포괄적인 개요는 Developer Tools: Modern Development Workflows Complete Guide 를 참조하십시오.
GitOps 란 무엇인가요?
GitOps 는 Git 저장소를 사용하여 인프라 및 애플리케이션 구성을 정의하고 관리하는 방법론입니다. 모든 변경 사항은 Git 커밋과 풀 리퀘스트 (Pull Request) 를 통해 이루어지며, 이후 Argo CD 나 Flux 와 같은 자동화 에이전트를 통해 인프라에 자동으로 적용됩니다.
핵심 원칙:
- Git 을 단일 진실 공급원으로 사용
- 지속적 제공 (CD) 을 통한 자동 배포
- 조정 (Reconciliation): 실제 상태가 원하는 상태와 일치하도록 보장
- 감사 가능하고 버전 관리되는 변경 사항
GitOps 사용 방법
-
구성 정의:
- 인프라 (예: Kubernetes 매니페스트, Terraform 파일) 를 정의하기 위해 YAML 또는 JSON 을 사용하십시오.
-
Git 에 저장:
- 구성 파일을 Git 저장소에 푸시합니다.
-
배포 자동화:
- Argo CD 나 Flux 와 같은 GitOps 도구를 사용하여 저장소를 모니터링하고 변경 사항을 환경에 적용합니다.
-
풀 리퀘스트를 통한 변경:
- 모든 업데이트는 풀 리퀘스트를 통해 이루어집니다. 병합되면 GitOps 에이전트가 변경 사항을 자동으로 적용합니다.
일반적인 GitOps 워크플로우
-
애플리케이션 배포:
- 개발자가 앱 구성 (예: 이미지 버전) 업데이트 → PR → 병합 → GitOps 도구가 업데이트 배포.
-
인프라 관리:
- DevOps 엔지니어가 인프라 코드 수정 → PR → 병합 → Terraform 또는 Crossplane 과 같은 도구를 통한 인프라 업데이트.
-
롤백:
- Git 에서 커밋 되돌리기 → GitOps 도구가 이전 상태로 자동으로 롤백.
-
이동 (Drift) 감지:
- 실행 상태가 Git 과 다른 경우, GitOps 도구가 알림을 보내거나 자동으로 조정.
인기 있는 GitOps 도구
| 도구 | 설명 |
|---|---|
| Argo CD | Kubernetes 네이티브 GitOps 지속 제공 도구. |
| Flux | 가볍고 확장 가능한 GitOps 도구 세트. |
| Jenkins X | 내장 GitOps 지원이 있는 CI/CD 플랫폼. |
| Weave GitOps | 정책 및 보안 기능이 있는 엔터프라이즈 GitOps. |
Argo CD
Argo CD 는 Kubernetes 를 위한 선언적, GitOps 기반 지속 제공 (CD) 도구입니다. 이는 Git 저장소와 Kubernetes 클러스터를 동기화하여 애플리케이션 배포를 자동화하고 환경 간 일관성을 보장합니다. 주요 특징은 다음과 같습니다:
- Kubernetes 네이티브: 선언적 구성 관리를 위한 깊은 통합을 갖춘 Kubernetes 를 위해 설계됨.
- 선언적 워크플로우: 애플리케이션 정의, 구성 및 환경을 위한 Git 을 단일 진실 공급원으로 사용.
- 사용자 친화적인 인터페이스: 실시간 모니터링, 애플리케이션 관리 및 배포 상태 시각화를 위한 웹 UI 제공.
Argo CD 는 Git 저장소에 정의된 원하는 상태와 애플리케이션의 실제 상태를 지속적으로 조정하는 컨트롤러 역할을 합니다.
GitOps 도구로서의 Argo CD 주요 기능 Argo CD 는 GitOps 워크플로우에 맞춰 강력한 기능 세트를 제공합니다:
| 기능 | 설명 |
|---|---|
| 멀티 클러스터 지원 | 중앙 집중식 제어를 통해 여러 Kubernetes 클러스터 간 배포 관리. |
| RBAC 및 멀티 테넌시 | 역할, 프로젝트, 권한을 통한 세밀한 접근 제어. |
| CLI 및 웹 UI | 자동화 및 CI/CD 통합을 위한 CLI; 실시간 모니터링을 위한 웹 인터페이스. |
| Helm 및 Kustomize 지원 | 선언적 워크플로우를 통한 Helm 차트 및 Kustomize 구성 적용. |
| 가시성 (Observability) | Prometheus, Grafana, Slack 을 통한 메트릭, 알림 및 통지. |
| 롤백 및 동기화 | 언제든지 커밋된 Git 상태로 롤백 및 자동 조정 가능. |
Argo CD 의 GitOps 원칙 구현 방식 Argo CD 는 다음과 같은 메커니즘을 통해 GitOps 원칙과 일치합니다:
- Git 을 단일 진실 공급원으로: 애플리케이션, 구성 및 환경이 Git 저장소에서 정의됨.
- 자동 조정: 애플리케이션 컨트롤러가 Kubernetes 리소스의 실제 상태와 Git 의 원하는 상태를 지속적으로 비교하여 이동을 자동으로 해결.
- 선언적 구성: 배포 대상 및 동기화 정책을 정의하기 위해 Kubernetes CRD(예:
Application,AppProject) 사용. - 풀 기반 동기화: 배포된 환경을 원하는 상태와 정렬하기 위해 Git 저장소에서 변경 사항을 가져옴.
이 접근 방식은 환경 간 감사 가능성, 추적 가능성, 일관성을 보장합니다.
Argo CD 의 사용 사례 및 실제 적용 Argo CD 는 다음과 같은 프로덕션 환경에서 널리 채택되고 있습니다:
- Kubernetes 배포: 원활한 업데이트를 위해 클러스터 상태와 Git 저장소 동기화.
- CI/CD 통합: CI 파이프라인 (예: GitHub Actions, Jenkins) 과 연동하여 배포 및 롤백 자동화.
- 보안: Sealed Secrets 및 SOPS 와 같은 도구와 통합하여 암호화된 비밀 관리.
설치 방법:
- Kubectl: 기본 사용 사례를 위한 경량 설정.
- Helm: 엔터프라이즈 환경을 위한 권장 사항으로, 세밀한 제어 및 HA 구성 제공.
설정 단계:
- 네임스페이스 (
argocd) 를 생성하고kubectl을 통해 매니페스트를 적용합니다. kubectl port-forward를 사용하여 Argo CD UI 를 노출합니다.- Git 저장소를 등록하고 소스 (Git 저장소) 와 대상 (Kubernetes 클러스터/네임스페이스) 을 지정하는
ApplicationCRD 를 정의합니다.
통합 도구:
- Kustomize: 환경별 구성 (예: dev/staging/prod) 을 위해 사용.
- Helm: 패키지 관리 및 매개변수화된 배포를 위해 사용.
GitOps 워크플로우에서 Argo CD 사용에 대한 모범 사례
- 구성 저장소 분리: Kubernetes 매니페스트를 애플리케이션 소스 코드와 별도의 Git 저장소에 저장합니다.
- ApplicationSets 사용: 클러스터/환경 간 매개변수화된 애플리케이션 배포 자동화.
- 비밀 정보 보안: 평문 비밀 정보를 피하고 Sealed Secrets 또는 External Secrets Operator를 사용.
- 모니터링 및 감사: Argo CD 의 내장 모니터링 및 Git 히스토리를 사용하여 동기화 상태, 차이점, 이동을 추적.
- 자가 치유 활성화:
prune=true및selfHeal=true를 구성하여 이동을 자동으로 수정.
GitOps 생태계에서 Argo CD 의 미래 동향 및 발전
- 향상된 멀티 클라우드 지원: 하이브리드 환경을 위한 멀티 클러스터 및 멀티 클라우드 기능 확장.
- IaC 도구와의 긴밀한 통합: Terraform 및 Pulumi 과 같은 인프라 코드 (IaC) 플랫폼과의 더 깊은 통합.
- 확장된 CI/CD 기능: 엔드 투 엔드 워크플로우를 위한 CI 도구 (예: GitHub Actions) 와의 더 긴밀한 결합.
- 향상된 가시성: Grafana 및 Prometheus 와 같은 가시성 플랫폼과의 통합을 통한 향상된 메트릭 및 알림.
GitOps 를 위한 Flux V2
Flux 는 Kubernetes 환경에서 GitOps 기반 자동화를 위해 설계된 CNCF 졸업 오픈 소스 도구입니다. Weaveworks 에서 개발한 이 도구는 팀이 Kubernetes 클러스터를 Git 저장소와 동기화할 수 있게 하여 인프라 및 애플리케이션 상태가 항상 버전 제어 정의와 일치하도록 보장합니다.
Flux 의 핵심 측면은 다음과 같습니다:
- GitOps 오퍼레이터: Flux 는 Kubernetes 컨트롤러로 작용하여 Git 저장소를 지속적으로 모니터링하고 변경 사항을 클러스터에 적용합니다.
- 가볍고 확장 가능: 모듈식 설계로 커스터마이징 (예: Source, Kustomize, Helm 컨트롤러 활성화/비활성화) 이 가능합니다.
- CLI 중심 워크플로우: Flux 는 스크립팅 및 자동화를 위해 명령줄 인터페이스 (CLI) 를 우선시하지만, 제 3 자 GUI(예: Weave GitOps) 도 사용할 수 있습니다.
Flux 는 자동화, 보안, 확장성으로 클라우드 네이티브 환경에서 널리 채택되고 있습니다.
3. GitOps 도구로서의 Flux 주요 기능
Flux 는 GitOps 원칙과 일치하는 다양한 기능을 제공합니다:
-
Git 기반 구성:
- Kubernetes 매니페스트, Helm 차트, Kustomize 오버레이를 Git 저장소에 저장합니다.
- 예시: 일반적인 Flux 구성 저장소에는
namespaces.yaml,deployments.yaml및 환경별 구성을 위한 디렉터리가 포함됩니다.
-
Kubernetes 리소스 관리:
- Git 저장소를 지속적으로 모니터링하고 조정 루프를 통해 클러스터에 변경 사항을 적용합니다.
- 애플리케이션 및 인프라 정의를 관리하기 위해 Helm, Kustomize, OCI 레지스트리를 지원합니다.
-
자동 이미지 업데이트:
- 레지스트리 (예: Docker Hub, Azure Container Registry) 에서 새로운 컨테이너 이미지 버전을 감지하고 Git 의 매니페스트를 업데이트합니다.
-
보안 및 규정 준수:
- 세밀한 접근 제어를 위해 RBAC 정책을 사용합니다.
- 민감한 데이터 (예: API 토큰) 암호화를 위해 비밀 관리 도구 (예: SOPS, Sealed Secrets) 와 통합합니다.
-
진행형 제공 (Progressive Delivery):
- Flagger 와 연동하여 캐너리 배포, A/B 테스트, 블루 - 그린 롤아웃을 구현합니다.
-
멀티 클러스터 지원:
- Git 저장소를 통해 여러 Kubernetes 클러스터를 관리하여 환경 간 일관된 배포를 가능하게 합니다.
4. Flux 의 GitOps 원칙 정합성
Flux 는 아키텍처와 워크플로우를 통해 GitOps 원칙을 완전히 수용합니다:
- 선언적 상태: 모든 Kubernetes 리소스가 Git 에 정의되어 추적 가능성과 버전 관리를 보장합니다.
- 지속적 조정: Flux 는 자동으로 클러스터를 Git 저장소와 동기화하여 수동
kubectl apply명령을 제거합니다. - 버전 제어: 변경 사항은 풀 리퀘스트를 통해 이루어져 협업, 검토 및 승인이 가능합니다.
- 자동화: Flux 는 코드 커밋부터 클러스터 업데이트까지 배포 파이프라인을 자동화하여 운영 오버헤드를 줄입니다.
Flux 의 풀 기반 모델 (푸시 기반 CI/CD 와는 달리) 은 수동 개입에 대한 노출을 최소화하여 보안을 강화합니다.
실제 시나리오에서의 Flux 사용 사례
Flux 는 다음과 같은 사용 사례에 이상적입니다:
- 자동 Kubernetes 배포:
- 개발, 스테이징, 프로덕션 환경 간 일관성을 보장하기 위해 클러스터 상태와 Git 저장소 동기화.
- 진행형 제공:
- 제어된 배포를 위해 Flagger 와 캐너리 롤아웃 지원.
- 멀티 클러스터 관리:
- 여러 Kubernetes 클러스터 (예: AKS, EKS, Azure Arc) 에 애플리케이션 배포.
- CI/CD 통합:
- GitHub Actions, Jenkins, GitLab CI/CD 와 연동하여 테스트, 빌드 및 배포 파이프라인 자동화.
- 인프라 코드 (IaC):
- GitOps 원칙과 일치하는 Terraform 또는 Helm 을 통한 인프라 관리.
예시: 한 핀테크 기업은 프로덕션 배포를 자동화하고 감사 추적 및 빠른 롤백을 보장하기 위해 Flux 를 사용합니다.
설치:
- CLI:
brew install fluxctl또는 직접 다운로드를 통해 설치. - Helm:
helm repo add fluxcd https://charts.fluxcd.io helm upgrade -i flux fluxcd/flux \ --set git.url=git@github.com:your-username/your-repo \ --namespace flux
CI/CD 파이프라인 및 인프라와의 통합
Flux 는 CI/CD 도구와 원활하게 통합됩니다:
- GitHub Actions: Git 푸시 이벤트에 대한 Flux 동기화 트리거 (코드 예시 참조).
- Jenkins: 테스트, 빌드 및 배포 파이프라인 자동화.
- GitLab CI/CD: Flux 동기화를 트리거하기 위해
.gitlab-ci.yml사용.
인프라 통합:
- Terraform: Flux 를 통한 인프라 코드 (IaC) 관리.
- Prometheus: 메트릭 및 알림으로 Flux 배포 모니터링.
- Open Policy Agent (OPA): Kubernetes 리소스에 대한 정책 코드 강제.
Flux 사용의 도전 과제 및 제한 사항
- 보안 복잡성: Git 에 비밀 정보를 관리하려면 SOPS 또는 Sealed Secrets 와 같은 도구가 필요합니다.
- 감사 오버헤드: Git 커밋 서명 강제 및 포스 푸시 금지가 필요합니다.
- 버전 승진: 환경별 구성 (예: dev vs. production) 이 철저한 검토 프로세스가 필요합니다.
- 도구 성숙도: Flux 의 UI 는 Argo CD 보다 덜 성숙하여 모니터링을 위해 제 3 자 도구에 의존해야 합니다.
Flux 구현을 위한 모범 사례
:latest태그 피하기: 컨테이너 이미지에 대해 시맨틱 버전을 사용.- 논리적 Git 저장소 구조화:
/apps,/clusters,/environments와 같은 디렉터리 사용. - 조정 상태 모니터링: 실시간 피드백을 위해
flux get all및 알림 사용. - RBAC 활성화: Flux 및 Kubernetes 리소스에 대한 세밀한 접근 제어 구현.
- 비밀 관리 통합: 암호화된 비밀을 위해 SOPS 또는 HashiCorp Vault 사용.
핵심 요약:
- 강점: 자동화, 선언적 워크플로우, CI/CD 파이프라인 통합.
- 약점: 보안 복잡성, 감사 오버헤드, 제한된 UI.
- 최적 대상: CLI 기반 자동화, Helm/Kustomize, 멀티 클러스터 관리를 우선시하는 팀.
Flux 는 인프라 및 애플리케이션 관리가 완전히 자동화되고 안전하며 확장 가능한 GitOps 의 미래와 일치합니다. CNCF 하에서의 지속적인 발전은 DevOps 생태계에서의 관련성을 보장합니다.
Jenkins X 와 GitOps
Jenkins X 는 Kubernetes 에서 애플리케이션 배포를 자동화하기 위해 설계된 클라우드 네이티브 오픈 소스 CI/CD 플랫폼입니다. 이는 Git 저장소를 인프라 및 애플리케이션 구성의 단일 진실 공급원으로 강조하는 GitOps 원칙과 일치합니다. Kubernetes 와 통합함으로써 Jenkins X 는 팀이 Git 기반 워크플로우를 통해 CI/CD 파이프라인, 배포 및 환경 승진을 관리할 수 있게 합니다. 이 접근 방식은 버전 관리, 감사 가능성, 협업을 보장하여 현대적인 DevOps 실무에 강력한 도구가 됩니다.
Jenkins X: 주요 기능 및 아키텍처 Jenkins X 는 Kubernetes 를 기반으로 구축되며 Tekton, Helm, FluxCD 와 통합하여 포괄적인 CI/CD 솔루션을 제공합니다. 주요 기능은 다음과 같습니다:
- GitOps 워크플로우: 파이프라인, 인프라, 배포 관리를 위해 Git 저장소 사용.
- 환경 승진: 사전 정의된 전략을 통해 환경 (dev, staging, production) 간 배포 자동화.
- 코드로서의 파이프라인: 재현성을 위해 YAML 파일 (예:
jenkins-x.yml) 을 사용하여 CI/CD 파이프라인 구성. - 가시성: 실시간 모니터링 및 로깅을 위해 Prometheus 및 Grafana 통합.
아키텍처에는 다음이 포함됩니다:
- Jenkins X CLI: 클러스터 생성 (
jx create cluster) 및 프로젝트 설정 (jx create quickstart) 을 위해 사용. - GitOps 저장소: 파이프라인 정의, Helm 차트, Kubernetes 매니페스트 저장.
- Kubernetes 통합: Helm 차트를 사용하여 애플리케이션 배포 및 FluxCD 를 통한 환경 관리.
예시:
pipelineConfig:
pipelines:
release:
pipeline:
stages:
- name: Deploy
steps:
- script: kubectl apply -f kubernetes-manifests/
Jenkins X 는 Kubernetes 에서 클라우드 네이티브 CI/CD 워크플로우를 간소화하는 포괄적인 GitOps 도구입니다. GitOps 원칙과 일치하여 감사 가능성, 자동화, 협업을 보장하므로 DevOps 및 마이크로 서비스를 채택하는 조직에 이상적입니다. 그러나 의견이 담긴 워크플로우는 고급 사용 사례를 위해 커스터마이징이 필요할 수 있습니다. GitOps 가 계속 발전함에 따라 Jenkins X 는 새로운 도구 (예: Kustomize, Lens) 와 통합하고 엔터프라이즈 환경으로 확장하여 현대적인 DevOps 실무에서 중요한 역할을 확고히 할 것입니다.
최종 통찰: Jenkins X 는 전통적인 CI/CD 와 GitOps 사이의 격차를 해소하여 Kubernetes 기반 워크플로우에서 자동화, 가시성, 협업을 원하는 팀을 위한 일관된 솔루션을 제공합니다.
Weave GitOps
Weave GitOps 는 Weaveworks 에서 개발한 오픈 소스 클라우드 네이티브 도구로, Kubernetes 에서 애플리케이션 배포 및 관리를 자동화하도록 설계되었습니다. 이 도구는 Git 에 정의된 원하는 상태와 프로덕션 환경을 정렬하여 연속 제공 (CD) 을 간소화하고 일관성을 보장하며 수동 개입을 줄입니다. Weave GitOps 는 Kubernetes, CI/CD 파이프라인, 인프라 코드 (IaC) 도구와 원활하게 통합되어 GitOps 관행을 채택하는 팀에게 인기 있는 선택입니다.
도구의 아키텍처 및 구성 요소 Weave GitOps 는 Kubernetes 컨트롤러 및 커스텀 리소스 (CRD) 를 활용하여 GitOps 자동화를 위한 Kubernetes 네이티브 도구로 구축되었습니다. 주요 구성 요소는 다음과 같습니다:
- GitOps 오퍼레이터: Git 저장소의 변경 사항을 감시하고 클러스터에 업데이트를 적용하는 Kubernetes 오퍼레이터.
- 조정 엔진: 실제 클러스터 상태와 Git 의 원하는 상태를 비교하여 정렬을 위한 업데이트를 트리거.
- UI 및 CLI: 배포 시각화를 위한 웹 기반 대시보드 및 워크플로우 관리를 위한 CLI (
gitops) 제공. - 통합 레이어: 엔드 투 엔드 자동화를 위해 Flux, Helm, Kustomize, CI/CD 플랫폼과 같은 외부 도구와 연결.
이 아키텍처는 확장성, 보안 및 확장성을 강조하여 소규모 팀과 엔터프라이즈 환경 모두에 적합합니다.
주요 사용 사례 및 시나리오 Weave GitOps 는 다음과 같은 사용 사례에 이상적입니다:
- 지속적 제공 (CD): 애플리케이션 배포 파이프라인 자동화로 신속하고 안정적인 업데이트 보장.
- 멀티 클러스터 및 멀티 클라우드 환경: 하이브리드 및 멀티 클라우드 Kubernetes 클러스터 간 배포 관리.
- 엔터프라이즈 인프라 자동화: 정책 코드를 통한 보안 정책, 규정 준수, 거버넌스 강제.
- 개발자 셀프 서비스 플랫폼: 깊은 Kubernetes 전문 지식이 필요 없이 개발자가 인프라 및 애플리케이션을 관리하도록 지원.
- 가시성 및 문제 해결: 애플리케이션 상태 및 조정 프로세스에 대한 실시간 통찰력 제공.
설치
- Helm: Weave GitOps Helm 차트를 사용하여 Kubernetes 에서 도구 배포.
- CLI:
curl또는 Homebrew (brew install weaveworks/tap/gitops) 를 통해 설치. - 부트스트랩:
gitops bootstrap을 실행하여 플랫폼 초기화.
구성
- Git 저장소에 애플리케이션 매니페스트, Helm 차트 또는 Kustomize 구성 정의.
gitops apply를 사용하여 클러스터 상태를 Git 과 동기화.- Kubernetes Service 및 LoadBalancer(예: AWS EKS) 를 통해 UI 노출.
도전 과제 및 제한 사항
- 학습 곡선: Kubernetes, GitOps, IaC 도구에 대한 친숙함이 필요합니다.
- 제한된 커스터마이징: Flux 보다 모듈화가 덜 되어 있어 고급 사용자에게 단점이 될 수 있음.
- 작은 커뮤니티: Argo CD 또는 Flux 에 비해 생태계가 작음.
- 상업적 기능: 엔터프라이즈 기능 (예: 고급 보안, 멀티 클라우드 지원) 은 유료 라이선스가 필요함.
Weave GitOps 는 GitOps 를 통한 Kubernetes 배포 자동화를 위한 강력하고 엔터프라이즈 준비된 도구입니다. 보안, 멀티 클러스터 관리, CI/CD 파이프라인 통합에서 뛰어날 정도로 규모가 있는 조직이 GitOps 를 채택하는 강력한 선택입니다. Flux 와 Argo CD 와의 경쟁에도 불구하고 포괄적인 기능 세트, 엔터프라이즈급 기능, 상업적 지원은 GitOps 생태계의 선도적 솔루션으로 위치시킵니다. 팀은 Weave GitOps, Flux 또는 Argo CD 중 선택할 때 특정 요구 사항과 워크플로우를 평가해야 합니다.
GitOps 대안
| 접근 방식 | 설명 |
|---|---|
| CI/CD 파이프라인 | Git 을 진실 공급원 없이 푸시 시 빌드/배포를 위해 Jenkins, GitHub Actions, GitLab CI 사용. |
| 수동 운영 (Manual Ops) | 전통적 접근 방식: Ops 엔지니어가 수동으로 인프라 구성 또는 업데이트. |
| 인프라 코드 (IaC) | Git 워크플로우를 반드시 사용하지 않고 Terraform, Pulumi, Ansible 도구 사용. |
| 서비스형 플랫폼 (PaaS) | 배포 복잡성을 추상화 (예: Heroku, Google App Engine). |
유용한 링크
- https://github.com/argoproj/argo-cd
- https://argo-cd.readthedocs.io/en/stable/
- https://argoproj.github.io/cd/
- https://fluxcd.io/
- https://github.com/fluxcd/flux2
- https://jenkins-x.io/
- https://github.com/weaveworks/weave-gitops
- https://docs.gitops.weaveworks.org/