Saya mencoba untuk mendapatkan pipa jenkins baru bersama untuk menguji permintaan tarik baru ke kode kami. Saya menggunakan buruh pelabuhan dengan ubuntu:14.04
gambar untuk mensimulasikan lingkungan produksi kami.
Berikut adalah contoh kerja minimum:
#jenkinsfile
stage('Checkout and provision'){
docker.image('ubuntu:14.04').withRun('-u root'){
checkout scm
sh 'chmod -R 770 ./'
sh './init-script.sh'
}
}
dan
#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
Dan /etc/sudoers
file untuk wadah adalah sebagai berikut:
#
# 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
Masalah yang saya alami adalah bahwa buruh pelabuhan tidak berjalan sebagai root seperti saya terbiasa dan bukannya mempertahankan id pengguna pengguna jenkins dari mesin host. Ini membuat sudo sulit.
Saya sudah mencoba menambahkan pengguna jenkins ke /etc/passwd
file kontainer dan berjalan chmod
melawan file itu tetapi bahkan tidak memiliki izin untuk melakukan salah satu dari ini jenkinsfile
.
Dengan konfigurasi ini saya harus menjadi pengguna root. Namun, saya melihat Error: must run as root
apakah saya tidak menggunakan sudo
atau sudo: no tty present and no askpass program specified
jika saya lakukan.
Apakah ada cara yang tepat untuk menghadapi situasi ini? Idealnya dari jenkinsfile
; Saya ingin menghindari membuat tambahan Dockerfile
jika mungkin karena ini akan menjadi pembeda lebih lanjut antara pengujian dan produksi.