코드에 대한 새로운 풀 요청을 테스트하기 위해 새로운 jenkins 파이프 라인을 함께 얻으려고합니다. ubuntu:14.04
이미지 와 함께 docker를 사용하여 프로덕션 환경을 시뮬레이션하고 있습니다.
최소 작동 예는 다음과 같습니다.
#jenkinsfile
stage('Checkout and provision'){
docker.image('ubuntu:14.04').withRun('-u root'){
checkout scm
sh 'chmod -R 770 ./'
sh './init-script.sh'
}
}
과
#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
/etc/sudoers
컨테이너 의 파일은 다음과 같습니다.
#
# 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
내가 겪고있는 문제는도 커가 내가 익숙한 것처럼 루트로 실행되지 않고 대신 호스트 시스템에서 jenkins 사용자의 사용자 ID를 유지한다는 것입니다. 이것은 sudo를 어렵게 만듭니다.
컨테이너 /etc/passwd
파일에 jenkins 사용자를 추가하고 chmod
해당 파일에 대해 실행 하려고 시도했지만 에서 이들 중 하나를 수행 할 권한이 없습니다 jenkinsfile
.
이 구성에서는 루트 사용자 여야합니다. 그러나, 내가 Error: must run as root
사용하지 않는지 sudo
또는 sudo를 no tty present and no askpass program specified
봅니다.
이 상황을 처리하는 올바른 방법이 있습니까? 이상적으로는 jenkinsfile
; Dockerfile
테스트와 프로덕션의 차별화 요소가 될 수 있으므로 가능 하면 추가 항목을 만드는 것을 피하고 싶습니다 .