Обзор
Используйте jobs.<job_id>.container
для создания контейнера для выполнения всех этапов задания, для которых еще не указан контейнер. При наличии этапов, которые используют действия скрипта и контейнера, действия контейнера будут выполняться как одноуровневые контейнеры в той же сети с теми же подключениями томов.
Если container
не задан, все этапы будут выполняться непосредственно на узле, указанном, runs-on
, если только этап не относится к действию, настроенному на выполнение в контейнере.
Note
Оболочка по умолчанию для run
шагов внутри контейнера sh
вместо bash
. Это значение может быть изменено на jobs.<job_id>.defaults.run
или jobs.<job_id>.steps[*].shell
.
Пример. Выполнение задания в контейнере
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)
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
".
Warning
Параметры --network
и --entrypoint
параметры не поддерживаются.