Узел Alpine docker Дилемма образа: npm установка без sudo - PullRequest
0 голосов
/ 20 марта 2020

Извините, я не знаком с NPM и docker контейнером, надеюсь, этот вопрос поможет.

Я использую нод: 12.7-alpine образ для сборки Мой проект Angular, и я сталкиваюсь с дилеммой:

Я не могу запустить npm install в контейнере, потому что он каким-то образом обращается к каталогу /. npm. Так как нам нужно повысить привилегию, чтобы получить доступ, я запускаю sudo npm install.

Оказывается, что Alphine не поставляется с модулем sudo.

Тогда я обнаружил, что все на inte rnet рекомендует не запускать установку npm с sudo . Но решение не использовать sudo состоит в том, чтобы использовать sudo для смены владельца /.npm.

А у Alpine просто нет собственного sudo ...

На самом деле я использую CI / CD с использованием Jenkins, node: 12.7-alpine - это очень популярное официальное изображение, мне интересно, есть ли какое-то решение или хорошая практика, которая мне не нужна настроить мое собственное docker изображение только для стадии сборки?

Пожалуйста, поделитесь своим решением! Оценил!

Обновление, Jenkinsfile

pipeline {
    agent any
    stages {
        stage('Build Java') {
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v /root/.m2:/root/.m2'
                }
            }
            steps {
                sh 'mvn -B -DskipTests clean package'
            }
        }
        stage('Build Web') {
            agent {
                docker {
                    image 'node:12.7-alpine'
                }
            }
            steps {
                sh 'cd gobang-web && npm install && npm run build'
            }
        }
        stage('Build image') {
            steps {
                sh 'docker build . -t gobang:1.0'
            }
        }
    }
}

1 Ответ

0 голосов
/ 20 марта 2020

Я нашел решение.

Добавив

environment {
        HOME = '.'
}

в Jenkinsfile.

С первого комментария здесь , он said

Вам нужно только установить HOME =. потому что npm_config_cache $ HOME /.npm, поэтому в этом случае он будет ./.npm вместо /.npm

В контейнере узла из-за отсутствия $HOME, npm пытается получить доступ к /. npm (который недоступен), но на самом деле он должен получить доступ к . /. npm. Установка переменной env HOME в . решает эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...