Я пытаюсь реализовать конвейер CI / CD с использованием Jenkins и Ansible (не имеет отношения к вопросу).
Я использую контейнер Jekins Docker в VPS (Digital Oceal ) и с помощью docker -compose для настройки его развертывания и управления его жизненным циклом. Поскольку этот конвейер включает сборку и запуск других контейнеров для сборки моих проектов, я смонтировал сокет docker непосредственно в ОС хоста, как вы можете видеть в docker -compose.yml:
version: "3"
services:
jenkins:
container_name: jenkins
image: jenkins-ai
build:
context: jenkins
volumes:
- ./jenkins_volume:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
networks:
- atlas-ci-net
deploy:
restart_policy:
condition: any
nginx:
container_name: nginx
image: nginx
ports:
- 80:80
- 443:443
volumes:
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
deploy:
restart_policy:
condition: any
networks:
- atlas-ci-net
networks:
atlas-ci-net:
( Контейнер Nginx предназначен для реализации простого обратного прокси)
Мои первые попытки запустить контейнеры внутри контейнера Jenkins были успешными (хотя монтирование тома не производилось). Вот пример скрипта, который успешно работал в нем:
docker build -t xxx/node-build:$BUILD_NUMBER -t xxx/node-build:latest .
Вот Dockerfile, который он создавал:
FROM node
RUN npm i -g @zeit/ncc typescript
После этого я попытался запустить другое задание Jenkins (конвейер в факт), который использовал этот образ для создания проекта узла (build = объединить весь проект в файл sigle, используя ncc
). Вот команда, которую я выполнил:
docker run --rm \
-v $PWD:/app \
-w /app \
xxx/node-build \
/bin/bash -c "npm run build && chmod -R 666 dist"
Но в первый раз, когда я попытался запустить этот проект, я получил следующую ошибку:
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-07-31T20_32_26_008Z-debug.log
Когда я запустил контейнер, используя -it
и перечислил содержимое /app
единственный файл там был package-lock.json
. Затем я попытался вручную смонтировать каждый файл и папку и запустить сборку:
docker run --rm \
-v $PWD/src:/app/src \
-v $PWD/package.json:/app/package.json \
-v $PWD/package-lock.json:/app/package-lock.json \
-v $PWD/tsconfig.json:/app/tsconfig.json \
-w /app \
xxx/node-build \
/bin/bash -c "npm run build && chmod -R 666 dist"
Затем я столкнулся со следующей ошибкой:
npm ERR! code EISDIR
npm ERR! syscall read
npm ERR! errno -21
npm ERR! EISDIR: illegal operation on a directory, read
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-07-31T21_27_11_736Z-debug.log
Использование -it
снова для исследования. был сбит с толку, обнаружив, что все файлы и каталоги, кроме package-lock.json
, были смонтированы как пустые каталоги.
Теперь, даже когда я пытаюсь использовать другие рабочие каталоги или не монтировать файлы, все эти файлы отображаются как пустые каталоги!
Что происходит? Я что-то здесь упускаю?