Skip to main content

此版本的 GitHub Enterprise 已停止服务 2022-06-03. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

关于工作流程

获取 GitHub Actions 工作流程的高级概述,包括触发器、语法和高级功能。

关于工作流程

工作流程是一个可配置的自动化过程,它将运行一个或多个作业。 工作流程由签入到存储库的 YAML 文件定义,并在存储库中的事件触发时运行,也可以手动触发,或按定义的时间表触发。

Workflows are defined in the .github/workflows directory in a repository, and a repository can have multiple workflows, each of which can perform a different set of tasks. 例如,您可以有一个工作流程来构建和测试拉取请求,另一个工作流程用于在每次创建发布时部署应用程序,还有一个工作流程在每次有人打开新议题时添加标签。

工作流程基础知识

工作流程必须包含以下基本组件:

  1. 将触发工作流程的一个或多个事件
  2. 一个或多个作业,每个作业将在运行器计算机上执行,并运行一系列一个或多个步骤
  3. 每个步骤都可以运行您定义的脚本,也可以运行操作,这是一个可重用的扩展,可以简化您的工作流程。

有关这些基本组件的详细信息,请参阅“了解 GitHub Actions”。

工作流程概述

触发工作流程

工作流程触发器是导致工作流程运行的事件。 这些事件可以是:

  • 工作流程存储库中发生的事件
  • 在 GitHub Enterprise Server 之外发生并在 GitHub Enterprise Server 上触发 repository_dispatch 事件的事件
  • 预定时间
  • 手册

例如,您可以将工作流程配置为在推送到存储库的默认分支、创建发行版或打开议题时运行。

更多信息请参阅“触发工作流程”,有关事件的完整列表,请参阅“触发工作流程的事件”。

工作流程语法

工作流程是使用 YAML 定义的。 有关用于创建工作流程的 YAML 语法的完整参考,请参阅“GitHub Actions 的工作流程语法”。

创建示例工作流程

GitHub Actions 使用 YAML 语法来定义工作流程。 Each workflow is stored as a separate YAML file in your code repository, in a directory named .github/workflows.

您可以在仓库中创建示例工作流程,只要推送代码,该工作流程就会自动触发一系列命令。 In this workflow, GitHub Actions checks out the pushed code, installs the bats testing framework, and runs a basic command to output the bats version: bats -v.

  1. 在您的仓库中,创建 .github/workflows/ 目录来存储工作流程文件。

  2. .github/workflows/ 目录中,创建一个名为 learn-github-actions.yml 的新文件并添加以下代码。

    name: learn-github-actions
    on: [push]
    jobs:
      check-bats-version:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v2
          - uses: actions/setup-node@v2
            with:
              node-version: '14'
          - run: npm install -g bats
          - run: bats -v
    
  3. 提交这些更改并将其推送到您的 GitHub 仓库。

您的新 GitHub Actions 工作流程文件现在安装在您的仓库中,每次有人推送更改到仓库时都会自动运行。 To see the details about a workflow's execution history, see "Viewing the activity for a workflow run."

了解工作流程文件

为帮助您了解如何使用 YAML 语法来创建工作流程文件,本节解释介绍示例的每一行:

name: learn-github-actions
可选 - 将出现在 GitHub 仓库的 Actions(操作)选项卡中的工作流程名称。
on: [push]
指定此工作流程的触发器。 此示例使用推送事件,因此每次有人将更改推送到存储库或合并拉取请求时,都会触发工作流程运行。 This is triggered by a push to every branch; for examples of syntax that runs only on pushes to specific branches, paths, or tags, see "Workflow syntax for GitHub Actions."
jobs:
learn-github-actions 工作流程中运行的所有作业组合在一起。
check-bats-version:
定义名为 check-bats-version 的作业。 子键将定义作业的属性。
  runs-on: ubuntu-latest
将作业配置为在最新版本的 Ubuntu Linux 运行器上运行。 这意味着该作业将在 GitHub 托管的新虚拟机上执行。 For syntax examples using other runners, see "Workflow syntax for GitHub Actions."
  steps:
