जेनकिंस: बिल्ड पर्यावरण के रूप में डॉकर का उपयोग करते हुए अनुमति मुद्दा


11

मैंने जेनकिन्स को एक Ubuntu 16.04 मशीन पर स्थापित किया। जेनकिंस खुद एक कंटेनर में नहीं चलाया जाता है। मैं जो करना चाहता हूं बस yarn installएक नोड छवि का उपयोग करके कॉल करता हूं । तो यहाँ मेरा जेनकिंसफाइल है:

pipeline {
    agent any
    stages {
        stage('install node modules...') {
            agent { docker 'node' }
            steps {
                sh 'cd /path/to/package.json; yarn install'
            }
        }
    }
}

बहुत सीधा, है ना?

jenkins उपयोगकर्ता / समूह है 112:116, और नोड कंटेनर का यूआईडी है 1000, इसलिए यार्न प्रक्रिया (जिसे नोड उपयोगकर्ता 1000 के रूप में चलाया जाता है) अपनी चीजें नहीं कर सकती हैं, जैसे mkdir /.config

मैंने तर्क में गुजरने वाले नोड कंटेनर को स्पिन करने की कोशिश की -u 1000, यह टिकाऊ निर्देशिका बनाने की कोशिश करते समय अनुमति के मुद्दों में टकरा गया।

यह एक या दूसरे प्रकार के मुद्दे की तरह दिखता है, मैं उसके आसपास कैसे काम कर सकता हूं?

जेनकिंस लॉग:

नीचे वह जगह है जहां निर्माण शुरू होता है और विफल रहता है।

[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ docker inspect -f . node
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node
[Pipeline] {
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ cd /path/to/package.json
+ yarn install
yarn install v0.24.6
error An unexpected error occurred: "EACCES: permission denied, mkdir '/.config'".
info If you think this is a bug, please open a bug report with the information provided in "/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/<path>/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[Pipeline] }
$ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
$ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

लॉग जोड़ें
030

लॉग संलग्न किए। मैंने अपनी आधिकारिक डॉकटर छवि का उपयोग करते हुए जेनकिंस को चलाने की कोशिश की, जो ठीक काम करता है, क्योंकि उस डॉक छवि में जेनकिंस उपयोगकर्ता 1000 है, जो नोड छवि में नोड उपयोगकर्ता के समान ही है।
माइकल

क्या सेलिनक्स सक्षम और लागू है?
जेम्स शेवी

@JamesShewey यकीन नहीं होता। मैं बस एक ubuntu AMI ec2 उदाहरण है।
माइकल

मेरा मानना ​​है कि वे इसे अक्षम करते हैं, लेकिन "सेसटस" के साथ जांचें। यदि यह चालू है, तो इसे बंद करने का प्रयास करें।
जेम्स शेवेई

जवाबों:


8

मैं नोड के साथ एक ही मुद्दा था। बात यह है कि कंटेनर में फाइलें "रूट: रूट" के स्वामित्व में हैं। डॉक आर्ग जोड़ने की कोशिश करें -u root:root:

docker { 
    image 'node:8'
    args '-u root:root'
}

समाधान मेरे लिए भी काम किया। जेनकींस प्रलेखन में ऐसा क्यों नहीं है? (मेरा मुद्दा एक साधारण pip installकमांड के परिणामस्वरूप था Could not install packages due to an EnvironmentError: [Errno 13] Permission denied, इसका उल्लेख यहां खोज रहे लोगों की मदद करने के लिए किया गया। यहां तक ​​कि मेरे लिए समस्या का उपयोग करना virtualenvया pip install --userठीक करना नहीं था)
राबर्स्की

3

मेरे पास आज एक समान मुद्दा था, हालांकि एक और छवि के साथ।

docker {
 image 'node:8'
 args '--tmpfs /.config'
}

संदर्भ: https://docs.docker.com/storage/tmpfs/ इस तरह से आपको किसी भी सुरक्षा लीक या फ़ाइलों के बारे में चिंतित नहीं होना चाहिए, जो जेनकींस के अंदर कंटेनर के नष्ट होने के बाद मौजूद हैं।


3

buildEnv.inside("-u 0") {}मेरी समस्या हल कर दी। लेकिन तब कार्यक्षेत्र में रूट के स्वामित्व वाली निर्देशिका और फाइलें शामिल होंगी, जो कार्यस्थल की सफाई के दौरान उपयोगकर्ता जेनकिन्स द्वारा अगले रन पर नहीं हटाई जा सकती हैं, इसलिए मैंने sh "sudo chown jenkins: -R \$PWD/" पाइप लाइन की शुरुआत में जोड़ा है ।


मैं एक समान दृष्टिकोण का उपयोग करता था, लेकिन शुरू में चोम के बजाय पाइप लाइन के "क्लीनअप" कदम के रूप में अंत में 'श "चामोद-आर ए + डब्लू $ पीडब्ल्यूडी" चलाता था। जेनकिन्स उपयोगकर्ता मेरे कंटेनर में परिभाषित नहीं किया गया था, और सूडो उपलब्ध नहीं था। मैं फाइलें भी डिलीट कर सकता था, लेकिन सोचा कि कुछ गलत होने पर उन्हें जांच के लिए रखना बेहतर होगा।
ओलिवियर बॉड्री
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.