何の話?
DatadogのSyhtheticsテスト(APIテスト、ブラウザテスト)をCIやCD内で自動実行したいってことがあると思います。
ArgoCDでアプリケーションをデプロイ後に自動実行する方法をまとめておきます。
Syntheticsテストの自動実行
DatadogのSyntheticsテストは、CI/CDの中で自動実行することができます。
curlでAPI叩くだけで実行できます。
実行に必要な情報は
- API Key
- APP Key
- 実施したいSyntheticsテストのPublic ID
になります。
Public IDはDatadogの画面の ↓の部分(XXX-XXX-XXX)で分かります。
API Key、APP Keyは別途作成してください。
ArgoCDでの自動実行
ArgoCDではResource Hooksという機能があり、Sync実行前や後にKubernetesのJobを実行させる機能があります。
https://argo-cd.readthedocs.io/en/stable/user-guide/resource_hooks/
Syntheticsテストを実行するJobを作成し、Sync成功後に実行させればデプロイ完了後にSyntheticsテストを自動実行できます。
やり方は簡単で、Jobのannotationに下記を追加して、
metadata:
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
自動実行させたいArgoCD Application内にこのJobを置くだけです。
Jobのコンテナイメージはビルドしておいてもいいですし、これくらいならcurlのイメージ使ってcommandで実行してもいいかと思います。
curlのイメージ使ったときのJobはこんな感じになります。(Secretは別途作成してください)
apiVersion: batch/v1
kind: Job
metadata:
name: datadog-browser-test
annotations:
argocd.argoproj.io/hook: PostSync
argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
template:
spec:
containers:
- name: curl
image: curlimages/curl
env:
- name: api_key
valueFrom:
secretKeyRef:
name: dd-test
key: api_key
- name: app_key
valueFrom:
secretKeyRef:
name: dd-test
key: app_key
- name: public_id
valueFrom:
secretKeyRef:
name: dd-test
key: public_id
command:
- curl
- -X
- POST
- -H
- 'Content-Type: application/json'
- -H
- "DD-API-KEY: $(api_key)"
- -H
- "DD-APPLICATION-KEY: $(app_key)"
- -d
- "{\"tests\": [{\"public_id\": \"$(public_id)\", \"locations\": [\"aws:ap-northeast-1\"]}]}"
- "https://api.datadoghq.com/api/v1/synthetics/tests/trigger/ci"
restartPolicy: Never
backoffLimit: 2
ArgoCDはテストをキックするだけで、実行結果はわからないので、Datadog上で確認するとか、アラートを飛ばすとかしてください。