Enoent ошибка переименования в NPM через docker - PullRequest
1 голос
/ 20 февраля 2020

У меня есть сценарий CI для компиляции мобильного приложения на нативном скрипте, который выполняется в контейнере docker.

При попытке запустить его появляется следующая ошибка:

npm ERR! code ENOENT
npm ERR! syscall rename
npm ERR! path /app/node_modules/.staging/proxy-lib-1731e398
npm ERR! dest /app/node_modules/nativescript/node_modules/proxy-lib
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, rename '/app/node_modules/.staging/proxy-lib-1731e398' -> '/app/node_modules/nativescript/node_modules/proxy-lib'
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!     /.npm/_logs/2020-02-20T10_15_12_334Z-debug.log
Could not update the project! Reason is: Command npm failed with exit code 254

Из того, что мне удалось установить sh, это похоже на NPM проблему, связанную с разрешениями.

Странно то, что поведение проявляется только при использовании через docker .

Компиляция приложения на моем хосте работает, но когда я делаю это в контейнере docker на том же хосте, я получаю эту ошибку.

Я много перепутал с разрешениями из npm связанных папок, так как в прошлом я был свидетелем подобной проблемы, но сейчас мне кажется, что я не могу заставить это работать.

Относительно docker и разрешений, это то, что я установил на данный момент:

# fix for docker npm permissions
RUN mkdir -p /.npm
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.npm

# fix for docker npm permissions
RUN mkdir -p /.config
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.config

# fix for docker npm permissions
RUN mkdir -p /root/.npm
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /root/.npm

# fix for docker npm permissions
RUN mkdir -p /root/.config
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /root/.config

# needed for npm install and nativescript install
RUN mkdir -p $NVM_DIR/versions/node/v$NODE_VERSION/lib/node_modules
RUN chown -R $DOCKER_USER:$DOCKER_GROUP $NVM_DIR/versions/node/v$NODE_VERSION/

# needed for nativescript install
RUN mkdir -p /.local
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.local

# change owner of android sdk
RUN chown -R $DOCKER_USER:$DOCKER_GROUP $ANDROID_HOME

# change owner of android local settings folder
RUN mkdir -p /.android
RUN touch /.android/repositories.cfg
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.android

# change owner of android local settings folder
RUN mkdir -p /.gradle
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.gradle

# change owner of crashlytics local settings folder
RUN mkdir -p /.crashlytics
RUN chown -R $DOCKER_USER:$DOCKER_GROUP /.crashlytics

Пользовательские и групповые переменные docker равны 106 и 112 соответственно.

NPM версия равна 6.13.4

Версия узла: v12.14.0

** ОБНОВЛЕНИЕ ** На основании оставленного комментария b y David Maze, я оставляю здесь некоторую дополнительную информацию:

Я запускаю контейнер docker, используя приведенную ниже команду, и сопоставляю только том с той папкой на хосте, где находится источник. Одним из первых шагов сборки является полное удаление папки модулей узла, а также очистка кэша.

Docker команда:

docker run -it -v my_host_folder:/app alfasoft/node-nativescript:0.17 bash

После что, и внутри контейнера docker я выполняю все шаги, которые у меня были в моем Jenkinsfile (su для пользователя jenkins, измените на bash и затем запустите все это):

rm -rf node_modules
source /usr/local/nvm/nvm.sh
nvm use default
echo "Clearing NPM Cache"
npm cache clear --force
echo "Running NPM Install"
npm install
echo "Install angular devkit"
npm install --save --unsafe-perm @angular-devkit/build-angular
echo "Installing Nativescript"
npm install -g nativescript
echo "Installing TNS"
tns install
echo "TNS doctor"
tns doctor
echo "TNS platform remove android"
tns platform remove android
echo "TNS platform add android"
tns platform add android
echo "TNS update"
tns update
echo "build android"
tns build android --hmr --env.prod --clean --env.snapshot --env.uglify

Any намек на то, почему это может происходить?

...