Sto cercando di mettere insieme una nuova pipeline jenkins per testare nuove richieste pull al nostro codice. Sto usando la finestra mobile con l' ubuntu:14.04
immagine per simulare il nostro ambiente di produzione.
Ecco un esempio minimo di lavoro:
#jenkinsfile
stage('Checkout and provision'){
docker.image('ubuntu:14.04').withRun('-u root'){
checkout scm
sh 'chmod -R 770 ./'
sh './init-script.sh'
}
}
e
#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
E il /etc/sudoers
file per il contenitore è il seguente:
#
# 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
Il problema che sto riscontrando è che la finestra mobile non funziona come root come sono abituato e invece conserva l'ID utente dell'utente jenkins dal computer host. Questo rende difficile sudo.
Ho provato ad aggiungere l'utente jenkins al /etc/passwd
file container e in esecuzione chmod
su quel file, ma non ho nemmeno le autorizzazioni per fare uno di questi dal jenkinsfile
.
Con questa configurazione dovrei essere l'utente root. Tuttavia, vedo Error: must run as root
se non uso sudo
o sudo: no tty present and no askpass program specified
se lo faccio.
Esiste un modo corretto di affrontare questa situazione? Idealmente dal jenkinsfile
; Vorrei evitare di crearne uno aggiuntivo, Dockerfile
se possibile, poiché ciò costituirà un ulteriore elemento di differenziazione tra test e produzione.