2017-05-07 17 views
16

Chúng tôi có một tệp Jenkinsfile sử dụng plugin docker để chạy tập lệnh bên trong một vùng chứa đã cho. Điều này hoạt động tốt đối với một số hình ảnh, nhưng không thành công ngay lập tức với mã thoát -1 trên những hình ảnh khác. Chúng tôi đã giảm lỗi xuống một đơn giản sleep. Đây là Jenkinsfile:Đường dẫn mã thoát của Jenkins Docker -1

node("docker") { 
    def wheezy_image = docker.image("pyca/cryptography-runner-wheezy") 
    wheezy_image.pull() 
    wheezy_image.inside { 
     sh """sleep 120""" 
    } 
} 

Và đây là Jenkins đầu ra

+ docker pull pyca/cryptography-runner-wheezy 
Using default tag: latest 
latest: Pulling from pyca/cryptography-runner-wheezy 
Digest: sha256:ff5d9f661b05d831ace3811eec9f034fed7994279ff2307695a2cb7c32d6fa11 
Status: Image is up to date for pyca/cryptography-runner-wheezy:latest 
[Pipeline] sh 
[3525-VE2ETALXLYB7VN3] Running shell script 
+ docker inspect -f . pyca/cryptography-runner-wheezy 
. 
[Pipeline] withDockerContainer 
$ docker run -t -d -u 1000:1000 -w /var/jenkins_home/workspace/3525-VE2ETALXLYB7VN3 --volumes-from 1382a2e208dd5575acd26f11678855282fc854319096de60cef6818ea279f25f -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat pyca/cryptography-runner-wheezy 
[Pipeline] { 
[Pipeline] sh 
[3525-VE2ETALXLYB7VN3] Running shell script 
+ sleep 120 
[Pipeline] } 
$ docker stop --time=1 887db8989e03a10dd89132b1ac6e18261ee4a49e6afe8b0c5568326b6c023654 
$ docker rm -f 887db8989e03a10dd89132b1ac6e18261ee4a49e6afe8b0c5568326b6c023654 
[Pipeline] // withDockerContainer 
[Pipeline] } 
[Pipeline] // node 
[Pipeline] End of Pipeline 

GitHub has been notified of this commit’s build result 

ERROR: script returned exit code -1 
Finished: FAILURE 

Điều thú vị là, nếu ngủ ít hơn 1 giây thì đây đi (nhưng giấc ngủ 120 thứ hai chỉ hoạt động tốt trên nhiều hình ảnh khác).

Để tham khảo, dưới đây là jessie image hoạt động và wheezy image không hoạt động.

Có ai biết điều gì có thể xảy ra ở đây không?

+0

tôi giả định hình ảnh bến tàu vanilla wheezy (không có thứ mà pyca/cryptography-runner-wheezy thêm) không chứng minh cùng một vấn đề? không có Dockerfile cho hình ảnh của bạn trên hub docker (https://forums.docker.com/t/how-to-upload-my-dockerfile-to-docker-hub/6563/2), vì vậy tôi cảm thấy lười biếng về nhìn này. :) – burnettk

+0

@burnettk Tôi không biết nếu chúng tôi đã thử nghiệm với một wheezy trần; 'Dockerfile' có thể được tìm thấy tại: https://github.com/pyca/infra/blob/master/runners/wheezy/Dockerfile –

+1

@burnettk Tôi vừa thử nghiệm kéo chỉ« debian: wheezy' và thấy cùng một vấn đề. –

Trả lời

10

Có vẻ như liên quan đến hình ảnh của bạn chưa được cài đặt ps. Tôi chỉ lấy căn cứ debian và có thể sao chép nó sẽ không hoạt động. Ps cài đặt, và nó đã làm việc. Bạn cũng có thể sử dụng hàm withRun và nó hoạt động. Đây là Jenkinsfile của tôi:

node("docker") { 

    // Weezy that also ran... apt-get update && apt-get install -y procps 
    def wheezy_image = docker.image("smalone/weezy-ps-test") 
    wheezy_image.pull() 
    wheezy_image.inside { 
     sh 'sleep 2' 
    } 

     // Base image for weezy-ps-test that has no ps installed using withRun() instead of inside() 
    wheezy_image = docker.image("debian:wheezy") 
    wheezy_image.pull() 
    wheezy_image.withRun { c -> 
     sh 'sleep 2' 
    } 

    // Base image for weezy-ps-test that has no ps installed 
    wheezy_image = docker.image("debian:wheezy") 
    wheezy_image.pull() 
    wheezy_image.inside { 
     sh 'sleep 2' 
    } 
} 

Tôi sẽ mở một vé trên plugin đường ống docker, nếu không tồn tại.

CHỈNH SỬA: Có một vé mở, nhưng họ vẫn chưa tìm được nguyên nhân gốc rễ. Xem: https://issues.jenkins-ci.org/browse/JENKINS-40101 để theo dõi trạng thái của vấn đề này!

+0

Điều này chính xác! Cảm ơn bạn rất nhiều. Tôi mong được nhìn thấy bản sửa lỗi ngược dòng, nhưng bây giờ chúng ta có thể làm việc xung quanh nó bằng cách thêm procps (và procps-ng trên Fedora). Tôi sẽ giải thưởng tiền thưởng ngay sau khi Stack Overflow cho phép tôi (nó đòi hỏi một khoảng thời gian 24 giờ sau khi tiền thưởng được thêm vào trước khi bạn có thể trao giải thưởng) –

Các vấn đề liên quan