[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 대시보드를 볼 수 있다.