Skip to main content

此版本的 GitHub Enterprise 将停止服务 2022-10-12. 即使针对重大安全问题,也不会发布补丁。 为了获得更好的性能、更高的安全性和新功能,请升级到最新版本的 GitHub Enterprise。 如需升级帮助,请联系 GitHub Enterprise 支持

从 Travis CI 迁移到 GitHub Actions

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

注意:GitHub Enterprise Server 目前不支持 GitHub 托管的运行器。 可以在 GitHub public roadmap 上查看有关未来支持计划的更多信息。

简介

本指南可帮助您从 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 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 GitHub Actions
language: python
python:
  - "3.7"

脚本:
  - 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 可让您手动缓存依赖供以后使用。

GitHub Actions 缓存仅适用于托管在 GitHub.com 或 GitHub Enterprise Server 3.5 及更高版本上的存储库。 有关详细信息,请参阅“缓存依赖项以加快工作流”。

常见任务示例

本节比较了 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@v2
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

后续步骤

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