일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- helm
- Prometheus
- 웹 취약점
- Service Mesh
- Crawling
- Jenkins
- sonarqube
- opentelemetry
- GitLab
- ECR
- gitlab ci
- docker
- CD
- CI
- argocd
- Monitoring
- 모의해킹
- gitlab cd
- 웹 해킹
- 스크레이핑
- linkerd
- eks
- 크롤링
- scraping
- DevOps
- Resource
- Grafana
- Kubernetes
- deploy
- CI/CD
- Today
- Total
ㅡ.ㅡ
[Gitlab] CD/Argocd 본문
Gitlab
app/springboot
git 이미지를 통해 helm 리소스가 저장된 프로젝트를 클론하여 CI시 변경된 이미지 태그값과 커밋 메시지를 app이있는 저장소의 COMMIT_SHORT_SHA값으로 입력하여 변경된 리소스의 추적성을 확보할 수 있다.
argocd쪽에서는 해당 프로젝트를 주기적으로 확인하다가 자동 배포를 사용할경우 변경된 리소스를 감지하여 배포하게 된다.
helm-value-update:
stage: deploy
image:
entrypoint: ['']
name: alpine/git:latest
script:
- mkdir /helm-repo; cd /helm-repo
- git clone http://아이디:비밀번호@프로젝트주소.git
- git config --global user.email "이메일"
- git config --global user.name "이름"
- cd 프로젝트; sh /helm-repo/프로젝트/tagging.sh
- git add .; git commit -m "Ref $CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME@$CI_COMMIT_SHORT_SHA"; git push
when: manual
only:
- 브랜치
tags:
- 러너태그
helm/springboot
helm Chart 작성 방법은 DEVOCEAN 블로그에 정리를 정말 잘해주셨다 참고하면 좋을듯!
업데이트된 태그(COMMIT SHORT SHA)를 변경하는 명령어를 app/springboot pipeline 작업에서 실행시 에러가 발생하여.. 변경하는 스크립트 파일을 실행하는것으로 대체했다.
# tagging.sh
sed -i "s|tag: .*|tag: $CI_COMMIT_SHORT_SHA|" /helm-repo/프로젝트/values.yaml
ArgoCD
Helm저장소(helm/springboot) 추가
SYNC POLICY > 배포 방식 설정
Manual(수동)로 설정 시 APP의 SYNC버튼을 수동으로 눌러서 배포를 진행해야한다.
프로젝트 전체(/)를 대상으로 잡으려면 path .을 입력
)
Argocd canary
기존 Deployment를 Rollout으로 변경
spec.strategy.canary를 추가 setWeight 값으로 새로 생성되는 버전의 앱으로 트래픽을 보내고 pause.duration 값만큼 그상태 값을 유지한다, pause: {} 값은 해당 상태로 정지시키는거다
다음 단계로 진행시켜려할경우 명령어(kubectl argo rollouts promote ROLLOUT_NAME -n NAMESPACE )를 입력하여 진행해야한다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: {{ .Values.app_name }}-rollout
spec:
selector:
matchLabels:
app: {{ .Values.app_name }}
replicas: {{ .Values.rs_count }}
revisionHistoryLimit: 3
template:
metadata:
labels:
app: {{ .Values.app_name }}
spec:
containers:
- name: {{ .Values.app_name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
ports:
- containerPort: 8080
protocol: TCP
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 8 }}
{{- end }}
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: alpha.eksctl.io/nodegroup-name
operator: In
values:
- {{ .Values.label_value }}
strategy:
canary:
maxSurge: "25%"
maxUnavailable: 0
steps:
- setWeight: 20
- pause:
duration: "30s"
- setWeight: 50
- pause:
duration: "30s"
- setWeight: 80
- pause: {}
Argocd rollouts dashboard
kubectl argo rollouts dashboard -n NAMESPACE 명령어를 통해 kubectl를 입력한 환경의 3100번 포트로 접속하여 rollouts 대시보드를 볼 수 있다.
'WorkFlow' 카테고리의 다른 글
[Jenkins] Docker Image Tagging (0) | 2021.10.11 |
---|---|
[Jenkins] CI/ECR (0) | 2021.10.09 |
[Argocd] Argocd, Argo-Rollouts (0) | 2021.09.29 |
[Jenkins] Gitlab Repo 연동 (0) | 2021.09.28 |
[Jenkins] Jenkins (0) | 2021.09.26 |