मैं हमारे कोड में नए पुल अनुरोधों का परीक्षण करने के लिए एक नई जेनकींस पाइपलाइन प्राप्त करने की कोशिश कर रहा हूं। मैं ubuntu:14.04
हमारे उत्पादन वातावरण का अनुकरण करने के लिए छवि के साथ डॉक का उपयोग कर रहा हूं ।
यहाँ एक न्यूनतम काम करने का उदाहरण है:
#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
मेरे पास समस्या यह है कि docker रूट के रूप में नहीं चल रहा है जैसा कि मैं उपयोग कर रहा हूं और इसके बजाय होस्ट मशीन से जेनकिंस उपयोगकर्ता की उपयोगकर्ता आईडी को बनाए रखना है। इससे सूडो में दिक्कत होती है।
मैंने जेनकिंस उपयोगकर्ता को कंटेनर /etc/passwd
फ़ाइल में जोड़ने और chmod
उस फ़ाइल के खिलाफ चलने की कोशिश की है, लेकिन इनमें से दोनों में से किसी को भी करने की अनुमति नहीं है jenkinsfile
।
इस कॉन्फ़िगरेशन के साथ मैं रूट उपयोगकर्ता होना चाहिए। हालाँकि, मैं या तो देखता Error: must run as root
हूं कि मैं उपयोग नहीं करता sudo
या सुडोल: no tty present and no askpass program specified
यदि मैं करता हूं।
क्या इस स्थिति से निपटने का एक सही तरीका है? आदर्श रूप से jenkinsfile
; मैं एक अतिरिक्त बनाने से बचना चाहूंगा Dockerfile
क्योंकि यह परीक्षण और उत्पादन के बीच एक और अंतर होगा।