Argo CD 每三分钟会轮询一次 Git 存储库,以检测清单的更改。为了消除这种轮询延迟,可以将 API 服务器配置为接收 webhook 事件的方式,这样就能实时获取到 Git 存储库中的变化了。 Argo CD 支持来自 GitHub、GitLab、Bitbucket、Bitbucket Server 和 Gogs 的 Git webhook 通知。下面以 GitLab 为例配置 webhook。

在 GitLab 中创建 WebHook

进入到 GitLab 项目仓库(这里为Helm Chart 仓库)中配置 WebHook:

gitlab-webhook.png

在 GitLab 中配置的 URL 应该使用您的 Argo CD 实例的 /api/webhook 接口(例如 https://argocd.xxx.com/api/webhook)。下面的 Secret Token 是可选的,建议添加上,可输入任意值。在下一步配置 webhook 时将使用此值。

注意:如果 Argo CD 使用的是自签名的 https 证书,则需要在下方去掉 启用SSL验证

使用 WebHook Secret 配置 Argo CD

在 kubernetes secret argocd-secret 中添加上面配置的 Secret Token:

$ kubectl edit secret argocd-secret -n argocd

TIP:为了方便输入secret,kubernetes支持在stringData字段中输入secret,这样就省去了base64编码后复制到data字段的麻烦。只需将步骤 1 中创建的共享 webhook 秘密复制到 stringData 字段下相应的 GitLab 键:

apiVersion: v1
kind: Secret
metadata:
name: argocd-secret
namespace: argocd
type: Opaque
data:
...

stringData:
# gitlab webhook secret
webhook.gitlab.secret: abcdefghijk

保存后,更改会自动生效。

我们可以在 GitLab 这边测试配置的 WebHook,查看 Argo CD 的 API 服务 Pod 日志,正常就可以收到 Push 事件了:

$ kubectl logs -f argocd-server-86d75f9788-dxhwh -nargocd
...
time="2023-02-08T10:22:32Z" level=info msg="Received push event repo: http://gitlab.xxx.com/devops-demo/helm-chart-ucode, revision: master, touchedHead: true"
time="2023-02-08T10:22:32Z" level=info msg="Requested app 'ucode-demo' refresh"

参考链接: