CNB刷新EO缓存和插件化

CNB刷新EO缓存和插件化

​ 使用了EO以后,写文章或者博客UI更新以后,刷新缓存不是那么方便了。我看CNB只有实现CDN刷新的插件。就想着能不能提交变更以后自动刷新,问了LiuShen,才想起肯定有API能够实现刷新。于是就去翻了翻官方文档,果不其然,找了好一些方式可以去实现EO的缓存刷新,这下子整个更新就方便多。其中找到了两个还算比较简单的方法,一是使用腾讯云自带的TCCLI,二是自己通过API编写刷新脚本。

一、使用ssh+shell脚本

​ 这个方法就是在提交代码后,通过CNB的流水线去远程登录服务器,并在服务器里执行刷新EdgeOne的shell脚本,来完成缓存刷新的。

1、获取腾讯云的API密钥
复制代码
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_idsecret_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插件。插件地址,点这里。需要了解详细配置的话可以看看

复制代码
master: #分支名
  push:
    - stages:
        - name: 刷新缓存的任务
          image: tencentcom/ssh
          settings:
            host:
              - x.x.x.x #服务器的IP地址
            username: #目标主机用户名
            password: #木边主机密码
            port: 22
            script:
              - sh /root/bash/flush.sh #需要执行的脚本

完成上述✅提交代码到cnb仓库,就可以自动实现EdgeOne缓存的刷新了。

二、腾讯云命令行工具

TCCLI:通过腾讯云命令行工具,您可以快速轻松的调用腾讯云 API来管理您的腾讯云资源。

官方文档:https://cloud.tencent.com/document/product/440

同样这个也是CNB的一个插件,插件地址,点这里

1、确定刷新EO的TCCLI代码

由于该插件只给出了cvm创建实例tsf部署容器应用两个案例,没有我们需要的TEO的案例,所以我们同样去API Explorer 找。找到CLI代码如下:

复制代码
tccli teo CreatePurgeTask --cli-unfold-argument

详细的子命令如下:

shell 复制代码
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流水线
复制代码
master:
  push:
    # 引入 env.yml,导入其声明的环境变量
    - imports: https://xxx/env.yml #引用密钥仓库的信息。
      stages:
        - name: 刷新EO
          image: tencentcom/tencentcloud-cli
          script: |
            tccli configure set secretId $T_SECRET_ID
            tccli configure set secretKey $T_SECRET_KEY
            tccli teo CreatePurgeTask  --cli-unfold-argument --ZoneId "zone-XXXXX" --Type "purge_host" --Method "invalidate" --Targets "www.hudi.space"

同样需要获取腾讯云的API密钥,并把密钥保存在密钥仓库中这里省略。

使用tccli去刷新EO的缓存只需要简单的两步,是不是很简单。

通过脚本或者是命令行刷新缓存成功后会有如下反馈:

三、插件化

有的时候我们会觉得直接在服务器使用bash脚本不好,因为它直接把腾讯云的API密钥暴露在外面了。所以可以将我们写的脚本直接插件化,在通过CNB的密钥仓库去保存密钥,传值到插件中可能更加稳妥一些。

在云原生构建中,一个插件就是一个 Docker 镜像。 下面以shell脚本制作插件为例。

1、创建空的CNB仓库

用来构建流水线和保存docker镜像的制品。

2、容器传参

首先要了解的是在cnb.yml流水线中,所设置的参数需要设置在settings下,如下

yaml 复制代码
main:
  push:
    - stages:
        - name: CNB自定义插件刷新缓存
          image: docker.cnb.cool/hudi22/teo_refresh/refresh:1.0
          imports: https://cnb.cool/hudi22/hudikey/-/blob/main/cdn_env.yml
          settings:
            SecretId: $SecretId
            SecretKey: $SecretKey

这些入参将会以环境变量的形式传给容器,不同的是,他们将会变成大写且辅以 PLUGIN_ 前缀。

SecretId和SecretKey参数将转化为如下环境变量:PLUGIN_SECRETID和PLUGIN_SECRETKEY。

3、编写容器的入口文件

这里的脚本名字为entrypoint.sh,或者是自己定义,脚本信息如下这里:https://cnb.cool/hudi22/teo_refresh/-/blob/main/entrypoint.sh

注意修改payload里面的ZoneId值,和其他请求体信息。

4、编写Dockerfile文件如下
dockerfile 复制代码
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y openssl curl
ADD entrypoint.sh /bin/
RUN chmod +x /bin/entrypoint.sh
ENTRYPOINT /bin/entrypoint.sh
5、构建docker镜像
shell 复制代码
docker build -t docker.cnb.cool/hudi22/teo_refresh/refresh:1.0 .
docker push 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的使用,可能还会写一些相关的文章。

相关推荐
吳所畏惧3 小时前
宝塔面板Redis密码修改指南:SSH命令修改 vs 面板UI界面修改,哪个更靠谱?
运维·服务器·数据库·redis·缓存·ssh
Y3815326629 小时前
SERP API + Redis 缓存层:4 种方案对比与选型
数据库·redis·缓存
海兰11 小时前
【高速缓存】RedisVL 高级查询(全文搜索、混合搜索和 多向量搜索)
数据库·人工智能·redis·缓存
流星白龙1 天前
【Redis】4.基本全局命令
数据库·redis·缓存
流星白龙1 天前
【Redis】3.Redis安装与命令行客户端
数据库·redis·缓存
我不想名字重复1 天前
redis缓存和数据库数据保持一致
数据库·redis·缓存
时空无限1 天前
vllm 大模型启动缓存相关环境变量 export
linux·缓存·vllm
流星白龙1 天前
【Redis】6.计数其他命令
数据库·redis·缓存
正儿八经的少年2 天前
redis 的大 key 和热 key 详解
数据库·redis·缓存
X-⃢_⃢-X2 天前
十、Redis之布隆过滤器
数据库·redis·缓存