Построение Jenkins проекта Gradle завершается успешно только при запуске контейнера Gradle Docker как root - PullRequest
0 голосов
/ 22 марта 2020

У меня есть 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.

...