我们经常发布文档更新,此页面的翻译可能仍在进行中。有关最新信息,请访问英文文档。如果此页面上的翻译有问题,请告诉我们

管理复杂的工作流程

本指南说明如何使用 GitHub Actions 的高级功能,包括机密管理、相关作业、缓存、生成矩阵、环境和标签。

本文内容

概览

本文介绍了 GitHub Actions 的一些高级功能,可帮助您创建更复杂的工作流程。

存储密码

如果您的工作流程使用敏感数据,例如密码或证书, 您可以将这些信息在 GitHub 中保存为 机密,然后在工作流中将它们用作环境变量。 这意味着您将能够创建和共享工作流程,而无需直接在 YAML 工作流程中嵌入敏感值。

此示例操作演示如何将现有机密引用为环境变量,并将其作为参数发送到示例命令。

jobs:
  example-job:
    runs-on: ubuntu-latest
    steps:
      - name: Retrieve secret
        env:
          super_secret: ${{ secrets.SUPERSECRET }}
        run: |
          example-command "$super_secret"

更多信息请参阅“创建和存储加密密码”。

创建依赖的作业

默认情况下,工作流程中的作业同时并行运行。 因此,如果您有一个作业必须在另一个作业完成后运行,可以使用 needs 关键字来创建此依赖项。 如果其中一个作业失败,则跳过所有从属作业;但如果您需要作业继续,可以使用条件语句 if 来定义。

在此示例中,setupbuildtest 作业连续运行,buildtest 取决于其前面的作业成功完成:

jobs:
  setup:
    runs-on: ubuntu-latest
    steps:
      - run: ./setup_server.sh
  build:
    needs: setup
    runs-on: ubuntu-latest
    steps:
      - run: ./build_server.sh
  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - run: ./test_server.sh

更多信息请参阅 jobs.<job_id>.needs

使用构建矩阵

如果您希望工作流程跨操作系统、平台和语言的多个组合运行测试,可以使用构建矩阵。 构建矩阵是使用 strategy 关键字创建的,它接收构建选项作为数组。 例如,此构建矩阵将使用不同版本的 Node.js 多次运行作业:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [6, 8, 10]
    steps:
      - uses: actions/setup-node@v1
        with:
          node-version: ${{ matrix.node }}

更多信息请参阅 jobs.<job_id>.strategy.matrix

缓存依赖项

GitHub 托管的运行器启动为每个作业的新环境,如果您的作业定期重复使用依赖项,您可以考虑缓存这些文件以帮助提高性能。 缓存一旦创建,就可用于同一仓库中的所有工作流程。

此示例演示如何缓存 ~/.npm 目录:

jobs:
  example-job:
    steps:
      - name: Cache node modules
        uses: actions/cache@v2
        env:
          cache-name: cache-node-modules
        with:
          path: ~/.npm
          key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
          restore-keys: |
            ${{ runner.os }}-build-${{ env.cache-name }}-

更多信息请参阅“缓存依赖项以加快工作流程”。

使用数据库和服务容器

如果作业需要数据库或缓存服务,可以使用 services 关键字创建临时容器来托管服务;生成的容器然后可用于该作业中的所有步骤,并在作业完成后删除。 此示例演示作业如何使用 services 创建 postgres 容器,然后使用 node 连接到服务。

jobs:
  container-job:
    runs-on: ubuntu-latest
    container: node:10.18-jessie
    services:
      postgres:
        image: postgres
    steps:
      - name: Check out repository code
        uses: actions/checkout@v2
      - name: Install dependencies
        run: npm ci
      - name: Connect to PostgreSQL
        run: node client.js
        env:
          POSTGRES_HOST: postgres
          POSTGRES_PORT: 5432

更多信息请参阅“使用数据库和服务容器”。

使用标签路由工作流程

此功能可帮助您将作业分配到特定的自托管运行器。 如果要确保特定类型的运行器处理作业,可以使用标签来控制作业的执行位置。 您可以将标签分配给自托管的运行器,然后在您的 YAML 工作流程中提及这些标签, 确保以可预测的方式路由作业。

此示例显示工作流程如何使用标签来指定所需的运行器:

jobs:
  example-job:
    runs-on: [self-hosted, linux, x64, gpu]

更多信息请参阅“将标签与自托管运行器一起使用”。

使用环境

您可以使用保护规则和机密配置环境。 工作流程中的每个作业都可以引用单个环境。 在将引用环境的作业发送到运行器之前,必须通过为环境配置的任何保护规则。 更多信息请参阅“环境”。

使用工作流程模板

GitHub provides preconfigured workflow templates that you can customize to create your own continuous integration workflow. GitHub analyzes your code and shows you CI templates that might be useful for your repository. 例如,如果仓库包含 Node.js 代码,您就会看到 Node.js 项目的建议。 您可以使用工作流程模板作为基础来构建自定义工作流程,或按原样使用模板。

您可以在 actions/starter-workflows 仓库中浏览工作流程模板的完整列表。

  1. 在 GitHub 上,导航到仓库的主页面。
  2. 在仓库名称下,单击 Actions(操作)
    主仓库导航中的操作选项卡
  3. 如果您的仓库已经有工作流程:在左上角单击 New workflow(新工作流程)
    创建新工作流程
  4. 在您想要使用的模板名称下,单击 Set up this workflow(设置此工作流程)
    设置此工作流程

后续步骤

要继续了解 GitHub Actions,请参阅“与组织共享工作流程”。

此文档对您有帮助吗?

Privacy policy

帮助我们创建出色的文档!

所有 GitHub 文档都是开源的。看到错误或不清楚的内容了吗?提交拉取请求。

做出贡献

或, 了解如何参与。