Skip to main content

从 Travis CI 迁移到 GitHub Actions

GitHub Actions 和 Travis CI 共享多个相似之处,这有助于使其相对简单地迁移到 GitHub Actions。

简介

本指南可帮助你从 Travis CI 迁移到 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 将自定义变量添加到测试矩阵,这样就可以在后面的步骤中引用该变量。

在 <a0 /> 中 ,可以使用密钥将自定义环境变量添加到矩阵。 在此示例中,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: '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 。 有关详细信息,请参阅“计费和使用情况”。

使用不同语言 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,请参阅 撰写工作流程