注意
GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。
简介
本指南可帮助你从 Travis CI 迁移到 GitHub Actions。 它会比较它们的概念和语法、描述相似之处,并演示了它们处理常见任务的不同方法。
开始之前
在开始迁移到 GitHub Actions之前,熟悉其工作原理会很有用:
- 要快速查看一个演示 GitHub Actions 作业的示例,请参阅 GitHub Actions快速入门。
- 若要了解基本 GitHub Actions 概念,请参阅 了解GitHub Actions。
比较作业执行
为了让你控制何时执行 CI 任务, GitHub Actions_工作流_ 使用默认情况下并行运行的 作业 。 每个作业都包含按你定义的顺序执行的步骤。 如果需要为作业运行设置和清理操作,可以在每个作业中定义执行这些操作的步骤。
主要相似之处
GitHub Actions Travis CI 共享某些相似之处,并提前了解这些相似之处有助于顺利完成迁移过程。
使用 YAML 语法
Travis CI 并使用 GitHub Actions YAML 创建作业和工作流,这些文件存储在代码的存储库中。 有关如何使用 YAML 的详细信息 GitHub Actions ,请参阅 创建示例工作流。
自定义变量
Travis CI 支持设置变量并在各个阶段之间共享它们。 同样, GitHub Actions 允许为工作流定义变量。 有关详细信息,请参阅“在变量中存储信息”。
默认变量
Travis CI 和 GitHub Actions 两者都包含可在 YAML 文件中使用的默认环境变量。 对于 GitHub Actions,可以看到 变量参考 中列出的这些内容。
并行任务处理
Travis CI 可以使用 stages 并行运行作业。 同样, GitHub Actions 并行运行 jobs 。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。
状态徽章
Travis CI 和 GitHub Actions 都支持状态徽章,可用于表明构建是成功还是失败。 有关详细信息,请参阅“添加工作流状态徽章”。
使用矩阵
Travis CI 和 GitHub Actions 两者都支持矩阵,允许你使用操作系统和软件包的组合来执行测试。 有关详细信息,请参阅“在工作流中运行作业变体”。
下面的示例比较每个系统的语法。
Travis CI 的矩阵语法
matrix:
include:
- rvm: '2.5'
- rvm: '2.6.3'
GitHub Actions 矩阵的语法
jobs:
build:
strategy:
matrix:
ruby: ['2.5', '2.6.3']
定向特定分支
Travis CI 和 GitHub Actions 两者都允许将 CI 定向到特定分支。 有关详细信息,请参阅“GitHub Actions 的工作流语法”。
下面是每个系统的语法示例:
Travis CI 定向特定分支的语法
branches:
only:
- main
- 'mona/octocat'
GitHub Actions 面向特定分支的语法
on:
push:
branches:
- main
- 'mona/octocat'
检出子模块
Travis CI 和 GitHub Actions 两者都允许你控制子模块是否包含在存储库克隆中。
下面是每个系统的语法示例:
Travis CI 的语法用于检出子模块
git:
submodules: false
GitHub Actions 用于签出子模块的语法
- uses: actions/checkout@v6
with:
submodules: false
在矩阵中使用环境变量
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: '14.x'
site: "prod"
datacenter: "site-a"
- node-version: '16.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 中使用不同语言
使用不同语言 GitHub Actions时,可以在作业中创建一个步骤来设置语言依赖项。 有关使用特定语言的信息,请参阅“构建和测试代码”。
执行脚本
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 的阶段和步骤语法
language: python
python:
- "3.7"
script:
- python script.py
GitHub Actions 步骤和操作的语法
jobs:
run_python:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-python@v5
with:
python-version: '3.7'
architecture: 'x64'
- run: python script.py
缓存依赖项
Travis CI 和 GitHub Actions 允许你手动缓存依赖项,以供日后重复使用。
这些示例演示了各个系统的缓存语法。
Travis CI 的缓存语法
language: node_js
cache: npm
用于缓存的GitHub Actions语法
- name: Cache node modules
uses: actions/cache@v4
with:
path: ~/.npm
key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
restore-keys: v1-npm-deps-
常见任务示例
本部分比较 GitHub Actions Travis CI 如何执行常见任务。
配置环境变量
您可以在 GitHub Actions 作业中创建自定义环境变量。
Travis CI 环境变量的语法规则
env:
- MAVEN_PATH="/usr/local/maven"
GitHub Actions 具有环境变量的工作流
jobs:
maven-build:
env:
MAVEN_PATH: '/usr/local/maven'
使用 Node.js 构建
Travis CI 中使用 Node.js 构建
install:
- npm install
script:
- npm run build
- npm test
GitHub Actions 用于使用 Node.js 进行构建的工作流
name: Node.js CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Use Node.js
uses: actions/setup-node@v4
with:
node-version: '16.x'
- run: npm install
- run: npm run build
- run: npm test
后续步骤
若要继续了解主要功能 GitHub Actions,请参阅 撰写工作流程。