Дополнительные параметры для автосборки и автотестирования

Важно

Для этой функции требуется подписка Docker

Функция автоматизированных сборок доступна для пользователей Docker Pro, Team и Business. Обновляет сейчас, чтобы автоматически создавать и отправлять образы. Если вы используете автоматизированные сборки для проекта с открытым исходным кодом, вы можете присоединиться к нашей программе Сообщество с открытым исходным кодом, чтобы узнать, как Docker может поддержать ваш проект в Docker Hub.

Обнови сейчас

Следующие параметры позволяют настраивать автоматизированные процессы сборки и автоматизированного тестирования.

Переменные среды для сборки и тестирования

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

Примечание

Данные переменные среды доступны только для процессов сборки и тестирования и не влияют на среду выполнения вашей службы.

  • SOURCE_BRANCH: имя ветки или тега, который в данный момент тестируется.

  • SOURCE_COMMIT: хэш SHA1 тестируемого коммита.

  • COMMIT_MSG: сообщение от коммита, который тестируется и собирается.

  • DOCKER_REPO: имя создаваемого репозитория Docker.

  • DOCKERFILE_PATH: файл докеров, который в настоящее время создаётся.

  • DOCKER_TAG: создаётся тег репозитория Docker.

  • IMAGE_NAME: имя и тег строящегося репозитория Docker. (Эта переменная представляет собой комбинацию DOCKER_REPO:DOCKER_TAG.)

Если вы используете данные переменные среды сборки в файле docker-compose.test.yml для автоматического тестирования, объявите их в среде службы sut, как показано далее.

services:
  sut:
    build: .
    command: run_tests.sh
    environment:
      - SOURCE_BRANCH

Переопределить команды сборки, тестирования или отправки

Docker Hub позволяет переопределять и настраивать команды build, test и push во время автоматизированных процессов сборки и тестирования с использованием ловушек. Например, вы можете использовать хук сборки для установки аргументов сборки, используемых только в процессе сборки. (Вы также можете настроить кастомные хуки фазы сборки для выполнения действий между этими командами.)

Используйте данные ловушки с осторожностью. Содержимое данных файлов ловушек заменяет базовые команды docker, поэтому вы должны включить в ловушку аналогичную команду сборки, тестирования или отправки, иначе ваш автоматизированный процесс не завершится.

Чтобы переопределить данные этапы, создаёт папку с именем hooks в репозитории исходного кода на том же уровне каталога, что и ваш Dockerfile. Создаёт файл с именем hooks/build, hooks/test или hooks/push и включает в него команды, которые может выполнять процесс компоновщика, например команды docker и bash (с соответствующим префиксом #!/bin/bash).

Данные хуки будут работать на экземпляре Амазон Линукс2, дистрибутиве на основе Red Hat Enterprise Linux (RHEL), который включает такие интерпретаторы, как Perl или Python, и такие утилиты, как git или curl. Полный список доступных интерпретаторов и утилит см. в Документация по Amazon Linux 2.

Пользовательские хуки фазы сборки

Вы можете запускать пользовательские команды между фазами процесса сборки, создавая перехватчики. Хуки позволяют вам предоставлять дополнительные инструкции для процессов автосборки и автотестирования.

Создаёт папку с именем hooks в репозитории исходного кода на том же уровне каталога, что и ваш Dockerfile. Поместить файлы, определяющие хуки, в эту папку. Файлы ловушек могут включать как команды docker, так и команды bash, если они имеют соответствующий префикс #!/bin/bash. Построитель выполняет команды в файлах до и после каждого шага.

Доступны следующие хуки:

Создавать примеры хуков

Переопределите фазу «сборки», чтобы установить переменные

Docker Hub позволяет определять переменные среды сборки либо в файлах ловушек, либо в интерфейсе автоматической сборки (на который затем можно ссылаться в ловушках).

В следующем примере мы определяем обработчик сборки, который использует аргументы docker build для установки переменной CUSTOM на основе значения переменной, которую мы определили с помощью параметров сборки Docker Hub. $DOCKERFILE_PATH — это переменная, которую мы предоставляем с именем Dockerfile, который мы хотим создать, а $IMAGE_NAME — это имя создаваемого образа.

$ docker build --build-arg CUSTOM=$VAR -f $DOCKERFILE_PATH -t $IMAGE_NAME .

Внимание: файл hooks/build переопределяет базовую команду docker сборка, используемую сборщиком, поэтому вы должны включить аналогичную команду сборки в ловушку, иначе автоматическая сборка завершится ошибкой.

Обратитесь к документации docker build, чтобы узнать больше о переменных времени сборки Docker.

Нажмите на несколько репозиториев

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

$ docker tag $IMAGE_NAME $DOCKER_REPO:$SOURCE_COMMIT
$ docker push $DOCKER_REPO:$SOURCE_COMMIT

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

Когда Docker Hub извлекает ветку из репозитория исходного кода, он выполняет неглубокое клонирование (только кончик указанной ветки). Преимущество этого заключается в минимизации объема необходимой передачи данных из репозитория и ускорении сборки, поскольку извлекается только минимальный необходимый код.

Из-за этого, если вам нужно выполняет настраиваемое действие, основанное на другой ветке (например, хук post_push), вы не сможете извлечь эту ветку, если не выполняет одно из следующих действий:

  • Вы можете получает неглубокую проверку целевой ветки, выполнив следующие действия:

    $ git fetch origin branch:mytargetbranch --depth 1
    
  • Вы также можете «отменяет мелирование» клона, который извлекает всю историю Git (и потенциально занимает много времени/перемещает много данных), используя флаг --unshallow при выборке:

    $ git fetch --unshallow origin