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.04image 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/sudoersfichier 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/passwdfichier conteneurs et d'exécuter chmodce 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 rootsi je n'utilise pas sudoou sudo: no tty present and no askpass program specifiedsi 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 Dockerfilesi possible, car ce sera un autre facteur de différenciation entre les tests et la production.