Skip to main content

Выполнение заданий в контейнере

Используйте контейнер для выполнения шагов задания.

Обзор

Используйте jobs.<job_id>.container для создания контейнера для выполнения всех этапов задания, для которых еще не указан контейнер. При наличии этапов, которые используют действия скрипта и контейнера, действия контейнера будут выполняться как одноуровневые контейнеры в той же сети с теми же подключениями томов.

Если container не задан, все этапы будут выполняться непосредственно на узле, указанном, runs-on, если только этап не относится к действию, настроенному на выполнение в контейнере.

Примечание.

Оболочка по умолчанию для run шагов внутри контейнера sh вместо bash. Это значение может быть изменено на jobs.<job_id>.defaults.run или jobs.<job_id>.steps[*].shell.

Пример. Выполнение задания в контейнере

YAML
name: CI
on:
  push:
    branches: [ main ]
jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container:
      image: node:18
      env:
        NODE_ENV: development
      ports:
        - 80
      volumes:
        - my_docker_volume:/volume_mount
      options: --cpus 1
    steps:
      - name: Check for dockerenv file
        run: (ls /.dockerenv && echo Found dockerenv) || (echo No dockerenv)

При указании только образа контейнера можно опустить ключевое слово image.

jobs:
  container-test-job:
    runs-on: ubuntu-latest
    container: node:18

Инструкции и переопределения Dockerfile

Dockerfile содержит инструкции и аргументы, определяющие содержимое и поведение запуска контейнера Docker. Дополнительные сведения об инструкциях, поддерживаемых Docker, см . в справочнике по Dockerfile в документации по Docker.

Некоторые инструкции Docker взаимодействуют с GitHub Actions, а файл метаданных действия может переопределить некоторые инструкции Docker. Обязательно изучите то, как Dockerfile взаимодействует с GitHub Actions, чтобы предотвратить непредвиденную реакцию на событие.

Справочные сведения см. в разделе Поддержка Dockerfile для GitHub Actions.

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

Используйте jobs.<job_id>.container.image для определения образа Docker, который будет использоваться в качестве контейнера для выполнения действия. Значением может быть имя образа Docker Hub или имя реестра.

Примечание.

Docker Hub обычно накладывает ограничения скорости для операций отправки и извлечения, которые повлияют на задания на локальных запусках. Однако GitHub, размещенные в runner, не подлежат этим ограничениям на основе соглашения между переменными данных.product.github %} и Docker.

Определение учетных данных для реестра контейнеров

Если реестру контейнеров образа требуется проверка подлинности для извлечения образа, можно использовать jobs.<job_id>.container.credentials, чтобы настроить map для username и password. Учетные данные являются теми же значениями, которые будут предоставлены команде docker login.

Пример: определение учетных данных для реестра контейнеров

container:
  image: ghcr.io/owner/image
  credentials:
     username: ${{ github.actor }}
     password: ${{ secrets.github_token }}

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

Используйте jobs.<job_id>.container.env для задания map переменных среды в контейнере.

Предоставление сетевых портов в контейнере

Используйте jobs.<job_id>.container.ports для задания array портов для использования в контейнере.

Подключение томов в контейнере

Используйте jobs.<job_id>.container.volumes для задания array томов, которые будет использовать контейнер. Тома можно использовать для совместного использования данных между службами или другими этапами в задании. Можно указать именованные тома Docker, анонимные тома Docker или подключения привязок на узле.

Чтобы указать том, укажите путь к источнику и назначению:

<source>:<destinationPath>.

<source> — это имя тома или абсолютный путь на хост-компьютере, а <destinationPath> — это абсолютный путь в контейнере.

Пример. Подключение томов в контейнере

volumes:
  - my_docker_volume:/volume_mount
  - /data/my_data
  - /source/directory:/destination/directory

Настройка параметров ресурса контейнера

Используйте jobs.<job_id>.container.options для настройки дополнительных параметров ресурса контейнера Docker. Список параметров см. в разделе docker create параметров.

Предупреждение

Параметры --network и --entrypoint параметры не поддерживаются.