Как скопировать файл из хранилища в докер-контейнер, используемый для работы, в gitlab-ci.yml - PullRequest
0 голосов
/ 06 октября 2018

Как я могу добавить файл из моего проекта в Docker с помощью задания gitlab-ci.Предположим, у меня есть работа ниже в моем .gitlab-ci.yml.

build:master:
  image: ubuntu:latest
  script:
    - cp sample.txt /sample.txt
  stage: build
  only:
    - master

Как скопировать файл sample.txt в образе Ubuntu?Я думал, что это уже запущенный контейнер, поэтому мы не можем выполнить команду копирования напрямую, но должны запустить

docker cp sample.txt mycontainerID:/sample.txt

, но опять же, как я получу mycontainerID?потому что он будет работать внутри Gitlab Runner и любой случайный идентификатор будет назначен для каждого запуска.Мое предположение неверно?Пожалуйста, предложите

Ответы [ 2 ]

0 голосов
/ 14 января 2019

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

Вы можете найти его в / builds / organization / repository
(обратите внимание, что это переменные, и вы должны подстроиться под свою фактическую организацию и имя)
Или с переменной $ CI_PROJECT_DIR

Фактически это каталог "вы", который находится при запуске задания.

Например, это .gitlab-ci.yml из репозитория https://gitlab.com/bluebrown/gitlab-ci-playground

image: alpine

test:
  script:
    - echo "the project directory is - $CI_PROJECT_DIR"
    - cat $CI_PROJECT_DIR/README.md ; echo
    - echo "and where am I? - $PWD"

возвращает этот конвейерный вывод: enter image description here Как вы можете видеть, я мог бы распечатать содержимое файла README.md внутриконтейнер.

0 голосов
/ 13 октября 2018

Ваш бегун уже выполняет script в вашем контейнере докера.Ваша работа здесь:

  • запустите контейнер, используя образ Ubuntu, и смонтируйте там свой проект Git.
  • cp sample.txt от корня проекта Git до контейнера
  • остановка контейнера, говорящего "работа выполнена"

Это в основном то, что означает image: используйте этот докерИзображение для запуска контейнера, который будет выполнять команды, перечисленные в части скрипта.

Я не совсем понимаю, чего вы пытаетесь достичь.Если это задание на сборку, то почему бы вам на самом деле не скопировать файл из Dockerfile и не настроить его для сборки с docker build?Исполнитель оболочки Runner, выполняющий docker build -t your/image:latest -f build/Dockerfile ., подойдет.Затем вы помещаете это изображение в какой-то реестр Docker (например, Gitlab или Docker Hub).

Если ваша цель действительно более сложная и вы хотите просто добавить файл в работающий контейнер, вы можете использовать тот жеRunner (с исполнителем оболочки, а не с докером, поэтому нет image) и запустите что-то вроде

- docker run --name YOUR_CONTAINER_NAME -v $PWD:/mnt ubuntu:latest cp /mnt/sample.txt /sample.txt
- docker commit -m "Commit Message" -a "You" YOUR_CONTAINER_NAME your/image:latest
- docker push your/image:latest
- docker rm YOUR_CONTAINER_NAME

Примечание: я не уверен на 100%, что первый будет работать, но это будетобщая идея создания образа из контейнера без использования фактического файла Docker, если действительно вы не можете достичь своей цели с помощью файла Dockerfile.

...