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

可复用工作流与操作

创建并利用可复用工作流和自定义操作,将流水线模块化并促进各代码库之间的一致性

可复用工作流与操作 是 CoddyKit 上的免费 CI/CD with GitHub Actions & DevOps Pipelines 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 CI/CD with GitHub Actions & DevOps Pipelines 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 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 导师)并解锁 CI/CD with GitHub Actions & DevOps Pipelines 课程的其余内容,请升级到 CoddyKit PRO。 CI/CD with GitHub Actions & DevOps Pipelines 课程共包含 4 节课。

「可复用工作流与操作」这节课中我会学到什么?

创建并利用可复用工作流和自定义操作,将流水线模块化并促进各代码库之间的一致性 你通过在浏览器中直接运行的动手代码来练习 CI/CD with GitHub Actions & DevOps Pipelines,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

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

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

「可复用工作流与操作」课时需要多长时间?

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

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

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

此课程中的所有课时

  1. 适用于多环境的矩阵构建
  2. 缓存依赖项以提升速度
  3. 可复用工作流与操作
  4. 条件执行与任务依赖
← 返回 CI/CD with GitHub Actions & DevOps Pipelines