注:GitHub Enterprise Server 2.22 上的 GitHub Actions 支持是有限的公测版。 要查看外部存储要求并请求访问测试版,请参阅“启用 GitHub Actions 和配置存储”。
注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。
概览
本文介绍了 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
来定义。
在此示例中,setup
、build
和 test
作业连续运行,build
和 test
取决于其前面的作业成功完成:
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 Actions,请参阅“与组织共享工作流程”。