<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ci-Cd on 技术、游戏、生活通俗易懂的解释</title><link>https://takao.blog/zh/categories/ci-cd/</link><description>Recent content in Ci-Cd on 技术、游戏、生活通俗易懂的解释</description><generator>Hugo -- gohugo.io</generator><language>zh</language><copyright>Commentary of Takao</copyright><lastBuildDate>Thu, 20 Nov 2025 00:00:00 +0900</lastBuildDate><atom:link href="https://takao.blog/zh/categories/ci-cd/index.xml" rel="self" type="application/rss+xml"/><item><title>通过 actions/cache 加速 GitHub Actions 工作流程</title><link>https://takao.blog/zh/web/github-actions-caching-setup/</link><pubDate>Thu, 20 Nov 2025 00:00:00 +0900</pubDate><guid>https://takao.blog/zh/web/github-actions-caching-setup/</guid><description>&lt;img src="https://takao.blog/img/thumbnail/github-actions-caching-setup-zh.png" alt="Featured image of post 通过 actions/cache 加速 GitHub Actions 工作流程" /&gt;&lt;p&gt;自动化 CI/CD 管道（如 GitHub Actions）是现代软件质量控制的基石。但是，如果您的工作流程在每个拉取请求上获取外部包、启动容器环境并从头开始重建整个应用程序，则执行时间可能会迅速增加到几分钟。&lt;/p&gt;
&lt;p&gt;较长的反馈循环会降低开发人员的工作效率并导致更高的计费成本。&lt;/p&gt;
&lt;p&gt;在本文中，我们将演示如何利用 GitHub 的官方缓存机制将您的工作流程从几分钟加快到几秒钟。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-github-actions-中的缓存如何工作"&gt;1. GitHub Actions 中的缓存如何工作
&lt;/h2&gt;&lt;p&gt;GitHub Actions 缓存将文件（例如包依赖项和构建输出）保存到 GitHub 管理的安全存储层。在后续运行中，运行程序将恢复这些目录，而不是重新下载或编译它们。&lt;/p&gt;
&lt;p&gt;缓存对于以下方面非常有效：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;包管理器缓存文件夹（例如 &lt;code&gt;.npm&lt;/code&gt; 或 &lt;code&gt;yarn&lt;/code&gt; 缓存）。&lt;/li&gt;
&lt;li&gt;Web 框架构建目标（例如 Next.js 中的 &lt;code&gt;.next/cache&lt;/code&gt;）。&lt;/li&gt;
&lt;li&gt;编译器中间体（Rust 目标目录、Go 构建缓存）。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="2-使用-setup--操作进行本机包缓存"&gt;2. 使用 &lt;code&gt;setup-*&lt;/code&gt; 操作进行本机包缓存
&lt;/h2&gt;&lt;p&gt;为 Node.js 等运行时环境启用缓存的最简单方法是通过 GitHub 官方设置操作中的集成选项。&lt;/p&gt;
&lt;h3 id="使用-npm-githubworkflowsciyml-的-nodejs-项目的示例工作流程"&gt;使用 npm (&lt;code&gt;.github/workflows/ci.yml&lt;/code&gt;) 的 Node.js 项目的示例工作流程：
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;CI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;on&lt;/span&gt;: [&lt;span style="color:#ae81ff"&gt;push, pull_request]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;jobs&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;build&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;runs-on&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;ubuntu-latest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;steps&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Checkout repository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;uses&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;actions/checkout@v4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Set up Node.js&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;uses&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;actions/setup-node@v4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;with&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;node-version&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Enable automatic caching for npm dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;cache&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#39;npm&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Automatically restores dependency cache mapping package-lock.json hashes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Install dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;run&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;npm ci&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; - &lt;span style="color:#f92672"&gt;name&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;Run test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;run&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;npm test&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;只需设置 &lt;code&gt;cache: 'yarn'&lt;/code&gt; 或 &lt;code&gt;cache: 'pnpm'&lt;/code&gt; 即可分别处理 Yarn 和 pnpm 设置，无需任何其他配置。&lt;/p&gt;</description></item></channel></rss>