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

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

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

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

Если реестру контейнеров образа требуется проверка подлинности для извлечения образа, можно использовать 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 параметры не поддерживаются.