Skip to main content
We publish frequent updates to our documentation, and translation of this page may still be in progress. For the most current information, please visit the English documentation.

Migrating from Travis CI to GitHub Actions

GitHub Actions and Travis CI share multiple similarities, which helps make it relatively straightforward to migrate to GitHub Actions.

Введение

Это руководство поможет вам перейти с Travis CI на GitHub Actions. В нем сравниваются их концепции и синтаксис, описываются сходства и демонстрируются разные подходы к распространенным задачам.

Перед началом работы

Прежде чем начать миграцию на GitHub Actions, рекомендуется ознакомиться с принципами его работы.

Сравнение выполнения заданий

Чтобы управлять выполнением задач CI, рабочий процесс GitHub Actions использует задания, которые по умолчанию выполняются параллельно. Каждое задание содержит шаги, выполняемые в определенной последовательности. Если вам нужно выполнять действия по настройке и очистке задания, можно определить шаги для выполнения этих действий в каждом задании.

Ключевые сходства

GitHub Actions и Travis CI имеют определенные сходства, и если вы будете понимать их заранее, это поможет сделать процесс миграции более гладким.

Использование синтаксиса YAML

В Travis CI и GitHub Actions используется YAML для создания заданий и рабочих процессов, и эти файлы хранятся в репозитории кода. Дополнительные сведения о том, как GitHub Actions использует YAML, см. в разделе Создание файла рабочего процесса.

Пользовательские переменные

Travis CI позволяет задавать переменные и совместно использовать их между этапами. Аналогичным образомGitHub Actions позволяет определять переменные для рабочих процессов. Дополнительные сведения см. в разделе Variables.

Переменные по умолчанию

В Travis CI и GitHub Actions имеются переменные среды по умолчанию, которые можно использовать в файлах YAML. Для GitHub Actions они отображаются в разделе "AUTOTITLE".

Обработка параллельных заданий

Travis CI может использовать stages для параллельного выполнения заданий. Аналогично, GitHub Actions выполняет jobs параллельно. Дополнительные сведения см. в разделе About workflows.

Значки состояния

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 на определенную ветвь. Дополнительные сведения см. в разделе Workflow syntax for 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@v3
  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: 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 включает встроенную поддержку хранилища артефактов, что позволяет обмениваться файлами между заданиями в рабочем процессе. Вы также можете сохранять итоговые файлы и предоставлять другим рабочим процессам общий доступ к этим файлам. Дополнительные сведения см. в разделе Essential features of GitHub Actions.

Размещение собственных средств выполнения

Если для ваших заданий требуется определенное оборудование или программное обеспечение, GitHub Actions позволяет размещать собственные средства выполнения и отправлять в них задания для обработки. GitHub Actions также позволяет использовать политики для управления доступом к этим средствам выполнения, чтобы предоставлять доступ на уровне организации или репозитория. Дополнительные сведения см. в разделе Размещение собственных средств выполнения.

Параллельные задания и время выполнения

Время выполнения параллельных заданий и рабочих процессов в GitHub Actions может отличаться в зависимости от плана GitHub. Дополнительные сведения см. в разделе Usage limits, billing, and administration.

Использование различных языков в GitHub Actions

При работе с разными языками в GitHub Actions вы можете создать в задании шаг для настройки зависимостей языка. Дополнительные сведения о работе с определенным языком см. в соответствующем руководстве:

Выполнение скриптов

GitHub Actions может использовать шаги run для выполнения скриптов или команд оболочки. Чтобы использовать определенную оболочку, можно задать тип shell при указании пути к скрипту. Дополнительные сведения см. в разделе Workflow syntax for GitHub Actions.

Пример:

steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash

Обработка ошибок в GitHub Actions

При миграции на GitHub Actions существуют разные подходы к обработке ошибок, о которых вам следует знать.

Обработка ошибок скрипта

GitHub Actions немедленно останавливает задание, если один из шагов возвращает код ошибки. Дополнительные сведения см. в разделе Workflow syntax for GitHub Actions.

Обработка ошибок задания

GitHub Actions использует условные конструкции if для выполнения заданий или шагов в определенных ситуациях. Например, вы можете запустить выполнение некоторого шага, когда другой шаг приводит к failure(). Дополнительные сведения см. в разделе Workflow syntax for GitHub Actions. Вы также можете использовать continue-on-error для предотвращения остановки выполнения рабочего процесса при сбое задания.

Синтаксис миграции для условных конструкций и выражений

Для запуска заданий с условными выражениями Travis CI и GitHub Actions используют аналогичный синтаксис условий if. GitHub Actions позволяет использовать условную конструкцию if для предотвращения выполнения задания или шага, если условие не выполняется. Дополнительные сведения см. в разделе Expressions.

В этом примере показано, как условная конструкция 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@v4
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Кэширование зависимостей

Travis CI и GitHub Actions позволяют вручную кэшировать зависимости для последующего повторного использования.

В этом примере демонстрируется синтаксис кэша для каждой системы.

Travis CI Действия GitHub
language: node_js
cache: npm
- name: Cache node modules
  uses: actions/cache@v3
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

Примеры распространенных задач

В этом разделе сравнивается, как 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@v3
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

Дальнейшие действия

Дополнительные сведения об основных функциях GitHub Actions см. в разделе Изучение GitHub Actions.