Назад | Перейти на главную страницу

как установить громкость изображения в gitlab-runner с помощью docker Executionor

Хорошо, поэтому я исследовал все это и, похоже, не могу найти окончательного ответа.

Я хочу знать, как исполнитель докеров gitlab-runner устанавливает тома для образа. Я вижу из второго опубликованного мной URL-адреса, вы можете поместить каталог на хост, который будет использоваться изображением, так же, как и с параметром -v в docker run, однако это абсолютный путь, который не может работать, если запущен параллельные задания, так как каталог изменится. Однако я не могу найти, могу ли я использовать $ PWD для каталога сборки или это сработает, поскольку файл config.toml находится в другом месте. В документации из того, что я прочитал, не указано, как это будет работать или может ли это работать. Я пытаюсь найти ответы, прежде чем потрачу часы во время следующего спринта, пытаясь заставить работать что-то, что может работать, а может и не работать. Надеюсь на понимание.

Итак, мой вопрос: сталкивался ли кто-нибудь с этой проблемой раньше, и если да, то как вы его настроили, чтобы каталог сборки был каталогом, передаваемым в образ докера? Так же, как если бы вы запускали docker build с параметром -v или docker compose с помощью volume:.

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

Я также хочу избежать создания пользовательского образа докера, потому что я не хочу помещать репозиторий git в образ докера. Я хочу только создать дополнительные образы докеров, которые можно повторно использовать в репозиториях CI / CD, поэтому я не хочу добавлять это как команду в сценарии оболочки, которые будут скопированы в образ и, следовательно, сделать образ не пригодным для повторного использования.

Если это невозможно, есть ли способ «экспортировать» каталог в качестве переменной в образ докера? Я не думаю, что есть, так как докер должен передавать объем образу при запуске.

Я также не хочу создавать образ докера каждый раз, когда я запускаю тест в CI / CD, поскольку это может занять много времени и дорого. Я бы предпочел передать том и запустить команды, необходимые для проведения теста.

Команда при запуске в сценарии оболочки: $ docker run -d -p 80:80 --name my-apache-php-app -v "$ PWD": / var / www / html php: 7.0-apache

Надеюсь, это правильный форум для этого вопроса, не был уверен, подпадает ли он под stackoverflow или serverfault.

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

Ссылки:

https://docs.gitlab.com/runner/executors/docker.html

https://docs.gitlab.com/runner/configuration/advanced-configuration.html#volumes-in-the-runners-docker-section

Ответ ... он клонируется в каталог сборки в образе, создавая каталог, а затем клонируя его, что очень похоже на вызов docker exec. Итак, когда вы запускаете команды, вы запускаете их в контейнере сборки, этот образ контейнера устанавливается с помощью ключа 'image:'. Итак, чтобы получить скрипты из хост-системы в контейнер сборки, вам нужно будет установить том с хоста на контейнер сборки. Итак, я поместил дополнительный каталог в свой образ, я назвал его tools_for_ci, затем я монтирую каталог со всеми этими сценариями к образу. Это прекрасно работает. Теперь возникает проблема, что образ докера не может общаться с сервисами взад и вперед. Это известная помеха с исполнителем докеров, без улучшения сайта, все проблемы, которые я видел, отмечены невыполненными. Так что, к сожалению, не похоже, что это исправление будет реализовано в ближайшее время.

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

Однако докер в докере, когда он привязан к сокету докера, сохраняет изображения, поэтому вам не нужно каждый раз повторно загружать. Так что я могу попытаться обойти проблему с обменом данными между изображением и службами.