注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。
简介
本指南可帮助您从 Travis CI 迁移到 GitHub Actions。 它会比较它们的概念和语法、描述相似之处,并演示了它们处理常见任务的不同方法。
开始之前
在开始迁移到 GitHub Actions 之前,熟悉其工作原理很有用:
- 有关演示 GitHub Actions 作业的快速示例,请参阅“GitHub Actions 的快速入门”。
- 若要了解基本 GitHub Actions 概念,请参阅“GitHub Actions 简介”。
比较作业执行
为了让� 控制 CI 任务的执行时间,GitHub Actions 工作流使用默认并行运行的作业 。 每个作业都包含按� 定义的顺序执行的步骤。 如果需要为作业运行设置和清理操作,可以在每个作业中定义执行这些操作的步骤。
主要相似之处
GitHub Actions 和 Travis CI 具有某些相似之处,提前了解这些相似之处有助于顺利迁移过程。
Using YAML syntax
Travis CI 和 GitHub Actions 同时使用 YAML 创建作业和工作流程,并且这些文件存储在代� �仓库中。 有关 GitHub Actions 如何使用 YAML 的详细信息,请参阅“创建工作流文件”。
自定义环境变量
Travis CI 允许您设置环境变量并在各个阶段之间共享它们。 同� �,GitHub Actions 允许您为步骤、作业或工作流程定义环境变量。 有关详细信息,请参阅“环境变量”。
默认环境变量
Travis CI 和 GitHub Actions 都包括可以在 YAML 文件中使用的默认环境变量。 对于 GitHub Actions,可以在“默认环境变量”中查看这些内容。
并行作业处理
Travis CI 可以使用 stages
并行运行作业。 同� �,GitHub Actions 并行运行 jobs
。 有关详细信息,请参阅“创建依赖作业”。
状态徽�
Travis CI 和 GitHub Actions 都支持状态徽� ,用于表示构建是通过还是失败。 有关详细信息,请参阅“将工作流状徽� 添� 到存储库”。
使用矩阵
Travis CI 和 GitHub Actions 都支持矩阵,� 可以使用操作系统和软件包的组合执行测试。 有关详细信息,请参阅“为作业使用矩阵”。
下面是比较每个系统的语法示例:
Travis CI | GitHub Actions |
---|---|
|
|
定向特定分支
Travis CI 和 GitHub Actions 允许您将 CI 定向到特定分支。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。
下面是每个系统的语法示例:
Travis CI | GitHub Actions |
---|---|
|
|
检出子模块
Travis CI 和 GitHub Actions 都允许您控制子模块是否包含在仓库克隆中。
下面是每个系统的语法示例:
Travis CI | GitHub Actions |
---|---|
|
|
在矩阵中使用环境变量
Travis CI 和 GitHub Actions 可以将自定义环境变量添� 到测试矩阵,这可让您在后面的步骤中引用该变量。
在 GitHub Actions 中,可以使用 include
键将自定义环境变量添� 到矩阵。 在此示例中,node-version
的每个矩阵条目都配置为对 site
和 datacenter
环境变量使用不同的值。 然后,Echo site details
步骤使用 env: ${{ matrix.env }}
来引用自定义变量:
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
include:
- node-version: 10.x
site: "prod"
datacenter: "site-a"
- node-version: 12.x
site: "dev"
datacenter: "site-b"
steps:
- name: Echo site details
env:
SITE: ${{ matrix.site }}
DATACENTER: ${{ matrix.datacenter }}
run: echo $SITE $DATACENTER
GitHub Actions 中的关键功能
从 Travis CI 迁移时,请考虑 GitHub Actions 中的以下关键功能:
存储机密
GitHub Actions 允许您存储密� �并在作业中引用它们。 GitHub Actions 组织可以限制哪些仓库能够访问组织机密。 环境保护规则可能需要手动批准工作流程才能访问环境秘密。 有关详细信息,请参阅“� 密机密”。
在作业和工作流程之间共享文件
GitHub Actions 包括对构件存储的集成支持,允许您在工作流程中的作业之间共享文件。 您还可以保存生成的文件,并与其他工作流程共享它们。 有关详细信息,请参阅“在作业之间共享数据”。
托管您自己的运行器
如果您的作业需要特定的硬件或软件,GitHub Actions 允许您托管自己的运行器,并将其作业发送给它们进行处理。 GitHub Actions 还允许您使用策略来控制访问这些运行器的方式,在组织或仓库级别授予访问权限。 有关详细信息,请参阅“托管自己的运行器”。
在 GitHub Actions 中使用不同的语言
在 GitHub Actions 中使用不同语言时,您可以在作业中创建步骤来设置语言依赖项。 有关使用特定语言的信息,请参阅特定指南:
- 生成和测试 Node.js
- 生成和测试 Python
- 生成和测试 PowerShell
- 使用 Maven 生成和测试 Java
- 使用 Gradle 生成和测试 Java
- 使用 Ant 生成和测试 Java
执行脚本
GitHub Actions 可以使用 run
步骤运行脚本或 shell 命令。 若要使用特定的 shell,可以在提供脚本路径时指定 shell
类型。 有关详细信息,请参阅 GitHub Actions 的工作流语法。
例如:
steps:
- name: Run build script
run: ./.github/scripts/build.sh
shell: bash
GitHub Actions 中的错误处理
迁移到 GitHub Actions 时,可能需要注意不同的错误处理方法。
脚本错误处理
如果其中一个步骤返回错误代� �,GitHub Actions 将立即停止作业。 有关详细信息,请参阅 GitHub Actions 的工作流语法。
作业错误处理
GitHub Actions 使用 if
条件在特定情况下执行作业或步骤。 例如,� 可以在某个步骤导致 failure()
时运行另一个步骤。 有关详细信息,请参阅 GitHub Actions 的工作流语法。 还可以使用 continue-on-error
防止工作流在作业失败时停止运行。
迁移条件和表达式的语法
若要在条件表达式下运行作业,Travis CI 和 GitHub Actions 将具有类似的 if
条件语法。 通过 GitHub Actions,可以使用 if
条件来使作业或步骤仅在满足条件时才运行。 有关详细信息,请参阅“表达式”。
此示例演示 if
条件如何控制是否执行步骤:
jobs:
conditional:
runs-on: ubuntu-latest
steps:
- run: echo "This step runs with str equals 'ABC' and num equals 123"
if: env.str == 'ABC' && env.num == 123
将阶段迁移到步骤
Travis CI 使用阶段来运行步骤,而 GitHub Actions 具有步骤来执行操作 。 可以在 GitHub Marketplace 中找到预生成的操作,也可以创建自己的操作。 有关详细信息,请参阅“生成操作”。
下面是每个系统的语法示例:
Travis CI | GitHub Actions |
---|---|
|
|
缓存依赖项
Travis CI 和 GitHub Actions 可让您手动缓存依赖供以后使用。
GitHub Actions 缓存仅适用于托管在 GitHub.com 或 GitHub Enterprise Server 3.5 及更高版本上的存储库。 有关详细信息,请参阅“缓存依赖项以� 快工作流”。
常见任务示例
本节比较了 GitHub Actions 和 Travis CI 执行共同任务的方式。
配置环境变量
您可以在 GitHub Actions 作业中创建自定义环境变量。 例如:
Travis CI | GitHub Actions 工作流程 |
---|---|
|
|
使用 Node.js 构建
Travis CI | GitHub Actions 工作流程 |
---|---|
|
|
后续步骤
若要继续了解 GitHub Actions 的主要功能,请参阅“了解 GitHub Actions”。