如果你使用过 GitHub Actions,那么你一定要了解 Reusable Workflows 这个特性,它允许你定义工作流并在多个仓库中重复使用它们。
GitHub Actions 是 GitHub 自家的 CI/CD 工具。其他主流的 CI/CD 工具还有 Jenkins,Azure DevOps,Travis CI 等。
通过 GitHub Reusable Workflows 你可以将常见的工作流程定义在单独的 Git 仓库,然后在其他仓库中引用这些工作流,而无需在每个仓库中重复定义它们,这样做带来的好处包括:
总的来说,GitHub Reusable Workflows 使得在 GitHub Actions 中管理和组织工作流程变得更加灵活和可维护。
使用 GitHub Reusable Workflows 可以让你在 .github
或是其他仓库创建一个工作流,然后在其他仓库中调用该工作流。
以下是使用 GitHub Reusable Workflows 的一般步骤:
.github/workflows
的目录(如果不存在的话)。inputs
关键字定义参数。.github/workflows
目录中。.github/workflows
目录下创建一个 YAML 文件,指向你之前创建的可重用工作流程的 YAML 文件。push
、pull_request
等)来触发工作流程的执行。以下是一个简单的示例,演示如何创建和使用可重用工作流程:
假设你在名为 reuse-workflows-demo
的仓库中 .github/workflows
目录下创建了一个名为 build.yml
的工作流程文件,用于构建你的项目。该文件的内容如下:
如果不在
.github/workflows
目录下,你会遇到这个错误invalid value workflow reference: references to workflows must be rooted in '.github/workflows'
name: Build
on:
workflow_call:
inputs:
target:
required: true
type: string
default: ""
jobs:
build:
strategy:
matrix:
target: [dev, stage, prod]
runs-on: ubuntu-latest
steps:
- name: inputs.target = ${{ inputs.target }}
if: inputs.target
run: echo "inputs.target = ${{ inputs.target }}."
- name: matrix.targe = ${{ matrix.target }}
if: matrix.target
run: echo "matrix.targe = ${{ matrix.target }}."
然后,在你的其他仓库中的 .github/workflows
目录下你可以创建一个 workflow build.yml
指向该文件,例如:
name: Build
on:
push:
pull_request:
workflow_dispatch:
jobs:
call-build:
uses: shenxianpeng/reuse-workflows-demo/.github/workflows/build.yml@main
with:
target: stage
遵循这些最佳实践可以帮助你更好地利用 GitHub Reusable Workflows 并为你的项目和团队提供更高效和可维护的自动化工作流程。
最后,说一下我对 GitHub Reusable Workflows 和 Jenkins Shared Library 的理解和总结。有一些相似之处,但也有一些区别。
相同点:
不同点:
综上所述,尽管 GitHub Reusable Workflows 和 Jenkins Shared Library 都旨在提供可重用的自动化工作流程,并且具有一些相似之处,但是它们在平台、语法、易用性等方面存在显著的差异。
具体选择使用哪种取决于你的需求、工作流程和所需要使用的平台。