ㅡ.ㅡ

[Gitlab] CD/Argocd 본문

WorkFlow

[Gitlab] CD/Argocd

ekwkqk12 2021. 10. 1. 00:03

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