跨代码库工作流
学习在不同代码库之间串联工作流,以管理依赖关系并编排复杂部署
跨代码库工作流 是 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 节课。
跨代码库工作流简介
在现代软件开发中,应用程序通常由分布在不同代码库中的多个组件组成,例如微服务、共享库或独立的部署配置。
跨这些独立代码库编排工作流,可以实现更高的模块化程度和更清晰的职责分离。本课将介绍如何使用 GitHub Actions 实现这一点。
为什么要进行跨代码库编排
传统上,GitHub Actions 工作流的作用域限定在单个代码库中。但如果您需要:
- 在一个代码库中构建构件,并触发另一个代码库中的部署?
- 让共享配置代码库触发多个服务代码库的更新?
- 在所有其他代码库中强制执行由中央代码库管理的安全策略?
跨代码库工作流为这些复杂场景提供了解决方案。
连接代码库:`repository_dispatch`
GitHub Actions 提供了一种名为 repository_dispatch 的特殊事件类型。它的作用类似于 GitHub 代码库的自定义 Webhook。
- 一个工作流(“发送方”)向 GitHub 发送 API 请求。
- 另一个代码库中的工作流(“接收方”)监听此特定事件。
这样便可以通过程序触发不同代码库中的工作流。
设置接收方工作流
要接收 repository_dispatch 事件,目标代码库中的工作流需要配置为监听该事件。这可以通过使用 on: 关键字来完成。
代码库 repo-B 中的工作流可能如下所示:
name: Receive Dispatch Event
on:
repository_dispatch:
types: [my-custom-event]
jobs:
process-event:
runs-on: ubuntu-latest
steps:
- name: Log event payload
run: |
echo "Event type: ${{ github.event.action }}"
echo "Payload: ${{ toJSON(github.event.client_payload) }}"理解接收方配置
在前面的示例中:
on: repository_dispatch:告诉 GitHub 监听此事件。types: [my-custom-event]指定只有在分发的事件类型为my-custom-event时,此工作流才会运行。您可以定义多种类型。github.event.action将包含事件类型(例如my-custom-event)。github.event.client_payload包含随分发请求发送的任何自定义数据。
触发事件:从另一个仓库发送
要触发 repository_dispatch 事件,您需要向 GitHub API 发出 HTTP POST 请求。您可以在另一个 GitHub Actions 工作流或脚本中使用 curl 或 GitHub CLI(gh cli)来完成此操作。
主要要求:
- 目标仓库的所有者和名称。
- 接收方工作流正在监听的事件
type。 - 用于传递自定义数据的
client_payload。 - 具有
repo范围的 GitHub 个人访问令牌(PAT)。
示例:使用 `gh cli` 分发事件
下面是 repo-A 中向 repo-B 分发事件的工作流。请注意,我们使用机密保存令牌,并传递了 client_payload。
name: Trigger Deploy Workflow
on:
push:
branches: [main]
jobs:
dispatch:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Install GitHub CLI
run: sudo apt-get update && sudo apt-get install gh -y
- name: Dispatch event to repo-B
env:
GH_TOKEN: ${{ secrets.CROSS_REPO_PAT }}
run: |
gh api \
--method POST \
-H "Accept: application/vnd.github.v3+json" \
/repos/YOUR_ORG/repo-B/dispatches \
-f event_type='my-custom-event' \
-f client_payload='{"ref":"${{ github.ref }}", "sha":"${{ github.sha }}"}'保护跨仓库访问
工作流默认获得的 GITHUB_TOKEN 仅限于运行该工作流的仓库。要在*另一个*仓库中触发事件,您需要具有更广泛权限的令牌。
- 使用具有
repo范围的个人访问令牌(PAT)。 - 将此 PAT 作为仓库机密(例如
CROSS_REPO_PAT)存储在触发方仓库中。 - 绝不要将 PAT 直接硬编码到工作流文件中。
使用 `client_payload` 传递自定义数据
client_payload 是一个 JSON 对象,您可以在分发事件时将其包含在请求中。它对于将上下文或数据从触发方工作流传递到接收方工作流至关重要。
您可能会传递的数据示例:
- 触发构建的提交 SHA 或分支名称。
- 环境目标(例如“staging”“production”)。
- 要部署的构件版本号。
请记住:client_payload 会显示在工作流日志中,因此请避免放入敏感信息。
跨仓库工作流快速检查
您已经学习了如何协调不同 GitHub 仓库之间的工作流。下面来测试一下您对关键组成部分的理解。
回顾:协调多个仓库之间的工作流
您已经成功学会了如何使用 repository_dispatch 实现跨仓库工作流!
- 原因:管理依赖关系,并协调跨多个仓库的复杂部署。
- 方式:“发送方”工作流向 GitHub 发出 API 调用,从而触发另一个仓库中的“接收方”工作流。
- 关键点:接收方工作流中的
repository_dispatch事件类型和匹配的types。 - 数据:使用
client_payload在工作流之间传递非敏感信息。 - 安全性:跨仓库访问始终应使用具有
repo范围并以机密形式存储的 PAT。
这一强大功能支持高度灵活且彼此解耦的 CI/CD 流水线。
常见问题解答
「跨代码库工作流」课时是免费的吗?
是的 — 「跨代码库工作流」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 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 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「跨代码库工作流」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 CI/CD with GitHub Actions & DevOps Pipelines 课中编写并运行代码吗?
能。每节 CI/CD with GitHub Actions & DevOps Pipelines 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。