check-bats-version 作业中运行的所有步骤组合在一起。 此部分下嵌套的每项都是一个单独的操作或 shell 脚本。
    - uses: actions/checkout@v2
uses 关键字指定此步骤将运行 actions/checkout 操作的 v3。 这是一个将存储库签出到运行器上的操作,允许您对代码(如生成和测试工具)运行脚本或其他操作。 每当工作流程将针对存储库的代码运行时,都应使用签出操作。
    - uses: actions/setup-node@v2
      with:
        node-version: '14'
此步骤使用 actions/setup-node@v2 操作来安装指定版本的 Node.js(此示例使用 v14)。 这会将 nodenpm 命令放在 PATH中。
    - run: npm install -g bats
run 关键字指示作业在运行器上执行命令。 在这种情况下,使用 npm 来安装 bats 软件测试包。
    - run: bats -v
最后,您将运行 bats 命令,并且带有输出软件版本的参数。

可视化工作流程文件

在此关系图中,您可以看到刚刚创建的工作流程文件,以及 GitHub Actions 组件在层次结构中的组织方式。 每个步骤执行单个操作或 shell 脚本。 步骤 1 和 2 运行操作,步骤 3 和 4 运行 shell 脚本。 要查找更多为工作流预构建的操作,请参阅“查找和自定义操作”。

工作流程概述

Viewing the activity for a workflow run

When your workflow is triggered, a workflow run is created that executes the workflow. After a workflow run has started, you can see a visualization graph of the run's progress and view each step's activity on GitHub.

  1. 在 您的 GitHub Enterprise Server 实例 上,导航到仓库的主页面。

  2. 在仓库名称下,单击 Actions(操作)

    导航到仓库

  3. 在左侧边栏中,单击您想要查看的工作流程。

    工作流程结果的屏幕截图

  4. 在“Workflow runs(工作流程运行)”下,单击您想要查看的运行的名称。

    工作流程运行的屏幕截图

  5. Jobs(作业)下或可视化图中,单击您要查看的作业。

    选择作业

  6. View the results of each step.

    工作流程运行详细信息的屏幕截图

有关管理工作流程运行(如重新运行、取消或删除工作流程运行)的详细信息,请参阅“管理工作流程运行”。

使用入门工作流程

GitHub 提供预配置的入门工作流程,您可以自定义以创建自己的持续集成工作流程。 GitHub Enterprise Server 分析代码并显示可能适用于您的仓库的 CI 模板入门工作流程。 例如,如果仓库包含 Node.js 代码,您就会看到 Node.js 项目的建议。 您可以使用入门工作流程作为起点来构建自定义工作流程,或按原样使用工作流程。

您可以在 您的 GitHub Enterprise Server 实例 上的 actions/starter-workflows 仓库中浏览入门工作流程的完整列表。

有关使用和创建入门工作流程的详细信息,请参阅“使用入门工作流程”和“为组织创建入门工作流程”。

高级工作流程功能

本节简介了 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

更多信息请参阅“定义先决条件作业”。

使用矩阵

A matrix strategy lets you use variables in a single job definition to automatically create multiple job runs that are based the combinations of the variables. For example, you can use a matrix strategy to test your code in multiple versions of a language or on multiple operating systems. 矩阵是使用 strategy 关键字创建的,该关键字以数组的形式接收构建选项。 例如,此矩阵将使用不同版本的 Node.js 多次运行作业:

jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node: [12, 14, 16]
    steps:
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ matrix.node }}

更多信息请参阅“对作业使用矩阵”。

使用数据库和服务容器

如果作业需要数据库或缓存服务,可以使用 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

更多信息请参阅“使用容器化服务”。

使用标签路由工作流程

如果要确保特定类型的运行器处理作业,可以使用标签来控制作业的执行位置。 除了 self-hosted 的默认标签之外,您还可以向自托管运行器分配标签。 然后,您可以在 YAML 工作流程中引用这些标签,确保以可预测的方式安排作业。 GitHub 托管的运行器已指定预定义的标签。

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

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

工作流程只能在一个所有标签处于 runs-on 数组中的运行器上运行。 作业将优先转到具有指定标签的空闲自托管运行器。

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

使用环境

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