GitHub Actions 自动清除腾讯云 EdgeOne CDN 缓存
在Github Action构建完 Yohaku 部署到服务器后自动清除CDN缓存,以立即应用新的更改
适用于
需要添加的Secret有:
| 名称 | 示例值 | 说明 |
|---|---|---|
| TENCENT_CLOUD_SECRET_ID | AKXXXXXXXXXX | 你的腾讯云Secret Id |
| TENCENT_CLOUD_SECRET_KEY | BHXXXXXXXXXX | 你的腾讯云Secret Key |
| TENCENT_CDN_DOMAIN | example.com | 你的博客前端域名 |
| TENCENT_EDGEONE_ZONE_ID | zone-123456abc | Edgeone实例的Zone Id,可以在 控制台 查看 |
修改depoly.yml
//约第 236 行附近
ClearCDNCache:
name: Clear Tencent EdgeOne CDN cache
runs-on: ubuntu-latest
needs: deploy
steps:
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Tencent Cloud SDK
run: npm install tencentcloud-sdk-nodejs --no-save --no-package-lock
- name: Purge cache with Tencent Cloud SDK
env:
TENCENT_CLOUD_SECRET_ID: ${{ secrets.TENCENT_CLOUD_SECRET_ID }}
TENCENT_CLOUD_SECRET_KEY: ${{ secrets.TENCENT_CLOUD_SECRET_KEY }}
TENCENT_CDN_DOMAIN: ${{ secrets.TENCENT_CDN_DOMAIN }}
TENCENT_EDGEONE_ZONE_ID: ${{ secrets.TENCENT_EDGEONE_ZONE_ID }}
run: |
cat > clearCache.js <<'EOF'
const tencentcloud = require("tencentcloud-sdk-nodejs");
const requiredEnv = [
"TENCENT_CLOUD_SECRET_ID",
"TENCENT_CLOUD_SECRET_KEY",
"TENCENT_CDN_DOMAIN",
"TENCENT_EDGEONE_ZONE_ID",
];
const missingEnv = requiredEnv.filter((name) => !process.env[name] || !process.env[name].trim());
if (missingEnv.length > 0) {
console.error(`Missing required environment variables: ${missingEnv.join(", ")}`);
process.exit(1);
}
const TeoClient = tencentcloud.teo.v20220901.Client;
const client = new TeoClient({
credential: {
secretId: process.env.TENCENT_CLOUD_SECRET_ID,
secretKey: process.env.TENCENT_CLOUD_SECRET_KEY,
},
region: "",
profile: {
httpProfile: {
endpoint: "teo.tencentcloudapi.com",
},
},
});
const params = {
Targets: [process.env.TENCENT_CDN_DOMAIN.trim()],
Type: "purge_host",
ZoneId: process.env.TENCENT_EDGEONE_ZONE_ID.trim(),
};
async function main() {
const data = await client.CreatePurgeTask(params);
console.log(JSON.stringify(data, null, 2));
const failedList = data?.FailedList ?? data?.Response?.FailedList ?? [];
if (Array.isArray(failedList) && failedList.length > 0) {
console.error("Tencent EdgeOne purge task contains failed targets:");
console.error(JSON.stringify(failedList, null, 2));
process.exit(1);
}
}
main().catch((error) => {
console.error("Tencent EdgeOne purge failed:", error);
process.exit(1);
});
EOF
node clearCache.js
//约第 315 行附近
needs: [ClearCDNCache, build]
修改后推送触发Action,查看日志,输出
{
"RequestId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx",
"FailedList": [],
"JobId": "xxxxxxxxx"
}
代表清除缓存成功。