Estoy tratando de obtener una nueva tubería de jenkins para probar nuevas solicitudes de extracción de nuestro código. Estoy usando docker con la ubuntu:14.04
imagen para simular nuestro entorno de producción.
Aquí hay un ejemplo mínimo de trabajo:
#jenkinsfile
stage('Checkout and provision'){
docker.image('ubuntu:14.04').withRun('-u root'){
checkout scm
sh 'chmod -R 770 ./'
sh './init-script.sh'
}
}
y
#init-script.sh
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update -y
sudo apt-get dist-upgrade -y
sudo apt-get install \
apache2 \
php \
php-mysql \
php-xml \
libapache2-mod-auth-mysql \
libapache2-mod-php \
php5-curl \
zip \
htop \
supervisor \
mailutils \
git \
build-essential -y
sudo apt-get autoremove -y
Y el /etc/sudoers
archivo para el contenedor es el siguiente:
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults:jenkins !requiretty
# User alias specification
# Cmnd alias specification
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d
jenkins ALL=(ALL:ALL) NOPASSWD:ALL
El problema que tengo es que Docker no se está ejecutando como root como solía hacerlo y, en cambio, retiene la identificación de usuario del usuario jenkins de la máquina host. Esto hace que sea difícil sudo.
Intenté agregar el usuario jenkins al /etc/passwd
archivo de contenedores y ejecutarlo chmod
contra ese archivo, pero ni siquiera tengo los permisos para hacer ninguno de estos desde el jenkinsfile
.
Con esta configuración, debería ser el usuario root. Sin embargo, veo Error: must run as root
si no uso sudo
o sudo: no tty present and no askpass program specified
si lo hago.
¿Hay una manera correcta de lidiar con esta situación? Idealmente de la jenkinsfile
; Me gustaría evitar crear un adicional Dockerfile
si es posible, ya que esto será un diferenciador adicional entre las pruebas y la producción.