# #docker #gitlab #gitlab-ci #gitlab-ci-runner
Вопрос:
Я понимаю, что делает before_script. Он выполняет команды для запуска до выполнения команд задания.
Но как это на самом деле работает под капотом?
Если, например, в before_script
команде a выполняется то, что в обычных условиях, выполняемое в фоновом режиме, может длиться в течение script
всего времени, которое будет прервано после завершения области before_script
действия?
Ответ №1:
script
блоке переменную, заданную, before_script
как в следующем фрагменте кода:
before_script:
- export DOCKER_IMAGE="${CI_REGISTRY_IMAGE}/app@${CI_IMAGE_DIGEST}"
script:
- echo $DOCKER_IMAGE
Это не сработало бы, если бы сценарии выполнялись в разных вложенных ячейках.
Если вы хотите быть уверены, что фоновая команда не будет уничтожена, вы можете просто добавить wait
команду.
ОБНОВЛЕНИЕ-1:
Эта простая .gitlab-ci.yml
настройка:
stages:
- test
test:
stage: test
before_script:
- echo "PID $"
script:
- echo "PID $"
tags:
- shell
выводит следующий вывод:
это подтверждает то, что я писал раньше.
ОБНОВЛЕНИЕ-2:
Следующий файл .gitlab-ci.yml
:
stages:
- test
test:
stage: test
before_script:
- bin/script.sh amp;
script:
- echo "End of the script block"
- wait
tags:
- shell
где:
$ cat bin/script.sh
#!/bin/bash
sleep 120
echo "End of a long script"
показывает, что wait
команда предотвращает script.sh
уничтожение:
Комментарии:
1. Как это показывает, что это один и тот же процесс? Может быть так, что переменные среды просто «перенаправляются» в скрипт, который выполняется как отдельный процесс
2. Я добавил тест, чтобы дать лучшие доказательства.