我们最近的一个版本出现了问题,不得不手动回滚所有服务。这样做时,我们必须禁用“自动同步”功能。恢复有问题的 PR 后,我们忘记再次启用自动同步,应用程序一天不同步。 有没有一种方法可以启用触发器或警报,在每个持续时间(例如一小时)后触发,并在 slack 上通知我们自动同步功能已禁用?
我们还希望在每次 PR 合并后启用通知,例如“由于自动同步被禁用,无法发布提交。”。
ArgoCD API 有一个
api/v1/applications/{app_name}
端点。您可以从那里获取应用程序的设置。然后,您需要检查 spec.syncPolicy
对象是否有名为 automated
的键。这是用 bash 和 jq 编写的示例:
#!/usr/bin/env bash
set -e
USERNAME=admin
PASSWORD=yourpassword
ARGOCD_SERVER=https://yourserver
APP_NAME=yourapp
ARGOCD_TOKEN=$(curl -s $ARGOCD_SERVER/api/v1/session -d '{"username":"admin","password":"'$PASSWORD'"}' | jq -r ".token")
response=$(curl -s "$ARGOCD_SERVER/api/v1/applications/$APP_NAME" -H "Authorization: Bearer $ARGOCD_TOKEN")
echo $response | jq '.spec.syncPolicy | has("automated")'
使用 ArgoCD 通知控制器可以实现类似以下内容:
template.auto-sync-disabled: |
message: |
Application <{{.context.argocdUrl}}/applications/{{.app.metadata.name}}|`{{.app.metadata.name}}`> auto sync was _disabled_.
trigger.auto-sync-disabled: |
- description: Application auto sync is disabled.
send:
- auto-sync-disabled
when: app.status.sync.status == 'Synced' and app.spec.syncPolicy.automated == null
您还可以将以下条件添加到触发器中:
oncePer: app.status.operationState.syncResult.revision