Jenkins: ปัญหาการอนุญาตให้ใช้ Docker เป็นสภาพแวดล้อมการสร้าง


11

ฉันติดตั้ง Jenkins บนเครื่อง Ubuntu 16.04 เจนกินส์ตัวเองไม่ได้ทำงานในภาชนะ สิ่งที่ฉันต้องการจะทำก็แค่โทรหาyarn installโดยใช้อิมเมจโหนด ดังนั้นนี่คือ Jenkinsfile ของฉัน:

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

ตรงไปตรงมาสวยใช่มั้ย

เจนกินส์ผู้ใช้ / กลุ่ม112:116และ uid ของภาชนะโหนดคือ1000เพราะฉะนั้นกระบวนการเส้นด้าย (ซึ่งทำงานเป็นผู้ใช้โหนด 1000) mkdir /.configไม่สามารถทำในสิ่งที่ตนชอบ

ฉันพยายามหมุนโหนดคอนเทนเนอร์ที่ผ่านการโต้เถียง-u 1000มันชนกับปัญหาสิทธิ์เมื่อพยายามสร้างไดเรกทอรีที่ทนทาน

ดูเหมือนว่าเป็นปัญหาประเภทหนึ่งหรือประเภทอื่นฉันจะแก้ไขได้อย่างไร

บันทึก Jenkins:

ด้านล่างเป็นจุดเริ่มต้นและล้มเหลว

[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

แนบบันทึก ฉันพยายามเรียกใช้ Jenkins โดยใช้อิมเมจ docker อย่างเป็นทางการซึ่งใช้งานได้ดีเนื่องจากผู้ใช้ jenkins ในอิมเมจ docker นั้นคือ 1,000 ซึ่งเป็น uid เดียวกับผู้ใช้โหนดในอิมเมจโหนด
ไมเคิล

selinux เปิดใช้งานและบังคับใช้หรือไม่
James Shewey

@ JamesShewey ไม่แน่ใจ ฉันแค่ขยาย ubuntu AMI ec2 อินสแตนซ์
ไมเคิล

ฉันเชื่อว่าพวกเขาปิดใช้งาน แต่ตรวจสอบด้วย "sestatus" หากเปิดใช้งานอยู่ลองปิดเครื่อง
James Shewey

คำตอบ:


8

ฉันมีปัญหาเดียวกันกับโหนด สิ่งที่เป็นไฟล์ในภาชนะที่เป็นเจ้าของโดย "root: root" ลองเพิ่มนักเทียบท่า-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ไม่ได้แก้ไขปัญหาให้ฉัน)
Rabarberski

3

ฉันเพิ่งมีปัญหาที่คล้ายกันในวันนี้แม้ว่าจะมีภาพอื่น

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

การอ้างอิง: https://docs.docker.com/storage/tmpfs/ วิธีนี้คุณไม่ควรกังวลเกี่ยวกับการรั่วไหลของความปลอดภัยหรือไฟล์ใด ๆ ที่มีอยู่หลังจากคอนเทนเนอร์ถูกทำลายภายในเจนกินส์


3

buildEnv.inside("-u 0") {}แก้ไขปัญหาของฉัน แต่แล้วเวิร์กสเปซจะมีไดเรกทอรีและไฟล์ที่ root เป็นเจ้าของซึ่งผู้ใช้ Jenkins ไม่สามารถลบได้ในการทำงานครั้งต่อไปเมื่อทำการล้างเวิร์กสเปซดังนั้นฉันจึงเพิ่มsh "sudo chown jenkins: -R \$PWD/" ที่จุดเริ่มต้นของไพพ์ ไลน์


ฉันใช้วิธีการที่คล้ายกัน แต่วิ่ง 'sh "chmod -R a + w \ $ PWD"' ในตอนท้ายเป็นขั้นตอน "การล้างข้อมูล" ของไปป์ไลน์แทนการ chown เมื่อเริ่มต้น ผู้ใช้ Jenkins ไม่ได้ถูกกำหนดไว้ในคอนเทนเนอร์ของฉันและไม่สามารถใช้งาน sudo ได้ ฉันอาจลบไฟล์ด้วยเช่นกัน แต่คิดว่ามันน่าจะดีกว่าถ้าหากตรวจสอบสิ่งผิดปกติ
Olivier Boudry
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.