从 Travis CI 迁移到 GitHub Actions

GitHub Actions 和 Travis CI 有多个相似之处,这有助于很简便地迁移到 GitHub Actions。

注:GitHub Enterprise Server 2.22 上的 GitHub Actions 支持是有限的公测版。 测试已结束。 GitHub Actions 现在一般可用于 GitHub Enterprise Server 3.0 或更新版本。 更多信息请参阅 GitHub Enterprise Server 3.0 发行说明


注: GitHub 托管的运行器目前在 GitHub Enterprise Server 上不受支持。 您可以在 GitHub 公共路线图 上查看有关未来支持计划的更多信息。

简介

本指南可帮助您从 Travis CI 迁移到 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
matrix:
  include:
    - rvm: 2.5
    - rvm: 2.6.3
jobs:
  build:
    strategy:
      matrix:
        ruby: [2.5, 2.6.3]

定向特定分支

Travis CI 和 GitHub Actions 允许您将 CI 定向到特定分支。 更多信息请参阅“GitHub Actions 的工作流程语法”。

下面是每个系统的语法示例:

Travis CI GitHub Actions
branches:
  only:
    - main
    - 'mona/octocat'
on:
  push:
    branches:
      - main
      - 'mona/octocat'

检出子模块

Travis CI 和 GitHub Actions 都允许您控制子模块是否包含在仓库克隆中。

下面是每个系统的语法示例:

Travis CI GitHub Actions
git:
  submodules: false
- uses: actions/checkout@v2
  with:
    submodules: false

在矩阵中使用环境变量

Travis CI 和 GitHub Actions 可以将自定义环境变量添加到测试矩阵,这可让您在后面的步骤中引用该变量。

在 GitHub Actions中,您可以使用 include 键将自定义环境变量添加到矩阵中。 在此示例中, node-version 的矩阵条目每个都被配置为对 sitedatacenter 环境变量使用不同的值。 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 计划而异。 更多信息请参阅“使用限制、计费和管理”。

在 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 条件使作业或步骤仅在满足条件时才运行。 更多信息请参阅“GitHub Actions 的上下文和表达式语法”。

此示例演示 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
language: python
python:
  - "3.7"

script:
  - python script.py
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

缓存依赖项

Travis CI 和 GitHub Actions 可让您手动缓存依赖供以后使用。 此示例说明每个系统的缓存语法。

Travis CI GitHub Actions
language: node_js
cache: npm
- name: Cache node modules
  uses: actions/cache@v2
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

GitHub Actions 缓存仅适用于 GitHub 托管的运行器。 更多信息请参阅“缓存依赖项以加快工作流程”。

常见任务示例

本节比较了 GitHub Actions 和 Travis CI 执行共同任务的方式。

配置环境变量

您可以在 GitHub Actions 作业中创建自定义环境变量。 例如:

Travis CI GitHub Actions 工作流程
env:
  - MAVEN_PATH="/usr/local/maven"
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

使用 Node.js 构建

Travis CI GitHub Actions 工作流程
install:
  - npm install
script:
  - npm run build
  - npm test
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v1
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

后续步骤

要继续了解 GitHub Actions 的主要功能,请参阅“了解 GitHub Actions”。

此文档对您有帮助吗?隐私政策

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

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

做出贡献

或, 了解如何参与。