This commit is contained in:
小赵同学 committed 2024-09-16 18:19:30 +08:00
1 parent 8fe8ed0037
commit bbf6e45204
85 files changed
+1281 -378

No files matched your search

+132 -1
View File
@@ -6,7 +6,138 @@
<description></description>
<generator>Hugo -- gohugo.io</generator>
<language>zh-cn</language>
<lastBuildDate>Sun, 11 Aug 2024 20:52:39 +0800</lastBuildDate><atom:link href="https://usj.cc/post/rss.xml" rel="self" type="application/rss+xml" />
<lastBuildDate>Mon, 16 Sep 2024 14:48:42 +0800</lastBuildDate><atom:link href="https://usj.cc/post/rss.xml" rel="self" type="application/rss+xml" />
<item>
<title>Hugo使用GitHub Action自动刷新多吉云CDN缓存</title>
<link>https://usj.cc/post/dogeyun-auto-refresh-cdn/</link>
<pubDate>Mon, 16 Sep 2024 14:48:42 +0800</pubDate>
<guid>https://usj.cc/post/dogeyun-auto-refresh-cdn/</guid>
<description>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github 大概一分钟GitHub Action自动部署完成,还需要去</description>
<content:encoded><![CDATA[<img loading="lazy" decoding="async" src="/" alt="Hugo使用GitHub Action自动刷新多吉云CDN缓存" /><p>博客目前使用的方案是多吉云全站cdn缓存,使用git将hugo文件推送到github</p>
<p>大概一分钟GitHub Action自动部署完成,还需要去多吉云控制台手动刷新cdn缓存,长时间以来,感觉很不方便</p>
<p>这里特别感谢博友
<a
href="/tiaozhuan/index.html?target=aHR0cHM6Ly9saWthaWppYW4uY29tLw%3d%3d"
target="_blank"
>
永恒末匕</a>提供的方案,原方案地址:https://blog.cpen.top/posts/6f7759e0.html</p>
<p>这个方案虽然可以实现自动刷新的效果,但是有个弊端,也就是多吉云key令牌会直接暴露出来,只能把仓库设置为私有,不太灵活,今天下午花了点时间完善了一下,理论支持所有部署在GitHub的静态网站</p>
<h2 id="快速食用">快速食用</h2>
<p>在你的项目的根目录,新建一个<code>RefreshCDN.py</code>的文件,代码如下</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">from</span> <span style="color:#000">hashlib</span> <span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">sha1</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">hmac</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">requests</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">json</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">urllib</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">import</span> <span style="color:#000">os</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">def</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{},</span> <span style="color:#000">json_mode</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#204a87;font-weight:bold">False</span><span style="color:#000;font-weight:bold">):</span>
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#34;&#34;&#34;
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> 调用多吉云API。
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param api_path: 调用的 API 接口地址,包含 URL 请求参数 QueryString。
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param data: POST 的数据,字典格式。
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :param json_mode: 数据 data 是否以 JSON 格式请求,默认为 false 则使用表单形式。
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06">
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> :return dict: 返回的数据。
</span></span></span><span style="display:flex;"><span><span style="color:#4e9a06"> &#34;&#34;&#34;</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;DOGECLOUD_ACCESS_KEY&#39;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 AccessKey</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">secret_key</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;DOGECLOUD_SECRET_KEY&#39;</span><span style="color:#000;font-weight:bold">)</span> <span style="color:#8f5902;font-style:italic"># 从环境变量获取 SecretKey</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">access_key</span> <span style="color:#204a87;font-weight:bold">or</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">secret_key</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;Access Key or Secret Key is not set in environment variables.&#34;</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">&#39;&#39;</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">&#39;&#39;</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">json_mode</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">&#39;application/json&#39;</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">body</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">urllib</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">parse</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">urlencode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">data</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">mime</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">&#39;application/x-www-form-urlencoded&#39;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#000">sign_str</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">api_path</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">&#34;</span><span style="color:#4e9a06">\n</span><span style="color:#4e9a06">&#34;</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">body</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">signed_data</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">hmac</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">new</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">secret_key</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;utf-8&#39;</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sign_str</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">encode</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;utf-8&#39;</span><span style="color:#000;font-weight:bold">),</span> <span style="color:#000">sha1</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">sign</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">signed_data</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">digest</span><span style="color:#000;font-weight:bold">()</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">hex</span><span style="color:#000;font-weight:bold">()</span>
</span></span><span style="display:flex;"><span> <span style="color:#000">authorization</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#4e9a06">&#39;TOKEN &#39;</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">access_key</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#4e9a06">&#39;:&#39;</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">sign</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span> <span style="color:#000">response</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">requests</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">post</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;https://api.dogecloud.com&#39;</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api_path</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">data</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000">body</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000">headers</span><span style="color:#ce5c00;font-weight:bold">=</span><span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;Authorization&#39;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">authorization</span><span style="color:#000;font-weight:bold">,</span>
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;Content-Type&#39;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">mime</span>
</span></span><span style="display:flex;"><span> <span style="color:#000;font-weight:bold">})</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">return</span> <span style="color:#000">response</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">json</span><span style="color:#000;font-weight:bold">()</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#8f5902;font-style:italic"># 从环境变量中获取 URL 列表,使用逗号分隔</span>
</span></span><span style="display:flex;"><span><span style="color:#000">url_list_env</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">os</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">environ</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">get</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;CDN_URL_LIST&#39;</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#204a87;font-weight:bold">not</span> <span style="color:#000">url_list_env</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87;font-weight:bold">raise</span> <span style="color:#c00;font-weight:bold">ValueError</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;CDN_URL_LIST is not set in environment variables.&#34;</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#000">url_list</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">url_list_env</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">split</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;,&#39;</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#000">api</span> <span style="color:#ce5c00;font-weight:bold">=</span> <span style="color:#000">dogecloud_api</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#39;/cdn/refresh/add.json&#39;</span><span style="color:#000;font-weight:bold">,</span> <span style="color:#000;font-weight:bold">{</span>
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;rtype&#39;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#4e9a06">&#39;path&#39;</span><span style="color:#000;font-weight:bold">,</span>
</span></span><span style="display:flex;"><span> <span style="color:#4e9a06">&#39;urls&#39;</span><span style="color:#000;font-weight:bold">:</span> <span style="color:#000">json</span><span style="color:#ce5c00;font-weight:bold">.</span><span style="color:#000">dumps</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">url_list</span><span style="color:#000;font-weight:bold">)</span>
</span></span><span style="display:flex;"><span><span style="color:#000;font-weight:bold">})</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">if</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#39;code&#39;</span><span style="color:#000;font-weight:bold">]</span> <span style="color:#ce5c00;font-weight:bold">==</span> <span style="color:#0000cf;font-weight:bold">200</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#39;data&#39;</span><span style="color:#000;font-weight:bold">][</span><span style="color:#4e9a06">&#39;task_id&#39;</span><span style="color:#000;font-weight:bold">])</span>
</span></span><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">else</span><span style="color:#000;font-weight:bold">:</span>
</span></span><span style="display:flex;"><span> <span style="color:#204a87">print</span><span style="color:#000;font-weight:bold">(</span><span style="color:#4e9a06">&#34;API failed: &#34;</span> <span style="color:#ce5c00;font-weight:bold">+</span> <span style="color:#000">api</span><span style="color:#000;font-weight:bold">[</span><span style="color:#4e9a06">&#39;msg&#39;</span><span style="color:#000;font-weight:bold">])</span>
</span></span></code></pre></div><p>创建你的 GitHub Actions 脚本,在项目根目录创建 <code>.github/workflows</code> 目录,如果有该目录请忽略</p>
<p>接下来在<code>.github/workflows</code> 目录下新建 <code>RefreshCDN.yml</code>文件</p>
<p>yml文件配置如下</p>
<div class="highlight"><pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-yml" data-lang="yml"><span style="display:flex;"><span><span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">Refresh CDN</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">push</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">branches</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#000">main</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"></span><span style="color:#204a87;font-weight:bold">jobs</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">refresh-cdn</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">runs-on</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">ubuntu-latest</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">steps</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">检出代码</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/checkout@v2</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装 Python</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">uses</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">actions/setup-python@v2</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">with</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">python-version</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#4e9a06">&#39;3.x&#39;</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">安装依赖</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">pip install requests</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">等待源站部署</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">sleep 1m </span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#8f5902;font-style:italic"># 这里用了个笨办法,等待 1 分钟后进行刷新</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span>- <span style="color:#204a87;font-weight:bold">name</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">刷新 CDN</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">run</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">python RefreshCDN.py</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">env</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_ACCESS_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_ACCESS_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">DOGECLOUD_SECRET_KEY</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.DOGECLOUD_SECRET_KEY }}</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span><span style="display:flex;"><span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#204a87;font-weight:bold">CDN_URL_LIST</span><span style="color:#000;font-weight:bold">:</span><span style="color:#f8f8f8;text-decoration:underline"> </span><span style="color:#000">${{ secrets.CDN_URL_LIST }}</span><span style="color:#f8f8f8;text-decoration:underline">
</span></span></span></code></pre></div><p>然后在你的GitHub项目仓库页面</p>
<p>依次进入 <code>Settings</code> -&gt; <code>Secrets and variables</code> -&gt; <code>Actions</code> -&gt; <code>New repository secret</code></p>
<p>创建三个密钥键值对,分别为</p>
<p>CDN_URL_LIST:值为 URL 列表,使用逗号分隔。</p>
<pre tabindex="0"><code>https://usj.cc/,https://5b2.cn/
</code></pre><p><code>DOGECLOUD_ACCESS_KEY</code>:填入你的 AccessKey。</p>
<p><code>DOGECLOUD_SECRET_KEY</code>:填入你的 SecretKey。</p>
<p>多吉云密钥获取请访问:https://console.dogecloud.com/user/keys</p>
<p>按照如上步骤,设置完毕,你的仓库得有如下三个字段</p>
<p>
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/f2736183148b132aea6cb14908e8e86.png" alt="f2736183148b132aea6cb14908e8e86" class="lazyload"></p>
<p>执行git提交,脚本就可以自动刷新多吉云缓存了</p>
<p>
<img data-lazy-src="/pics/hugo/dogeyun-auto-refresh-cdn/48dad6112a4e2110c95b04111084309.png" alt="48dad6112a4e2110c95b04111084309" class="lazyload"></p>
<p>去多吉云控制台看看刷新预热,这样就是成功了</p>
]]></content:encoded>
</item>
<item>
<title>迁移博客至hugo</title>
<link>https://usj.cc/post/migrate-to-hugo/</link>