J'essaie de réunir un nouveau pipeline jenkins pour tester de nouvelles demandes d'extraction vers notre code. J'utilise docker avec l' ubuntu:14.04
image pour simuler notre environnement de production.
Voici un exemple de travail minimum:
#jenkinsfile
stage('Checkout and provision'){
docker.image('ubuntu:14.04').withRun('-u root'){
checkout scm
sh 'chmod -R 770 ./'
sh './init-script.sh'
}
}
et
#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
Et le /etc/sudoers
fichier du conteneur est le suivant:
#
# 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
Le problème que je rencontre est que Docker ne fonctionne pas en tant que root comme je le suis et conserve à la place l'ID utilisateur de l'utilisateur jenkins de la machine hôte. Cela rend difficile le sudo.
J'ai essayé d'ajouter l'utilisateur jenkins au /etc/passwd
fichier conteneurs et d'exécuter chmod
ce fichier, mais je n'ai même pas les autorisations pour effectuer l'une ou l'autre de ces opérations depuis le jenkinsfile
.
Avec cette configuration, je devrais être l'utilisateur root. Cependant, je vois Error: must run as root
si je n'utilise pas sudo
ou sudo: no tty present and no askpass program specified
si je le fais.
Existe-t-il une manière correcte de gérer cette situation? Idéalement du jenkinsfile
; J'aimerais éviter d'en créer un Dockerfile
si possible, car ce sera un autre facteur de différenciation entre les tests et la production.