# Переход с Travis CI на GitHub Actions

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

## Введение

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

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

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

* Краткий GitHub Actions пример, демонстрирующий задание, см. в разделе [Быстрый старт для GitHub Actions](/ru/actions/get-started/quickstart).
* Сведения о основных GitHub Actions понятиях см. в разделе [Хранение и предоставление общего доступа к данным с артефактами рабочего процесса](/ru/actions/tutorials/store-and-share-data#passing-data-between-jobs-in-a-workflow).

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

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

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

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

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

Ci Travis и GitHub Actions yamL используют YAML для создания заданий и рабочих процессов, и эти файлы хранятся в репозитории кода. Дополнительные сведения об GitHub Actions использовании YAML см. в разделе [Создание примера рабочего процесса](/ru/actions/tutorials/create-an-example-workflow).

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

Travis CI позволяет задавать переменные и совместно использовать их между этапами. Аналогичным образом GitHub Actions можно определить переменные для рабочего процесса. Дополнительные сведения см. в разделе [Хранение сведений в переменных](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables).

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

Travis CI и GitHub Actions оба включают переменные среды по умолчанию, которые можно использовать в файлах YAML. Для GitHub Actionsэтого вы можете просмотреть их в [Справочник по переменным](/ru/actions/reference/workflows-and-actions/variables#default-environment-variables).

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

Travis CI может использовать `stages` для параллельного выполнения заданий. Аналогичным образом GitHub Actions выполняется `jobs` параллельно. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idneeds).

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

Трэвис CI и GitHub Actions индикаторы состояния поддержки, которые позволяют указать, передается ли сборка или происходит сбой.
Дополнительные сведения см. в разделе [Добавление эмблемы состояния рабочего процесса](/ru/actions/how-tos/monitor-workflows/add-a-status-badge).

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

Travis CI и GitHub Actions оба поддерживают матрицу, позволяя выполнять тестирование с помощью сочетаний операционных систем и пакетов программного обеспечения. Дополнительные сведения см. в разделе [Выполнение вариантов заданий в рабочем процессе](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/run-job-variations).

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

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

```yaml
matrix:
  include:
    - rvm: '2.5'
    - rvm: '2.6.3'
```

#### GitHub Actions синтаксис матрицы

```yaml
jobs:
  build:
    strategy:
      matrix:
        ruby: ['2.5', '2.6.3']
```

### Нацеливание на конкретные ветви

Travis CI и GitHub Actions оба позволяют использовать ci в определенную ветвь. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#onpushbranchestagsbranches-ignoretags-ignore).

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

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

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

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

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

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

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

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

#### Синтаксис TRAvis CI для проверки вложенных модулей

```yaml
git:
  submodules: false
```

#### GitHub Actions синтаксис для проверки вложенных модулей

```yaml
- uses: actions/checkout@v6
  with:
    submodules: false
```

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

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

В GitHub Actionsэтом случае ключ можно использовать `include` для добавления пользовательских переменных среды в матрицу. В этом примере записи матрицы для `node-version` каждая из них настроена для использования различных значений для переменных среды `site` и `datacenter`. Затем шаг `Echo site details` использует `env: ${{ matrix.env }}` для ссылки на пользовательские переменные:

```yaml
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 организации могут ограничить доступ к секретам организации. Правила защиты развертывания могут требовать ручного утверждения для рабочего процесса доступа к секретам среды. Дополнительные сведения см. в разделе [Секреты](/ru/actions/concepts/security/secrets).

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

GitHub Actions включает встроенную поддержку хранилища артефактов, позволяя совместно использовать файлы между заданиями в рабочем процессе. Вы также можете сохранять итоговые файлы и предоставлять другим рабочим процессам общий доступ к этим файлам. Дополнительные сведения см. в разделе [Понимание GitHub Actions](/ru/actions/get-started/understand-github-actions).

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

Если для заданий требуется определенное оборудование или программное обеспечение, GitHub Actions вы можете разместить собственных средств выполнения и отправить задания в них для обработки.
GitHub Actions также позволяет использовать политики для управления доступом к этим средствам выполнения, предоставляя доступ на уровне организации или репозитория. Дополнительные сведения см. в разделе [Управление локальными средствами выполнения](/ru/actions/how-tos/manage-runners/self-hosted-runners).

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

Время выполнения параллельных заданий и рабочих GitHub Actions процессов может отличаться в зависимости от GitHub плана. Дополнительные сведения см. в разделе [Выставление счетов и использование](/ru/actions/concepts/billing-and-usage).

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

При работе с различными языками GitHub Actionsможно создать шаг в задании для настройки зависимостей языка. Дополнительные сведения о работе с определенным языком см. в разделе [Создание и тестирование кода](/ru/actions/tutorials/build-and-test-code).

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

GitHub Actions можно использовать `run` шаги для выполнения скриптов или команд оболочки. Чтобы использовать определенную оболочку, можно задать тип `shell` при указании пути к скрипту. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idstepsrun).

Например:

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

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

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

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

GitHub Actions немедленно останавливает задание, если один из шагов возвращает код ошибки. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#exit-codes-and-error-action-preference).

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

GitHub Actions использует `if` условные условия для выполнения заданий или шагов в определенных ситуациях. Например, вы можете запустить выполнение некоторого шага, когда другой шаг приводит к `failure()`. Дополнительные сведения см. в разделе [Синтаксис рабочего процесса для GitHub Actions](/ru/actions/reference/workflows-and-actions/workflow-syntax#example-using-status-check-functions). Вы также можете использовать [`continue-on-error`](/ru/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error) для предотвращения остановки выполнения рабочего процесса при сбое задания.

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

Для выполнения заданий в условных выражениях Travis CI и GitHub Actions совместного использования аналогичного `if` синтаксиса условия.
GitHub Actions позволяет использовать условное `if` условие, чтобы предотвратить выполнение задания или шага, если условие не выполнено. Дополнительные сведения см. в разделе [Оценка выражений в рабочих процессах и действиях](/ru/actions/reference/workflows-and-actions/expressions).

В этом примере показано, как условная конструкция `if` может управлять выполнением шага:

```yaml
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](https://github.com/marketplace?type=actions)можно найти или создать собственные действия. Дополнительные сведения см. в разделе [Повторное выполнение автоматизации](/ru/actions/how-tos/reuse-automations).

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

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

```yaml
language: python
python:
  - "3.7"

script:
  - python script.py
```

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

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

```yaml
language: node_js
cache: npm
```

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

```yaml
- 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 и Трэвис CI выполняют распространенные задачи.

### Настройка переменных среды

В задании можно создавать пользовательские GitHub Actions переменные среды.

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

```yaml
env:
  - MAVEN_PATH="/usr/local/maven"
```

#### GitHub Actions Рабочий процесс с переменной среды

```yaml
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'
```

### Сборка с помощью Node.js

#### Travis CI для строительства с Node.js

```yaml
install:
  - npm install
script:
  - npm run build
  - npm test
```

#### GitHub Actions рабочий процесс для создания с помощью Node.js

```yaml
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@v7
        with:
          node-version: '16.x'
      - run: npm install
      - run: npm run build
      - run: npm test
```

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

Дополнительные сведения о основных функциях GitHub Actionsсм. в разделе [Написание рабочих процессов](/ru/actions/how-tos/write-workflows).