GitLab Docker Runner для повторного использования установленных программных слоев

Очень типичный сценарий с GitLab CI - это установка нескольких пакетов, необходимых для вашей работы (линтеры, инструменты покрытия кода, вспомогательные средства для развертывания и т. Д.), А затем выполнение ваших фактических этапов / этапов сборки, тестирования и развертывания программное обеспечение.

Docker runner - очень аккуратное и чистое решение, но кажется очень расточительным всегда выполнять шаги, которые устанавливают базовое программное обеспечение. Обычно Docker может кэшировать такие слои, но из-за того, как работает GitLab Docker runner, этого не происходит.

Понимаем ли мы, что создание другого проекта для создания предварительно настроенных образов Docker было бы одним из решений, но есть ли какие-нибудь лучшие? По сути, мы хотим сказать: «Если before раздел не изменился, вы можете повторно использовать изображение с прошлого раза, не нужно переустанавливать wget или что-то еще» .

Есть какое-нибудь подобное решение?


person Torque    schedule 29.01.2020    source источник
comment
Не думаю, что это поддерживается. Подготовленное решение для создания образа докера мне кажется довольно аккуратным. Может быть связано - gitlab.com/gitlab-org/gitlab-foss/issues/ 17861   -  person shakhawat    schedule 29.01.2020
comment
Похоже, об этом уже спрашивали раньше: stackoverflow.com/questions/34820755/   -  person Sebastian Heikamp    schedule 29.01.2020


Ответы (1)


Вы можете использовать реестр вашего проекта gitlab.

eg.

images:
    stage: build
    image: docker
    services:
        - docker:dind
    script:
        - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY # login
        # pull the current image or in case the image does not exit, do not stop the script:
        - docker pull $CI_REGISTRY_IMAGE:latest || true
        # build with the pulled image as cache:
        - docker build --pull --cache-from $CI_REGISTRY_IMAGE:latest -t "$CI_REGISTRY_IMAGE:latest" .
        # push the final image:
        - docker push "$CI_REGISTRY_IMAGE:latest"

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

person RiWe    schedule 29.01.2020
comment
Спасибо, это похоже на то, на что я надеялся! - person Torque; 06.02.2020