0Pricing
CI/CD with GitHub Actions & DevOps Pipelines · 课时

流水线性能调优

识别瓶颈,并应用高级技术优化 GitHub Actions 工作流的执行速度和资源消耗

流水线性能调优 是 CoddyKit 上的免费 CI/CD with GitHub Actions & DevOps Pipelines 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CI/CD with GitHub Actions & DevOps Pipelines 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

提升流水线速度

欢迎来到流水线性能调优课程!在现代开发中,快速的 CI/CD 流水线对于快速获得反馈和高效利用资源至关重要。

缓慢的流水线会浪费时间和资金。本课将教您使用高级技术来识别瓶颈,并显著加快 GitHub Actions 工作流。

查找工作流瓶颈

在进行优化之前,您需要知道要优化的内容。GitHub Actions 提供了出色的工具,可帮助您定位缓慢的步骤或作业。

  • GitHub 界面:查看工作流运行日志。时间线视图会清晰显示每个作业和步骤分别耗时多久。
  • 作业摘要:查找耗时异常长的步骤。
  • 操作日志:详细日志可以揭示具体哪些命令或进程消耗了最多时间。

请重点关注始终耗时最长的步骤。

并行运行相互独立的作业

如果工作流的某些部分互不依赖,就让它们同时运行!这是减少整体执行时间的一种简单而有效的方法。

在工作流中定义多个顶层作业。只要不在它们之间指定 needs 依赖关系,GitHub Actions 默认会并行运行这些作业。

name: Parallel Jobs Example
on: [push]
jobs:
  build-frontend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Frontend
        run: echo "Building frontend..."
  build-backend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Backend
        run: echo "Building backend..."

优化检出操作

actions/checkout 操作用于获取代码仓库中的代码。对于大型代码仓库或历史记录丰富的代码仓库,这一过程可能很慢。您可以进行以下优化:

  • 浅克隆:使用 fetch-depth: 1,只获取最新提交,从而为大多数 CI/CD 任务节省大量时间。
  • 稀疏检出:如果只需要部分文件,可以考虑使用稀疏检出(但通常设置起来更复杂)。

除非绝对必要,否则请避免使用 fetch-depth: 0,因为它会下载完整的历史记录。

name: Optimized Checkout
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 1 # Only fetch the latest commit
      - name: Run Build
        run: echo "Code checked out and building..."

减小构建制品大小

如果工作流会上传或下载制品(例如编译后的二进制文件或测试报告),制品大小会直接影响性能。

要加快处理速度:

  • 仅包含必要文件:不要上传不需要的临时构建目录或日志。
  • 压缩制品:如果可能,请在上传前压缩较大的制品。actions/upload-artifact 操作会自动处理压缩,但请确保源文件保持精简。

通过路径筛选提高效率

并非每次代码变更都需要触发每个作业。请使用路径筛选,仅在相关文件被修改时运行作业。

这对于大型代码仓库尤其有用,因为文档发生变更时不应触发完整的后端构建。

请在工作流的 on 触发器中指定 paths 或 paths-ignore。

name: Path Filter Example
on:
  push:
    paths:
      - 'frontend/**'
      - 'shared/**'
jobs:
  build-frontend:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Frontend
        run: echo "Frontend files changed, building..."

更快的运行器与资源分配

执行工作流的虚拟机(运行器)有不同的大小和类型。对于 CPU 密集型任务,更强大的运行器可以大幅缩短执行时间。

  • 更大型的 GitHub 托管运行器:GitHub 提供更大型的运行器(例如 ubuntu-latest-xlarge),用于处理要求更高的工作负载。
  • 自托管运行器:如果您有非常具体的硬件需求,或希望尽量降低访问内部资源时的网络延迟,则可以针对确切需求优化自托管运行器。

高级缓存策略

缓存依赖项(例如 npm 软件包或 Maven 制品)至关重要。您还可以通过以下技巧超越基本缓存:

  • 细粒度缓存键:使用更具体的缓存键,避免不必要的缓存未命中。例如,加入特定锁定文件的哈希值和 OS。
  • 多个缓存:不要将所有内容放入一个大型缓存中。为不同类型的依赖项(例如 node_modules、pip 软件包)分别设置缓存,可以提高命中率。
  • 恢复键:使用 restore-keys,在主缓存键未命中时尝试多个缓存键,从而提高部分命中的可能性。
name: Advanced Caching
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Cache Node Modules
        uses: actions/cache@v4
        with:
          path: ~/.npm
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
          restore-keys: | # Try less specific keys if primary misses
            ${{ runner.os }}-node-
      - name: Install Dependencies
        run: npm ci

优化此工作流

请考虑这样一个工作流:它同时构建前端和后端代码。目前,两个构建过程按顺序运行,并且检出操作会获取完整的历史记录。哪两项变更可以显著提升其性能?

name: Inefficient Workflow
on: [push]
jobs:
  build-all:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Frontend Deps
        run: npm install
      - name: Build Frontend
        run: npm run build
      - name: Install Backend Deps
        run: pip install -r requirements.txt
      - name: Build Backend
        run: python setup.py build

回顾:调优以提升速度

您已经学习了优化 GitHub Actions 工作流的有效技术!

  • 识别瓶颈:使用 GitHub 界面和日志。
  • 并行运行作业:让相互独立的任务并发执行。
  • 优化检出:使用浅克隆。
  • 减少制品:保持上传和下载的大小较小。
  • 路径筛选:仅在相关文件发生变更时运行作业。
  • 更快的运行器:选择合适的运行器资源。
  • 高级缓存:使用细粒度缓存键和多个缓存。

应用这些策略后,您可以让流水线运行得更快、更高效,并节省宝贵的时间和资源。

常见问题解答

「流水线性能调优」课时是免费的吗?

是的 — 「流水线性能调优」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 CI/CD with GitHub Actions & DevOps Pipelines 课程的其余内容,请升级到 CoddyKit PRO。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

「流水线性能调优」这节课中我会学到什么?

识别瓶颈,并应用高级技术优化 GitHub Actions 工作流的执行速度和资源消耗 你通过在浏览器中直接运行的动手代码来练习 CI/CD with GitHub Actions & DevOps Pipelines,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 CI/CD with GitHub Actions & DevOps Pipelines 需要有经验吗?

无需任何先前经验。CoddyKit 上的 CI/CD with GitHub Actions & DevOps Pipelines 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「流水线性能调优」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 CI/CD with GitHub Actions & DevOps Pipelines 课中编写并运行代码吗?

能。每节 CI/CD with GitHub Actions & DevOps Pipelines 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. DORA 指标与 CI/CD 健康度
  2. 流水线性能调优
  3. DevOps 自动化的未来趋势
  4. 优化持续集成与持续交付成本及运行器效率
← 返回 CI/CD with GitHub Actions & DevOps Pipelines