Если нативный кубик в процессе выполнения изменит окружение воркера, например, установит пакет, создаст или удалит файл и т. д., это окружение останется для всех последующих кубиков, которые выполняются в рамках одного задания.
Docker-кубик — выполняется внутри Docker-контейнера, который запускается на воркере. Внутри контейнера запускается пользовательский скрипт или скрипт контейнера, если для контейнера предусмотрена точка входа (entrypoint).
Если Docker-кубик в процессе выполнения изменит окружение, оно будет доступно последующим кубикам задания, только если изменения производятся внутри директории /sourcecraft. Все остальные изменения удаляются вместе с Docker-контейнером.
При работе из контейнера директории монтируются следующим образом:
директория, в которой находятся связанные с выполняемым заданием файлы, монтируется по пути /sourcecraft;
директория, в которую клонируется репозиторий, и которая по умолчанию назначается рабочей (workdir), монтируется по пути /sourcecraft/workspace.
Пути указанных директорий можно получить из предопределенных переменных окружения$SOURCECRAFT_ROOT_DIRECTORY и $SOURCECRAFT_WORKSPACE соответственно.
Docker-кубик задается с помощью параметра image, в котором указывается название Docker-образа, а также опционально логин, пароль, точка входа и аргументы.
В кубиках вы можете использовать переменные окружения, а также секреты. Для передачи переменных окружения от одного кубика к последующим в виде пар KEY=VALUE предусмотрена предопределенная переменная$SOURCECRAFT_ENV.
Кубики внутри одного задания по умолчанию запускаются последовательно. Кубики могут быть связаны между собой через параметр needs. В параметре указывается список кубиков, которые должны быть выполнены до запуска текущего. Если параметр не указан, кубик будет зависеть от кубика, который определен непосредственно перед ним.
Артефакты, которые могут быть созданы в результате работы кубика, сохраняются для дальнейшего использования. Их можно скачать из конкретного кубика в секции Автоматизации репозитория в течение 14 дней.
Поддерживаются следующие параметры:
name — имя кубика.
script — команда, которая будет выполнена в кубике.
uses — параметр, с помощью которого в текущем кубике можно переиспользовать параметры из другого кубика. При этом отдельные параметры текущего кубика вы можете переопределить. Подробнее см. Пример переиспользования параметров кубика.
needs — список кубиков, которые должны быть выполнены до выполнения текущего.
image — (опционально) Docker-образ, который будет использоваться для выполнения кубика. Подробнее см. в подразделе image.
Также вы можете задать переменные окружения внутри следующих блоков:
workflows — переменные будут доступны во всех кубиках всех заданий конкретного рабочего процесса.
tasks — переменные будут доступны во всех кубиках конкретного задания.
artifacts — список путей к файлам, которые будут созданы в результате работы кубика и сохранены для дальнейшего использования. Артефакты можно будет скачать из конкретного кубика в секции Автоматизации репозитория в течение 14 дней.
Пример конфигурации кубиков с использованием переменных, в том числе предопределенных
workflows:my-workflow:# Здесь определяются переменные, которые будут доступны во всех кубиках # всех заданий рабочего процесса my-workflowenv:WORKFLOW_VAR:workflow-vartasks:-name:my-task# Здесь определяются переменные, которые будут доступны во всех кубиках # внутри задания my-taskenv:TASK_ENV_VAR:Thisvariableisavailableinallcubesofthistask.# Многострочная переменнаяMULTILINE_VAR:|
multi-var
multi-var
this is my multi-var
cubes:-name:my-cube-1# Здесь определяются переменные, которые будут доступны только внутри# кубика my-cube-1env:CUBE_ENV_VAR:Thisvariableisavailableonlyincubemy-cube-1.# Переменная, значение которой задается из секретаSECRET_VAR:${{secrets.<название_секрета>}}script:-echo"$TASK_ENV_VAR"-echo"$MULTILINE_VAR"-echo"$CUBE_ENV_VAR"-echo"$SECRET_VAR"-echo"$WORKFLOW_VAR"-name:my-cube-2# Здесь определяются переменные, которые будут доступны только внутри # кубика my-cube-2env:CUBE_ENV_VAR:Thisvariableisavailableonlyincubemy-cube-2.script:-echo"$TASK_ENV_VAR"-echo"$CUBE_ENV_VAR"# Использование предопределенной переменной-echo"$SOURCECRAFT_TASK"-echo"$WORKFLOW_VAR"-name:my-task-2cubes:-name:my-cube-3script:-echo"$WORKFLOW_VAR"
Пример конфигурации Docker-образа с аутентификацией
Если для доступа к реестру нужна аутентификация, то можно использовать в задании команду docker login или задать настройки аутентификации в блоке image и задействовать секрет, например:
Чтобы выполнить набор команд в контексте контейнера, укажите путь к Docker-образу в реестре в параметрах image или image:name, а набор команд — в script, например:
Если в контейнере переопределена точка входа, то, чтобы выполнить в нем команды из script, сбросьте точку входа. Это можно сделать, указав в параметре entrypoint значение "". Например, вы можете использовать контейнер, у которого по умолчанию задана точка входа ENTRYPOINT ["/usr/bin/docker"]:
Передать аргументы командной строки в Docker-контейнер
Чтобы передать в контейнер с переопределенной точкой входа аргументы, которые нужны для его выполнения, используйте параметр args. Например, это может быть контейнер, который используется для создания нового Docker-образа: