为什么需要ngrok
我们刚学了argocd的安装和部署应用,但是argocd什么时候部署部署我们的应用,就取决于repo的sync机制。我们采用以下cmd设置为autosync。
argocd app list # to get our app
argocd app set argocd/tekton-learning-nginx --sync-policy automated # argocd/tekton-learning-nginx is my app_name
这样配置的话,argocd默认每三分钟就去检测,如果有更新就自动sync。
而通常我们希望,可以定制什么时候sync,也就是可以通过github的webhook,去决定什么时候触发sync。
本地argocd没有外网的ip,无法设置为webhook,ngrok就为了解决此问题。
安装和使用ngrok
注册用户,并登陆,就可以看到installation and setup。就可以轻松安装了。我的操作系统是macos。所以我用到的指令是:
sudo unzip ~/Downloads/ngrok-v3-stable-darwin.zip -d /usr/local/bin
ngrok config add-authtoken **** # *** is my token key. You just need to copy yours
ngrok http https://localhost:8000
这里需要说明的是,https://localhost:8000是我的argocd local url。我可以通过web browser访问。这里你需要换成你的argocd local url。
设置github repo webhook
找到your_external_argocd_url
查看ngrok http your_argocd_local_url 的输出,我的输出如下:
Session Status online
Account my_account (Plan: Free)
Version 3.15.1
Region Asia Pacific (ap)
Latency 74ms
Web Interface http://127.0.0.1:4040
Forwarding https://6d91-111-201-230-65.ngrok-free.app -> https://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 18 0 0.00 0.00 0.79 91.04 HTTP Requests
-------------
这里,Forwarding后面的https://...app就是ngrok为我们local argocd提供的外网入口,我们称它为your_external_argocd_url。
我们把他粘贴到我们的浏览器中,确保我们可以看到argocd的dashboard。
添加webhook
打开你的github repo的配置页,将webbook设置为your_external_argocd_url/api/webhook, content_type设置为application/json,点击保存即可。
当你保存后,这个hook前端回显示一个内部是感叹号的红色三角,其表示还未曾触发过该hook。
修改代码并查看hook
修改代码并提交,这时候回到github webhook界面,看hook是否能正常工作。正常工作的话,会出现绿色对号。
回到argocd dashboard,也可以看到sync已经完成并且部署最新的代码。
查看ngrok输出
Session Status online
Account wlin@redhat.com (Plan: Free)
Version 3.15.1
Region Asia Pacific (ap)
Latency 73ms
Web Interface http://127.0.0.1:4040
Forwarding https://6d91-111-201-230-65.ngrok-free.app -> https://localhost:8000 Connections ttl opn rt1 rt5 p50 p90 18 0 0.00 0.00 0.79 91.04 HTTP Requests
------------- 18:52:31.916 CST POST /api/webhook 200 OK
18:40:54.285 CST POST /api/webhook 200 OK
18:04:59.508 CST POST /api/webhook 200 OK
我们同样可以看到api/webhook 200的成功的信息。