流水线性能调优
识别瓶颈,并应用高级技术优化 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 反馈 — 无需本地设置。