Сообщество Hi Stack Overflow!
У меня есть проект maven - java, который должен быть построен с использованием конвейеров jenkins.Для этого я настроил работу, используя образ докера maven:3.3.3
.Все работает, кроме того, что я использую ru.yandex.qatools.embed:postgresql-embedded
.Это работает локально, но на jenkins жалуется на запуск Postgres:
2019-02-08 09:31:20.366 WARN 140 --- [ost-startStop-1] r.y.q.embed.postgresql.PostgresProcess: Possibly failed to run initdb:
initdb: cannot be run as root
Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.
2019-02-08 09:31:40.999 ERROR 140 --- [ost-startStop-1] r.y.q.embed.postgresql.PostgresProcess: Failed to read PID file (File '/var/.../target/database/postmaster.pid' does not exist)
java.io.FileNotFoundException: File '/var/.../target/database/postmaster.pid' does not exist
По-видимому, Postgres не разрешает запускаться с привилегиями суперпользователя по соображениям безопасности.
Я пытался запуститькак пользователь, создав собственную версию docker-образа и добавив в DockerFile следующее:
RUN useradd myuser
USER myuser
И это работает, когда я запускаю образ докера из терминала сервера.Но с помощью конвейера jenkins whoami по-прежнему печатает 'root', что предполагает, что Jenkins Pipeline использует run -u
за схемами, что отменяет DockerFile?
Моя конвейерная работа в настоящее время так проста:
pipeline {
agent {
docker {
image 'custom-maven:1'
}
}
stages {
stage('Checkout') {
...
}
stage('Build') {
steps {
sh 'whoami'
sh 'mvn clean install'
}
}
}
}
Итак, мой вопрос: как мне запустить этот образ докера от имени другого пользователя?Или переключите пользователей перед запуском mvn clean install
?
ОБНОВЛЕНИЕ:
Добавив -u myuser в качестве аргумента в конвейере jenkins, я войду в систему как правильный пользователь, нотогда задание не может получить доступ к файлу журнала jenkins (и, надеюсь, это единственная проблема).Пользователь myuser добавляется в корень группы, но это не делает различий:
agent {
docker {
image 'custom-maven:1'
args '-u myuser'
}
}
И ошибка:
sh: 1: cannot create /var/.../jenkins-log.txt: Permission denied
sh: 1: cannot create /var/.../jenkins-result.txt.tmp: Permission denied
mv: cannot stat ‘/var/.../jenkins-result.txt.tmp’: No such file or directory
touch: cannot touch ‘/var/.../jenkins-log.txt’: Permission denied