e2e test dependency(sub) chart

# argo-cd 에서 각 컴포넌트들은 배포(싱크완료) 후 e2e test 가 동작한다.
# 각 컴포넌트별로 e2e test template 를 관리하면 버전등의 관리가 용이하지 않다.
# 그래서 e2e test 를 별도 차트로 구성해 여러 컴포넌트들에서 가져가 사용할 수 있도록 해보자.
# 우선 e2e-test 이름으로 다음과 같이 일반적인 차트를 구성한다.
e2e-test
├── Chart.yaml
├── README.md
├── templates
│   ├── _helpers.tpl
│   ├── e2e-test-job.yaml
│   └── e2e-test-secret.yaml
└── values.yaml

# values.yaml 에 필요한 변수를 설정한다.
enabled: true  # e2e test 사용 여부
job:
  name: "default"
  targetURL: "http://ysoftman.test1.abc"
  # 참고 아래 변수는 e2e 결과 txt파일을 github 저장소에 전송하기 위함이다.
  reportRepository: "https://github.com/ysoftman/e2e-test-report"
  reportFileName: "default-e2e-result.txt"

# e2e-test-job.yaml 은 다음과 같이 PostSync 로 싱크 완료후 job 이 시작될 수 있도록 한다.
apiVersion: batch/v1
kind: Job
metadata:
  generateName: {{ $name }}-e2e-test-
  annotations:
    argocd.argoproj.io/hook: PostSync
    argocd.argoproj.io/compare-options: IgnoreExtraneous
  labels:
    app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
spec:
  ttlSecondsAfterFinished: 600
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 3
  template:
    spec:
      containers:
... 생략 ...

# 템플릿이 제대로 렌더링 되는지 확인해보자.
helm template .

# 이제 사용하는 컴포넌트의 Chart.yaml 에 dependency 를 설정한다.
# 만약 위 e2e 차트를 github page 나 chartmuseum 로 서빙할 수 있다면 http 로 명시할 수 있다.
# 하지만 다음과 같이 e2e-test 를 같은 저장소에 두면 e2e-test 가 변경될때마다 tgz 를 생성해줘야 한다.
# repository 는 
apiVersion: v2
name: ysoftman-server
description: ysoftman test Server
type: application
version: 0.1.0
appVersion: "0.1.0"
dependencies:
  - name: e2e-test
    version: "1.0.0"
    repository: "file://../e2e-test"

# Chart.yaml 경로에서 다음 명령을 수행하면 ./charts/e2e-test-1.0.0.tgz 와 ./Chart.lock 생성된다.
helm dependency update 

# 다음과 같은 구조가되고, ysoftman-server 가 argocd 로 배포(싱크완료)되면 sub chart 인 e2e-test-1.0.0 이 동작한다.
ysoftman-server
├── Chart.lock
├── Chart.yaml
├── README.md
├── charts
│   └── e2e-test-1.0.0.tgz
├── templates
│   ├── _helper.tpl
│   ├── configmap.yaml
│   ├── deployment.yaml
│   ├── ingress.yaml
│   ├── podmonitor.yaml
│   ├── secret.yaml
│   ├── service.yaml
│   └── servicemonitor.yaml
└── values-dev.yaml

# 참고로 values-dev 에서 sub chart 의 변수를 오버라이딩한다면 다음과 같이 sub chart 이름을 최상위로 명시해야한다.
e2e-test:
  enabled: true
  job:
    name: "ysoftman-server"
    targetURL: "http://ysoftman.test2.abc"
    reportRepository: "https://github.com/ysoftman/e2e-test-report"
    reportFileName: "ysoftman-server-e2e-result.txt"

comments:

댓글 쓰기