如何使用 refresh-cdn-cache 插件自动刷新 CDN 缓存

阿里云推广 (opens new window)

# 前言

前一段时间将公司的一些静态网站都迁移到了阿里云的函数计算上, 然后用云效 Flow 对 git 推送事件进行监听, 自动构建并部署到不同的环境上, 并且对部分访问量比较大的网站配置了 CDN 缓存.

将配置好的仓库交给前端工程师后不久, 就不断收到来自前端工程师和运营同学的请求: 帮忙刷新一下 xxx 页面的缓存. 看来只是加上 CDN 缓存还不够, 还得在流水线运行结束的时候自动刷新一下缓存才行.

现在需求有了, 怎么去实现呢?

如果我们可以在现有的流水线结束前加上一个额外的刷新缓存的步骤就好了, 但是现在云效 Flow 自带的这些步骤中没有刷新 CDN 缓存相关的内容, 在自定义步骤中使用命令行去发起刷新 CDN 缓存的请求似乎也有些繁琐.

好在 Serverless-Devs 提供了插件系统, 允许开发者在特定的运行步骤前后增加一些自定义的功能. 现在我们就借助这个插件系统来完成自动刷新 CDN 缓存的功能.

(云效和 Serverless-Devs 都没有现成的东西可以用, 偷懒失败, 只能自己造轮子咯 😂 )

# 安装 refresh-cdn-cache 插件

以我的博客站 https://blog.dengchao.fun (opens new window) 为例, 向 s.yamlpost-deploy 插槽中加入 refresh-cdn-cache 插件:

# access: root-access
services:
  default: # 当前 service 对象
    # access: service-access
    actions:
      post-deploy: # 在 s deploy 结束后执行插件功能
        - plugin: refresh-cdn-cache # https://github.com/DevDengChao/refresh-cdn-cache
          args:
            paths: https://blog.dengchao.fun/ # 待刷新缓存的 URL

# 配置 refresh-cdn-cache 插件

refresh-cdn-cache 插件默认通过当前的 service 对象的 access 或文档根对象中的 access 来获取操作 CDN 时所需要的密钥对, 如果你需要使用其他的方式来提供这些密钥对, 可以参考 https://github.com/DevDengChao/refresh-cdn-cache#密钥加载优先级 (opens new window) 章节.

待刷新的 URL 需要填写在 paths 参数中, 它支持单个字符串以及字符串数组:

paths: 
	- https://blog.dengchao.fun/ # 刷新整个 / 目录下的缓存
	- https://blog.dengchao.fun/index.html # 刷新单个 URL

如果你使用的不是阿里云的 CDN, 那么你还需要参考 https://github.com/DevDengChao/refresh-cdn-cache#参数说明 (opens new window) 章节来了解如何操作其他的 CDN 供应商.

# 测试插件生效

由于我们的插件安装在 post-deploy 插槽中, 因此我们需要通过 s deploy 来进行触发. 如果配置正确的话, 你应该能看到类似这样的日志:

[17:40:26] [2022-06-08 17:40:26] [INFO] [S-CORE] - Start the after-action
[17:40:26] [2022-06-08 17:40:26] [INFO] [S-CORE] - Action: refresh-cdn-cache
[17:40:26] - Downloading: [/refresh-cdn-cache/zipball/0.0.13]
[17:40:35] ✔ refresh-cdn-cache.zip file decompression completed
[17:40:36] [2022-06-08 17:40:36] [INFO] [refresh-cdn-cache] - Thanks for using Refresh CDN Cache plugin v0.0.13 by DevDengChao.
[17:40:36] [2022-06-08 17:40:36] [INFO] [refresh-cdn-cache] - Decided to use aliyun cdn cache refresher as user specified service.component with value 'devsapp/fc'
[17:40:37] [2022-06-08 17:40:37] [INFO] [refresh-cdn-cache] - Refresh CDN cache success.
[17:40:37] [2022-06-08 17:40:37] [INFO] [refresh-cdn-cache] - If you think my plugin helpful, please support me by star the repository https://github.com/DevDengChao/refresh-cdn-cache or buy me a coffee 💗
[17:40:37] [2022-06-08 17:40:37] [INFO] [S-CORE] - End the after-action

快按 Ctrl + F5 刷新一下页面, 看看缓存是否刷新掉了吧 🎉

# 相关内容

# 推广

欢迎大家领取 阿里云优惠券 (opens new window), 新购续费更优惠, 更有最高 10 % 返现,详询 钉钉 (opens new window): 限量阿里云优惠券 (opens new window)