জেনকিনস পাইপলাইনে ডকার চালানোর সময় সঠিক অনুমতি সেটিংসগুলি কী কী?


11

আমি আমাদের কোডে নতুন পুল অনুরোধ পরীক্ষা করতে একসাথে একটি নতুন জেনকিনস পাইপলাইন পাওয়ার চেষ্টা করছি। আমি 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

আমার যে সমস্যাটি হচ্ছে তা হ'ল ডকার মূল হিসাবে চালাচ্ছে না এবং তার পরিবর্তে হোস্ট মেশিন থেকে জেনকিন্স ব্যবহারকারীর আইডি ধরে রাখছি। এটি sudo করা কঠিন করে তোলে।

আমি জেনকিন্স ব্যবহারকারীকে পাত্রে /etc/passwdফাইলে যুক্ত করার চেষ্টা করেছি এবং chmodসেই ফাইলটির বিপরীতে দৌড়াচ্ছি কিন্তু এর থেকে কোনওটিরও অনুমতি নেই jenkinsfile

এই কনফিগারেশনটি দিয়ে আমার মূল ব্যবহারকারী হওয়া উচিত। যাইহোক, আমি হয় দেখি Error: must run as rootআমি ব্যবহার না করি sudoবা sudo: no tty present and no askpass program specifiedযদি আমি তা করি।

এই পরিস্থিতি মোকাবেলার জন্য কি কোনও সঠিক উপায় আছে? আদর্শভাবে jenkinsfile; আমি Dockerfileযদি সম্ভব হয় তবে অতিরিক্ত তৈরি করা এড়াতে চাই কারণ এটি টেস্টিং এবং উত্পাদনের মধ্যে আরও পার্থক্যকারী হবে।


আপনার জেনকিনসফিল এবং ইউনিট.শ ভাগ করে নেওয়ার মন? মূলত মনে হয় point এই মুহুর্তে অনুমান ...
তেনসিবাই

এই লোকেরা আপনার বাড়ির কাজটি সমাধান করার চেষ্টা করছে এমন এক ধরণের প্রশ্ন। এই জাতীয় জিনিসটির জন্য সত্যিই জেনকিনস ফোরাম রয়েছে। আপনার প্রশ্নটি সত্যই এমন একটি ফর্মের মধ্যে জিজ্ঞাসা করা উচিত যা অনুরূপ সমস্যা হওয়ার সময় গুগল অনুসন্ধানে পাওয়া যেতে পারে এবং এই সাইটের জন্য একটি ভাল প্রশ্ন হওয়ার জন্য নিজেকে বাদ দিয়ে অন্য কারও পক্ষে উপযোগী হতে পারে।
জিরি ক্লাউদা

আমি কয়েক দিন ধরে এটি গুগল করছি এবং জেনকিন্স ডক্সকে ট্রল করেছি led আমি এখনও কোনও সমাধান খুঁজে পাচ্ছি না। আমার যদি প্রয়োজনীয় উত্তরগুলি খুঁজে পেতে আমি যদি অনুপস্থিত থাকে তবে দয়া করে আমাকে জানান। আমি কী জিজ্ঞাসা করছি তা পরিষ্কার করার জন্য আমি প্রশ্নটি আপডেট করেছি তবে আমি সম্মত নই যে এটি 'স্ট্রিং' বা 'হোমওয়ার্ক' '
tobassist

আমি প্রশ্নটি একটি সর্বনিম্ন উদাহরণ দিয়ে আপডেট করেছি
টোব্যাসিস্ট করুন

1
সম্ভবত এটি সহায়ক হতে পারে: wiki.jenkins-ci.org/display/JENKINS/ ডকার + প্লাগিন (আমি মনে করি যে আপনি যখন রুট কাজ করেন না তখন এটি ব্যবহারকারীর নাম পরিবর্তন করে তবে ব্যবহারকারী নয়)) আপনাকে পাসওয়ার্ডহীন সুডোর অনুমতিপ্রাপ্ত জেনকিন্স ব্যবহারকারীর সাথে আপনার চিত্র প্রস্তুত করতে হবে।
তেনসিবাই

উত্তর:


12

তাই পরে একটি ডিবাগ অধিবেশন চ্যাট ব্যবহারকারী Jenkins চলমান পাবে কী প্রয়োজন অনুমতি দেওয়া sudo dockerDocker হোস্ট passwordless।

উবুন্টুতে একটি সাধারণ সুডোর ফাইল থাকতে পারে /etc/sudoers.d/jenkins

jenkins_user ALL=(ALL) NOPASSWD:ALL

সতর্কতা অবলম্বন করুন jenkins_userকোনও পাসওয়ার্ড ছাড়াই রুট হিসাবে চালানোর অনুমতি দিন , আরও ভাল ফাইলটি হওয়া উচিত:

jenkins_user ALL=(ALL) NOPASSWD:/full/path/to/docker
jenkins_user ALL=(ALL) NOPASSWD:<other needed command to be run as root>

এটি রুটি হিসাবে ধারকটি শুরু করার অনুমতি দেয় এবং এটি uid 0 হিসাবে চালিয়ে পাত্রে সমস্ত অধিকার দেয়।

দরকারী সম্পদ একপাশে ব্যবহৃত:


2

ডকারকে মূল হিসাবে চালানো আসলে একটি খারাপ ধারণা। পরিবর্তে আপনার যা করা উচিত তা হ'ল জেনকিন্স ব্যবহারকারীকে ডকার গ্রুপে যুক্ত করা। sudo usermod -aG docker jenkins। এটি অনাবশ্যক সুরক্ষা গর্ত খোলার এড়াতে পারবেন এবং জেনকিন্সকে ডকারের সাথে পাত্রে অভ্যন্তরের রুট হিসাবে চালানো সহ যা করতে হবে তা করার অনুমতি দেবে। আমি নমুনা হিসাবে এটি ব্যবহার করে আমার বিল্ডগুলি দিয়ে নিয়মিত এটি করি:

stage ('Build Docker Image') {
  steps {
    script {
      // Build the Docker image for compiling
      dockerImage = docker.build("myapp:v1")
    }
  }
}
stage ('Run UnitTests') {
  steps {
    script {
      dockerImage.inside("-itu root") {
        sh(script: "nosetests app-test.py --verbose")
      }
    }
  }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.