可复用工作流与操作
创建并利用可复用工作流和自定义操作,将流水线模块化并促进各代码库之间的一致性
可复用工作流与操作 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
工作流程复用简介
在现代软件开发中,效率和一致性至关重要。随着项目不断发展,自动化需求也会增加。
GitHub 操作中的可复用工作流程和自定义操作可以帮助您避免重复劳动,让持续集成/持续交付流水线更易维护且更加稳健。
为什么复用工作流程
想象一下,您有多个应用程序都需要相同的构建、测试或部署步骤。复制粘贴工作流程代码会导致:
- 重复:需要维护更多代码。
- 不一致:很容易遗漏不同工作流程中的更新。
- 维护难题:一次更改需要更新多个文件。
复用可以解决这些问题!
定义可复用工作流程
可复用工作流程是一个可以由其他工作流程调用的完整工作流程。它存储在您的存储库中,并充当模板。
要使工作流程可复用,您需要使用 workflow_call 事件。这会告诉 GitHub 操作,此工作流程 предназначен for being called,而不是由 push 或 pull_request 等常规事件触发。
可复用工作流程示例
下面是一个模拟构建的简单可复用工作流程。请将其保存到 .github/workflows/reusable-build.yml。
它定义了一个名为 build_id 的 output,调用方工作流程可以使用该输出。
name: Reusable Build Component
on:
workflow_call:
outputs:
build_id:
description: "The ID of the build operation"
value: ${{ jobs.build.outputs.build_id }}
jobs:
build:
runs-on: ubuntu-latest
outputs:
build_id: ${{ steps.generate_id.outputs.id }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Generate build ID
id: generate_id
run: echo "id=$(date +%s)" >> "$GITHUB_OUTPUT"
- name: Simulate build
run: echo "Building project with ID ${{ steps.generate_id.outputs.id }}..."
调用可复用工作流程
要使用可复用工作流程,另一个工作流程(“调用方”)需要使用 uses 关键字,方式类似于使用 GitHub 操作。
您可以指定存储库中可复用工作流程文件的路径,也可以指定另一个存储库或特定版本中的工作流程。
调用方工作流程示例
此工作流程保存为 .github/workflows/main-app-ci.yml,并调用我们的 reusable-build.yml 工作流程。
请注意,它如何使用 jobs.call-build.outputs.build_id 访问被调用工作流程的 build_id 输出。
name: Main App CI
on: [push]
jobs:
call-build:
uses: ./.github/workflows/reusable-build.yml
outputs:
build_id: ${{ jobs.call-build.outputs.build_id }}
deploy:
needs: call-build
runs-on: ubuntu-latest
steps:
- name: Deploy app
run: echo "Deploying app built with ID ${{ needs.call-build.outputs.build_id }}"
向可复用工作流传递输入
可复用工作流并不只是静态模板;它们可以接受输入,因此具有很高的灵活性。
您可以在可复用工作流的 on: workflow_call: inputs: 部分定义预期输入,并指定输入类型、是否必需以及描述。调用工作流使用 with: 关键字传递这些输入。
带输入的可复用工作流
下面是更新后的 reusable-build.yml,它接受一个 target_env 输入。这样,同一套构建逻辑就可以针对不同环境进行自定义。
name: Reusable Build Component with Input
on:
workflow_call:
inputs:
target_env:
required: true
type: string
description: "The target environment for the build"
outputs:
build_id:
description: "The ID of the build operation"
value: ${{ jobs.build.outputs.build_id }}
jobs:
build:
runs-on: ubuntu-latest
outputs:
build_id: ${{ steps.generate_id.outputs.id }}
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Generate build ID
id: generate_id
run: echo "id=$(date +%s)" >> "$GITHUB_OUTPUT"
- name: Simulate build for ${{ inputs.target_env }}
run: echo "Building project for ${{ inputs.target_env }} with ID ${{ steps.generate_id.outputs.id }}..."
使用输入进行调用的示例
现在,我们的主持续集成工作流可以调用可复用的构建组件两次:一次用于“预发布”,一次用于“生产环境”,并传递不同的 target_env 值。
name: Main App CI with Input
on: [push]
jobs:
call-build-staging:
uses: ./.github/workflows/reusable-build-with-input.yml
with:
target_env: 'staging'
outputs:
build_id: ${{ jobs.call-build-staging.outputs.build_id }}
call-build-prod:
uses: ./.github/workflows/reusable-build-with-input.yml
with:
target_env: 'production'
outputs:
build_id: ${{ jobs.call-build-prod.outputs.build_id }}
可复用工作流与自定义操作
虽然二者都提倡复用,但用途不同:
- 可复用工作流:负责协调一系列作业。它们定义完整的工作流结构(例如构建、测试和部署)。
- 自定义操作:在作业中执行特定的单一任务(例如设置 Node.js、发布软件包)。它们是作业步骤*内部*的构建块。
您可以将工作流想象成菜谱,将操作想象成单独的食材或步骤。
快速检查
在 GitHub 操作中使用可复用工作流有哪些主要优点?
回顾:可复用工作流与操作
我们已经了解了可复用工作流如何帮助模块化您的持续集成/持续交付流水线。
- 它们使用
workflow_call定义。 - 它们可以接受
inputs并提供outputs。 - 调用工作流使用
uses关键字。 - 它们不同于自定义操作;自定义操作是在作业中执行单一任务的构建块。
采用复用机制后,您可以在各个项目中实现更高效、一致且易于维护的自动化。
常见问题解答
「可复用工作流与操作」课时是免费的吗?
是的 — 「可复用工作流与操作」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「可复用工作流与操作」这节课中我会学到什么?
创建并利用可复用工作流和自定义操作,将流水线模块化并促进各代码库之间的一致性 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「可复用工作流与操作」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 适用于多环境的矩阵构建
- 缓存依赖项以提升速度
- 可复用工作流与操作
- 条件执行与任务依赖