Jenkins: Vấn đề cấp phép sử dụng Docker làm môi trường xây dựng


11

Tôi đã cài đặt Jenkins trên máy Ubuntu 16.04. Bản thân Jenkins không chạy trong một container. Những gì tôi muốn làm chỉ đơn giản là gọi yarn installbằng cách sử dụng một hình ảnh nút. Đây là Jenkinsfile của tôi:

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

Khá đơn giản phải không?

Người dùng / nhóm jenkins là 112:116, và uid của vùng chứa nút 1000, do đó, quá trình sợi (được chạy như người dùng nút 1000) không thể thực hiện công việc của mình, như thế nào mkdir /.config.

Tôi đã cố gắng để quay vòng container đi qua trong đối số -u 1000, nó gặp phải vấn đề về quyền khi cố gắng tạo các thư mục bền.

Nó trông giống như một hoặc một loại vấn đề khác, làm thế nào tôi có thể giải quyết vấn đề đó?

Nhật ký Jenkins:

Dưới đây là nơi xây dựng bắt đầu và thất bại.

[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

Vui lòng thêm nhật ký
030

Đính kèm nhật ký. Tôi cũng đã thử chạy Jenkins bằng cách sử dụng hình ảnh docker chính thức của nó, nó hoạt động tốt, bởi vì người dùng jenkins trong hình ảnh docker đó là 1000, giống như người dùng nút trong hình ảnh nút.
Michael

Selinux có được kích hoạt và thi hành không?
James Shewey

@JamesShewey Không chắc chắn. Tôi chỉ đơn giản là mở rộng một ví dụ ubfox AMI ec2.
Michael

Tôi tin rằng họ vô hiệu hóa nó, nhưng kiểm tra với "sestatus." Nếu nó bật, hãy thử tắt nó đi.
James Shewey

Câu trả lời:


8

Tôi đã có cùng một vấn đề với nút. Điều này là các tập tin trong container được sở hữu bởi "root: root". Hãy thử thêm docker args -u root:root:

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

Giải pháp làm việc cho tôi là tốt. Tại sao điều này không có trong tài liệu của Jenkins? (vấn đề của tôi là với một pip installlệnh đơn giản dẫn đến Could not install packages due to an EnvironmentError: [Errno 13] Permission denied; đề cập đến nó ở đây để giúp mọi người tìm kiếm nó. Ngay cả khi sử dụng virtualenvhoặc pip install --userkhông khắc phục vấn đề cho tôi)
Rabarberski

3

Tôi chỉ có một vấn đề tương tự ngày hôm nay, mặc dù với một hình ảnh khác.

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

Tham khảo: https://docs.docker.com/st Storage / tmpfs / Cách này bạn không nên lo lắng về bất kỳ rò rỉ bảo mật hoặc tệp nào xuất hiện sau khi container bị phá hủy bên trong jenkins.


3

buildEnv.inside("-u 0") {}giải quyết vấn đề của tôi Nhưng sau đó, không gian làm việc sẽ chứa thư mục và các tệp thuộc sở hữu của người dùng mà Jenkins không thể xóa được ở lần chạy tiếp theo khi làm sạch không gian làm việc, vì vậy tôi đã thêm vào sh "sudo chown jenkins: -R \$PWD/" lúc bắt đầu đường ống.


Tôi đã sử dụng một cách tiếp cận tương tự, nhưng đã chạy 'sh "chmod -R a + w \ $ PWD"' ở cuối, như một bước "Dọn dẹp" của đường ống thay vì bắt đầu lúc bắt đầu. Người dùng Jenkins không được xác định trong thùng chứa của tôi và sudo không có sẵn. Tôi cũng có thể đã xóa các tập tin, nhưng nghĩ rằng có thể tốt hơn để giữ chúng để điều tra nếu có sự cố.
Olivier Boudry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.