Gitlab+ArgoCD webhook配置自动触发
一 背景
Argo CD 每三分钟会轮询一次 Git 存储库,以检测清单的更改。为了消除这种轮询延迟,可以将 API 服务器配置为接收 webhook 事件的方式,这样就能实时获取到 Git 存储库中的变化了。 Argo CD 支持来自 GitHub、GitLab、Bitbucket、Bitbucket Server 和 Gogs 的 Git webhook 通知。下面以 GitLab 为例配置 webhook。
二 原理
通过Git仓库的tag/brach实践,Git仓库调用配置的ArgoCD webhook地址,实现自动触发,
实现目标:
- 消除轮询延迟:Argo CD 默认通过轮询 Git 存储库来检测清单的更改,但这可能会导致一些延迟。通过配置 webhook,Git 存储库可以直接通知 Argo CD 有关代码变更,从而消除轮询延迟,实现即时获取变更的效果。
- 实时获取代码变更:通过 webhook,Git 存储库将即时发送事件通知给 Argo CD 的 API 服务器,包含了代码变更的详细信息。这使得 Argo CD 能够立即获知代码的改变,而无需等待下一次轮询周期。
- 支持多种 Git 存储库:Argo CD 支持来自 GitHub、GitLab、Bitbucket、Bitbucket Server 和 Gogs 的 Git webhook 通知。这意味着您可以在这些平台上配置 webhook,并与 Argo CD 集成,无论您选择的是哪种 Git 存储库,都能够实现即时获取代码变更的目的。
三 实战
3.1 获取Argocd webhook地址
在 GitLab 中配置的 URL 应该使用您的 Argo CD 实例的 /api/webhook
接口(例如 argocd.xxx.com/api/webhook… Secret Token 是可选的,建议添加上,可输入任意值。在下一步配置 webhook 时将使用此值。
https://124.156.169.236:8080/api/webhook
3.2 Git源码仓库配置
Gitlab 配置webhook 的Merge request events事件触发
secret token 可选,但建议填写:argocdgitlab123
3.3 使用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: argocdgitlab123
3.4 创建ArgoCD应用测试
- 创建argocd应用
- 并快速提交代码触发测试
可以查看argocd 应用不用等待3分钟,直接触发更新。
四 注意事项
- 由于是Git仓库主动去调用ArgoCD地址,需要Git仓库能与ArgoCD地址能正常通讯。
- 如果Git链接不到ArgoCD,可以配置ArgoCD 通过pull方式,三分钟触发,或手动触发拉取配置,进行部署。
五 总结
为了实时获取Git存储库中的变化,可以配置GitLab与Argo CD的Webhook。通过配置Webhook,当Git存储库中的清单发生更改时,GitLab会向Argo CD的API服务器发送通知,从而消除了轮询延迟。配置的步骤包括在GitLab中创建项目并关联存储库,以及获取Argo CD的API服务器URL用于接收来自GitLab的Webhook事件。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)