CNB刷新EO缓存和插件化
CNB刷新EO缓存和插件化
使用了EO以后,写文章或者博客UI更新以后,刷新缓存不是那么方便了。我看CNB只有实现CDN刷新的插件。就想着能不能提交变更以后自动刷新,问了LiuShen,才想起肯定有API能够实现刷新。于是就去翻了翻官方文档,果不其然,找了好一些方式可以去实现EO的缓存刷新,这下子整个更新就方便多。其中找到了两个还算比较简单的方法,一是使用腾讯云自带的TCCLI,二是自己通过API编写刷新脚本。
一、使用ssh+shell脚本
这个方法就是在提交代码后,通过CNB的流水线去远程登录服务器,并在服务器里执行刷新EdgeOne的shell脚本,来完成缓存刷新的。
1、获取腾讯云的API密钥
1 | https://console.cloud.tencent.com/cam/capi |
2、获取shell脚本信息
当然linux系统自带Python的解析器,也可以编写Python的脚本,这里就是用shell脚本。这里也不编写了,因为不是太熟悉🤣直接去直接去API Explorer 找就行了,当然这里还有SDK的示例代码,需要的可以看看。
在API Explorer中找到【边缘安全加速平台TEO】。在【示例代码】->【HTTP Request】中找到shell拷贝就行了。,shell获取步骤如下:
3、创建刷新EO的shell脚本
把上面获取的脚本放在服务器的指定目录下,例如/root/bash/目录下创建flush.sh。脚本内容就是上面的获取到的。
注意:需要替换
secret_id
和secret_key
。还需要替换payload请求体的内容如下:payload=”{"ZoneId":"zone-xxxxxxxxxxx”,"Type":"purge_host","Method":"invalidate","Targets":["www.hudi.space\"]}“
ZoneId: 站点ID。在EdgeOne的控制台可以看到。
Type:节点缓存清除类型,purge_host 表示刷新整个域名。
Method:节点缓存清除方法,invalidate仅刷新目录下产生了更新的资源。
Targets:需清除缓存的资源列表。
更多的配置选项看这里:https://cloud.tencent.com/document/product/1552/80703
4、创建cnb.yml流水线。
这里使用到了cnb的ssh插件。插件地址,点这里。需要了解详细配置的话可以看看
1 | master: #分支名 |
完成上述✅提交代码到cnb仓库,就可以自动实现EdgeOne缓存的刷新了。
二、腾讯云命令行工具
TCCLI:通过腾讯云命令行工具,您可以快速轻松的调用腾讯云 API来管理您的腾讯云资源。
官方文档:https://cloud.tencent.com/document/product/440
同样这个也是CNB的一个插件,插件地址,点这里 。
1、确定刷新EO的TCCLI代码
由于该插件只给出了cvm创建实例
和tsf部署容器应用
两个案例,没有我们需要的TEO的案例,所以我们同样去API Explorer 找。找到CLI代码如下:
1 | tccli teo CreatePurgeTask --cli-unfold-argument |
详细的子命令如下:
1 | tccli teo CreatePurgeTask --cli-unfold-argument --ZoneId "zone-XXXXX" --Type "purge_host" --Method "invalidate" --Targets "www.hudi.space" |
可以通过Python去安装tccli,但是注意Python的版本需要大于2.7。
详细tccli安装步骤看一下这里:https://github.com/TencentCloud/tencentcloud-cli。
2、构建CNB流水线
1 | master: |
同样需要获取腾讯云的API密钥,并把密钥保存在密钥仓库中这里省略。
使用tccli去刷新EO的缓存只需要简单的两步,是不是很简单。
通过脚本或者是命令行刷新缓存成功后会有如下反馈:
三、插件化
有的时候我们会觉得直接在服务器使用bash脚本不好,因为它直接把腾讯云的API密钥暴露在外面了。所以可以将我们写的脚本直接插件化,在通过CNB的密钥仓库去保存密钥,传值到插件中可能更加稳妥一些。
在云原生构建中,一个插件就是一个 Docker
镜像。 下面以shell脚本制作插件为例。
1、创建空的CNB仓库
用来构建流水线和保存docker镜像的制品。
2、容器传参
首先要了解的是在cnb.yml流水线中,所设置的参数需要设置在settings下,如下
1 | main: |
这些入参将会以环境变量的形式传给容器,不同的是,他们将会变成大写且辅以
PLUGIN_
前缀。SecretId和SecretKey参数将转化为如下环境变量:PLUGIN_SECRETID和PLUGIN_SECRETKEY。
3、编写容器的入口文件
这里的脚本名字为entrypoint.sh,或者是自己定义,脚本信息如下这里:https://cnb.cool/hudi22/teo_refresh/-/blob/main/entrypoint.sh
注意修改payload里面的ZoneId值,和其他请求体信息。
4、编写Dockerfile文件如下
1 | FROM ubuntu:24.04 |
5、构建docker镜像
1 | docker build -t docker.cnb.cool/hudi22/teo_refresh/refresh:1.0 . |
docker制品:docker.cnb.cool/hudi22/teo_refresh/refresh:1.0 配置cnb.yml以后可以直接使用。
6、引用插件
只要在cnb.yml流水线中引用打包的镜像就行了,就能实现通过自定义插件去刷新EO缓存了。使用流水线刷新EO缓存的时候注意查看构建日志,看工作流是否成功。
当然还可以编写其他编程语言的脚本,可以看API Explorer 这个。
四、总结
我个人比较喜欢tccli命令刷新缓存因为直接配置流水线使用插件就好了🤣,其他的配置感觉过于繁琐了。自从用了腾讯云的产品以后感觉自己的站点访问速度快了好多,更新也方便了一些。最近也是在看这些文档、插件、api的使用,可能还会写一些相关的文章。