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的使用,可能还会写一些相关的文章。

相关推荐
百思可瑞教育16 小时前
vue的动态组件keep-alive实现组件缓存和状态保留
前端·vue.js·缓存·北京百思可瑞教育·百思可瑞教育
百思可瑞教育19 小时前
Nginx代理缓存机制深度解析:从原理到最佳实践
java·nginx·缓存·北京百思可瑞教育·百思可瑞教育
贾修行20 小时前
Redis 缓存热身(Cache Warm-up):原理、方案与实践
redis·缓存·oracle
凯子坚持 c21 小时前
Redis数据类型概览:除了五大基础类型还有哪些?
数据库·redis·缓存
拾忆,想起2 天前
Redis红锁(RedLock)解密:分布式锁的高可用终极方案
java·数据库·redis·分布式·缓存·性能优化·wpf
赵得C3 天前
Java 多线程环境下的全局变量缓存实践指南
java·开发语言·后端·spring·缓存
梓沂3 天前
centos7 安装memcached
数据库·缓存·memcached
拾忆,想起3 天前
Redis发布订阅:实时消息系统的极简解决方案
java·开发语言·数据库·redis·后端·缓存·性能优化
郭俊强4 天前
nestjs 连接redis
数据库·redis·缓存