В Gitlab CI / CD, как зафиксировать и опубликовать контейнер docker, на котором выполняются наши этапы

#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 мы говорим?