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 для создания заданий и рабочих процессов, и эти файлы хранятся в репозитории кода. Дополнительные сведения о том, как GitHub Actions использует YAML, см. в разделе "Общие сведения о GitHub Actions".

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

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

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

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

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

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

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

Travis CI и GitHub Actions поддерживают индикаторы состояний, которые позволяют указать, выполняется ли сборка успешно или произошел сбой. Дополнительные сведения см. в разделе «AUTOTITLE».

Использование матрицы

Travis CI и GitHub Actions поддерживают матрицу, что позволяет выполнять тестирование, используя сочетания операционных систем и программных пакетов. Дополнительные сведения см. в разделе «AUTOTITLE».

Ниже приведен пример сравнения синтаксиса для каждой системы.

Синтаксис CI Travis для матрицы

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 на определенную ветвь. Дополнительные сведения см. в разделе «AUTOTITLE».

Ниже приведен пример синтаксиса для каждой системы.

Синтаксис CI Travis для целевых ветвей

branches:
  only:
    - main
    - 'mona/octocat'

Синтаксис GitHub Actions для целевых ветвей

on:
  push:
    branches:
      - main
      - 'mona/octocat'

Проверка подмодулей

Travis CI и GitHub Actions позволяют контролировать, включены ли подмодули в клон репозитория.

Ниже приведен пример синтаксиса для каждой системы.

Синтаксис CI Travis для проверка вне подмодул

git:
  submodules: false

Синтаксис GitHub Actions для проверка вне подмодул

- uses: actions/checkout@v4
  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 могут ограничивать репозиториям доступ к секретам организации. Правила защиты развертывания могут требовать ручного утверждения для рабочего процесса доступа к секретам среды. Дополнительные сведения см. в разделе «AUTOTITLE».

Совместное использование файлов в заданиях и рабочих процессах

GitHub Actions включает встроенную поддержку хранилища артефактов, что позволяет обмениваться файлами между заданиями в рабочем процессе. Вы также можете сохранять итоговые файлы и предоставлять другим рабочим процессам общий доступ к этим файлам. Дополнительные сведения см. в разделе «AUTOTITLE».

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

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

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

Время выполнения параллельных заданий и рабочих процессов в GitHub Actions может отличаться в зависимости от плана GitHub. Дополнительные сведения см. в разделе «AUTOTITLE».

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

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

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

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

Например:

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

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

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

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

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

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

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

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

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

В этом примере показано, как условная конструкция 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или создать собственные действия. Дополнительные сведения см. в разделе «AUTOTITLE».

Ниже приведен пример синтаксиса для каждой системы.

Синтаксис CI Travis для этапов и шагов

language: python
python:
  - "3.7"

script:
  - python script.py

Синтаксис GitHub Actions для шагов и действий

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 для кэширования

language: node_js
cache: npm

Синтаксис GitHub Actions для кэширования

- 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.

Синтаксис CI Travis для переменной среды

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@v4
      - name: Use Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test

Следующие шаги

Чтобы продолжить изучение основных функций GitHub Actions, см. раздел "Изучение GitHub Actions".