Зависимости, установленные с помощью Dockerfile, будут недоступны на последующих этапах конвейера.Как включить? - PullRequest
0 голосов
/ 29 декабря 2018

В настоящее время используется Jenkins Blue Ocean, чтобы попытаться настроить новый конвейер.Это проект, основанный на узлах, и я успешно запускаю npm install в Dockerfile, однако на более поздних этапах конвейера не будет установлен node_modules.Это поведение довольно странное.

Jenkinsfile.

pipeline {
  agent {
    dockerfile {
      filename 'Dockerfile.prod'
    }
  }
  stages {
    stage('Test') {
      steps {
        sh 'ls node_modules'
      }
    }
  }
}

Dockerfile.prod

FROM node:8

ADD . /var/www    
WORKDIR /var/www
RUN ["npm", "install"]

Во время сборки Dockerfile:

Step 4/4 : RUN ["npm", "install"]

 ---> Running in de3cd138a40e
...
added 1283 packages in 39.842s

Removing intermediate container de3cd138a40e

Внутриtest этап Jenkinsfile:

+ ls node_modules

ls: cannot access node_modules: No such file or directory

1 Ответ

0 голосов
/ 30 декабря 2018

Проблема была решена.После того, как Jenkins скомпилирует исходный файл dockerfile, для последующих этапов конвейера он правильно запускает его.Тем не менее, если посмотреть журналы заданий (не в окне blueocean), можно увидеть, что Jenkins переопределяет WORKDIR при запуске контейнера docker run -t -d -u 1000:1000 -w /var/jenkins_home/workspace/workspace_name.Поэтому необходимо вручную перейти к ожидаемому WORKDIR.

...