У меня есть Jenkins, работающий как автономный сервер, то есть не работает как контейнер Docker. Для создания приложения с помощью Gradle я использую изображение Docker, как показано ниже.
stages {
stage('Compile') {
steps {
script {
docker.image("gradle:6.2.2-jdk8").inside("-v ${HOME}/.gradle:/gradle/.gradle") {
sh './gradlew clean vaadinPrepareNode build -Pvaadin.productionMode'
sh "mkdir -p ${GRADLE_DEPENDENCY_PATH} && (cd build/dependency; jar -xf ../libs/*.jar)"
}
}
}
}
}
Моя проблема заключается в следующем: существует задача Gradle, которая пытается получить доступ к каталогу /.npm
. Однако пользователь jenkins
, запускающий контейнер Docker (uid=1002(jenkins) gid=1002(jenkins)
), похоже, не имеет прав для этого. Поэтому задача не выполняется.
При изменении оператора конвейера на docker.image("gradle:6.2.2-jdk8").inside("-u root -v ${HOME}/.gradle:/gradle
сборка успешно завершается, но в рабочей области у меня есть папки, принадлежащие root
, которые не могут быть удалены Jenkins.