#docker #automation #continuous-integration #gitlab #gitlab-ci
#docker #автоматизация #непрерывная интеграция #gitlab ( гитлаб ) #gitlab-ci #gitlab
Вопрос:
Я учусь работать с gitlab CI / CD с помощью docker executor.
Ниже мой gitlab-ci.yml
файл.
image: registry.gitlab.com/vbrin-office/components/karma-tests
stages:
- test
test:
stage: test
script:
- node --version
- git --version
- pwd
- ls
- cd /karmatests
- ls
- npx karma start
Каждый раз, когда конвейер завершает выполнение, я хотел бы зафиксировать контейнер и поместить его в реестр GitLab, чтобы я мог получить к нему доступ позже.
Поскольку мы фактически находимся внутри контейнера docker, для которого я хочу создать образ. Как я мог это сделать? Возможно ли это вообще?
Ответ №1:
Да, это так, но образ должен иметь определенное имя относительно вашего пути к реестру gitlab. Вы можете сделать что-то вроде этого :
docker-build:
stage: package
script:
- docker build -t $CI_REGISTRY_IMAGE:latest .
- docker tag $CI_REGISTRY_IMAGE:latest $CI_REGISTRY_IMAGE:latest
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker push $CI_REGISTRY_IMAGE:latest
only:
- master
Это приведет к отправке изображения только тогда, когда конвейер будет запущен в вашей главной ветке.
Комментарии:
1. Можете ли вы объяснить это подробно? Создает ли команда «docker build.» образ из текущего каталога со всеми файлами в нем? Есть ли в нем содержимое, которое я запускал на предыдущем этапе? Или я должен создать артефакт?
2. Он создает образ на основе файла dockerfile, присутствующего в том же каталоге. . обозначает путь, по которому нужно разместить изображение.
3. Итак, контейнер docker, в котором выполняется каждый этап конвейера, содержит ли он dockerfile внутри него?
4. Да, он извлекает код из репозитория, вы можете проверить журналы, чтобы увидеть.
5. Этот ответ кажется поддельным. Как docker найдет изображение здесь? О каком файле dockerfile мы говорим?