# 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"