Примечание. В GitHub Enterprise Server в настоящее время не поддерживаются средства выполнения тестов, размещенные в GitHub. Дополнительные сведения о планируемой поддержке в будущем см. в GitHub public roadmap.
Введение
Это руководство поможет вам перейти с Travis CI на GitHub Actions. В нем сравниваются их концепции и синтаксис, описываются сходства и демонстрируются разные подходы к распространенным задачам.
Перед началом работы
Прежде чем начать миграцию на GitHub Actions, рекомендуется ознакомиться с принципами его работы.
- Краткий пример, демонстрирующий задание GitHub Actions см. в разделе "Краткое руководство по GitHub Actions".
- Основные понятия 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 позволяет определять переменные для рабочих процессов. Дополнительные сведения см. в разделе Переменные.
Переменные по умолчанию
В Travis CI и GitHub Actions имеются переменные среды по умолчанию, которые можно использовать в файлах YAML. Для GitHub Actionsэти данные отображаются в разделеПеременные.
Обработка параллельных заданий
Travis CI может использовать stages
для параллельного выполнения заданий. Аналогично, GitHub Actions выполняет jobs
параллельно. Дополнительные сведения см. в разделе Сведения о рабочих процессах.
Значки состояния
Travis CI и GitHub Actions поддерживают индикаторы состояний, которые позволяют указать, выполняется ли сборка успешно или произошел сбой. Дополнительные сведения см. в разделе Добавление эмблемы состояния рабочего процесса.
Использование матрицы
Travis CI и GitHub Actions поддерживают матрицу, что позволяет выполнять тестирование, используя сочетания операционных систем и программных пакетов. Дополнительные сведения см. в разделе Использование матрицы для заданий.
Ниже приведен пример сравнения синтаксиса для каждой системы.
Синтаксис 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 на определенную ветвь. Дополнительные сведения см. в разделе Синтаксис рабочего процесса для GitHub Actions.
Ниже приведен пример синтаксиса для каждой системы.
Синтаксис 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 могут ограничивать репозиториям доступ к секретам организации. Правила защиты развертывания могут требовать ручного утверждения для рабочего процесса доступа к секретам среды. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.
Совместное использование файлов в заданиях и рабочих процессах
GitHub Actions включает встроенную поддержку хранилища артефактов, что позволяет обмениваться файлами между заданиями в рабочем процессе. Вы также можете сохранять итоговые файлы и предоставлять другим рабочим процессам общий доступ к этим файлам. Дополнительные сведения см. в разделе Ключевые функции действий GitHub.
Размещение собственных средств выполнения
Если для ваших заданий требуется определенное оборудование или программное обеспечение, GitHub Actions позволяет размещать собственные средства выполнения и отправлять в них задания для обработки. GitHub Actions также позволяет использовать политики для управления доступом к этим средствам выполнения, чтобы предоставлять доступ на уровне организации или репозитория. Дополнительные сведения см. в разделе Размещение собственных средств выполнения.
Использование различных языков в GitHub Actions
При работе с разными языками в GitHub Actions вы можете создать в задании шаг для настройки зависимостей языка. Дополнительные сведения о работе с определенным языком см. в соответствующем руководстве:
- Создание и тестирование для Node.js
- Создание и тестирование для Python
- Сборка и тестирование в PowerShell
- Сборка и тестирование в Java с помощью Maven
- Сборка и тестирование в Java с помощью Gradle
- Сборка и тестирование в Java с помощью Ant
Выполнение скриптов
GitHub Actions может использовать шаги run
для выполнения скриптов или команд оболочки. Чтобы использовать определенную оболочку, можно задать тип 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или создать собственные действия. Дополнительные сведения см. в разделе Создание действий.
Ниже приведен пример синтаксиса для каждой системы.
Синтаксис 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@v4
with:
node-version: '16.x'
- run: npm install
- run: npm run build
- run: npm test
Следующие шаги
Чтобы продолжить изучение основных функций GitHub Actions, см. раздел "Изучение GitHub Actions".