Я следую учебному пособию о конвейере Jenkins, и я могу получить "привет мир", работающий в док-контейнере узла 6.10.
Но когда я добавил в репозиторий приложение EmberJS по умолчанию (с помощью ember init
) и попытался создать его в конвейере, оно перестало работать при запуске npm install (из-за проблем с доступом к каталогу). Файл Jenkins можно увидеть здесь: https://github.com/CloudTrap/pipeline-tutorial/blob/fix-build/Jenkinsfile
Сообщение об ошибке, напечатанное сборкой, (которое устанавливается локально и запускается с помощью java -jar jenkins.war
на Macbook, не имеет значения, но включено на всякий случай):
npm ERR! Linux 4.9.12-moby
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v6.10.0
npm ERR! npm v3.10.10
npm ERR! path /.npm
npm ERR! code EACCES
npm ERR! errno -13
npm ERR! syscall mkdir
npm ERR! Error: EACCES: permission denied, mkdir '/.npm'
npm ERR! at Error (native)
npm ERR! { Error: EACCES: permission denied, mkdir '/.npm'
npm ERR! at Error (native)
npm ERR! errno: -13,
npm ERR! code: 'EACCES',
npm ERR! syscall: 'mkdir',
npm ERR! path: '/.npm',
npm ERR! parent: 'pipeline-tutorial' }
npm ERR!
npm ERR! Please try running this command again as root/Administrator.
Примечание: я бы не хотел запускать npm install
от имени пользователя root/sudo.
ОБНОВЛЕНИЕ: я был в состоянии сделать некоторый прогресс следующим образом:
Я нашел команду, которую Дженкинс использует для построения с использованием контейнера из журналов:
[Pipeline] withDockerContainer
$ docker run -t -d -u 501:20 -w /long-workspace-directory -v /long-workspace-directory:/long-workspace-directory:rw -v /[email protected]:/[email protected]:rw -e
Таким образом, когда запускается образ докера, его рабочий каталог представляет собой каталог /long-workspace-directory
(это действительно загадочно выглядящий путь рабочей области jenkins), а идентификатор пользователя - 501 (идентификатор группы 20) и т.д. У пользователя нет имени (что явно нарушает другие вещи, не связанные с этим вопросом).
-
Изменен агент для использования Dockefile:
agent { dockerfile { filename 'Dockerfile' args '-v /.cache/ -v /.bower/ -v /.config/configstore/' } }
-
Укажите
args '-v...'
для создания томов для каталогов, необходимых для npm install/bower.