【DevOps实战】告别手动刷新!Python脚本实现360CDN缓存自动化秒级刷新
·
做前端和运维的兄弟们,肯定都踩过这个坑:前端刚发了新版,结果用户反馈页面还是旧的,一查发现是CDN缓存没更新!手动去控制台一条条刷新缓存不仅效率低,还容易漏掉关键目录。今天分享一个我最近写进Jenkins流水线的Python脚本,完美解决了360CDN的自动化缓存刷新问题。
核心痛点:发版与缓存更新的“时间差”
传统发版流程中,代码部署和CDN缓存刷新是割裂的。往往代码已经上线,但CDN节点上还存留着旧的JS、CSS或HTML文件。这不仅会导致线上样式错乱,严重时甚至会引发生产事故。
实战方案:基于Git事件的自动化刷新
我的思路很简单:监听Git的提交事件,自动提取变更的文件目录,然后调用360CDN的官方API进行缓存清除。
核心代码实现:
1import requests
2import hashlib
3import time
4
5# 360CDN API 配置
6API_KEY = "your_api_key"
7SECRET_KEY = "your_secret_key"
8REFRESH_URL = "https://openapi.360.cn/cdn/cache/refresh"
9
10def generate_signature(params, secret_key):
11 # 按照360CDN API文档要求生成签名
12 sorted_params = sorted(params.items())
13 sign_str = "&".join([f"{k}={v}" for k, v in sorted_params]) + secret_key
14 return hashlib.md5(sign_str.encode('utf-8')).hexdigest()
15
16def refresh_cdn_cache(dir_list):
17 timestamp = str(int(time.time()))
18 params = {
19 "api_key": API_KEY,
20 "timestamp": timestamp,
21 "type": "dir", # 支持目录刷新
22 "urls": "\n".join(dir_list)
23 }
24 params["sign"] = generate_signature(params, SECRET_KEY)
25
26 response = requests.post(REFRESH_URL, data=params)
27 if response.json().get("code") == 0:
28 print(" CDN缓存刷新任务提交成功!")
29 else:
30 print(f" 刷新失败: {response.text}")
31
32# 结合Jenkins或Git Hook使用
33if __name__ == "__main__":
34 # 假设从Git diff中提取出了变更目录
35 changed_dirs = ["/static/js/", "/static/css/"]
36 refresh_cdn_cache(changed_dirs)
避坑指南
- 频率限制:CDN API通常有调用频率限制,建议在脚本中加入重试机制。
- 目录格式:刷新目录时,路径必须以“/”结尾,否则API会报错。
- 权限控制:API密钥务必妥善保管,建议在Jenkins中使用加密凭证存储。
总结:将CDN缓存刷新集成到CI/CD流程中,是实现“发版即生效”的关键一步。几行Python代码,就能彻底解放运维的双手!
更多推荐
所有评论(0)