2016-07-01 12 views
14

Dưới đây là Jenkins 2.x đường ống của tôi:Làm thế nào để làm cho Jenkins 2.0 thực thi lệnh sh trong cùng thư mục với thanh toán?

node ('master'){ 
    stage 'Checkout' 
    checkout scm 
    stage "Build Pex" 
    sh('build.sh') 
} 

Khi tôi chạy đường ống này checkout đặt mã vào để không gian làm việc như mong đợi, tuy nhiên thay vì chờ đợi để tìm kịch bản trong workspace/(nó thực sự đó!), nó trông trong một thư mục không liên quan: workspace @ tmp/durable-d812f509.

Entering stage Build Pex 
Proceeding 
[Pipeline] sh 
[workspace] Running shell script 
+ build.sh 
/home/conmonsysdev/deployments/jenkins_ci_2016_interns/jenkins_home/jobs/pex/branches/master/[email protected]/durable-d812f509/script.sh: line 2: build.sh: command not found 

Làm cách nào để sửa đổi tệp Jenkinsfile này để build.sh được thực thi trong cùng một thư mục như tôi đã kiểm tra mã nguồn của dự án?

+0

Đó là thực sự đường ống hoàn chỉnh của bạn? Hay bạn có nhiều khối 'nút'? – StephenKing

+1

Hiện tại, đó là tất cả. Đó là đường ống nhỏ nhất thể hiện lỗi. –

Trả lời

19

Bạn có thể đính kèm hành động của mình trong khối dir.

checkout scm 
stage "Build Pex" 
dir ('your new directory') { 
    sh('build.sh') 
} 
... 

your new directory là nơi giữ thư mục thực sự của bạn. Theo mặc định, nó là một đường dẫn tương đối đến không gian làm việc. Bạn có thể xác định đường dẫn tuyệt đối, nếu bạn chắc chắn điều này có mặt trên tác nhân.

+0

'Thư mục mới của bạn' là gì? Có phải trình giữ chỗ không? –

+1

Doen't làm việc cho tôi :-(Tôi phải đặt shellscript ở đâu? Ngay bây giờ nó nằm trong thư mục gốc của repo git của tôi. Tôi đã cố gắng chuyển nó vào thư mục con 'buildscripts' và sau đó sử dụng 'dir ('buildscripts ') {} 'nhưng không may mắn –

+0

@ Bastian Voigt: Bạn có thể cần một câu hỏi mới – Jayan

1

Tôi đang gặp vấn đề tương tự và thư mục không hỗ trợ, có thể vì tôi đang làm việc bên trong thư mục con của chính thư mục tmp (vì lý do không phải là vi khuẩn ở đây). Mã của tôi trông như thế này

dir(srcDir){ 
    sh 'pwd; la -l; jenkins.sh "build.sh"' 
} 

(các pwdla -l báo cáo đã được thêm vào chỉ để gỡ lỗi Issue tồn tại w/o họ..) Với chúng tôi nhận được kết quả như sau:

+ pwd 
/jenkins/workspace/[email protected]/repos/2 
+ ls -l 
total 72 
-rw-r--r-- 1 jenkins jenkins 394 May 19 12:20 README.md 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 api-automation 
-rwxr-xr-x 1 jenkins jenkins 174 May 19 12:20 build-it.sh 
-rwxr-xr-x 1 jenkins jenkins 433 May 19 12:20 build-release.sh 
-rwxr-xr-x 1 jenkins jenkins 322 May 19 12:20 build.sh 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-core 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-java-client 
drwxr-xr-x 3 jenkins jenkins 4096 May 19 12:20 ix-rest-models 
drwxr-xr-x 4 jenkins jenkins 4096 May 19 12:20 ix-service 
drwxr-xr-x 7 jenkins jenkins 4096 May 19 12:20 ixternal 
drwxr-xr-x 5 jenkins jenkins 4096 May 19 12:20 ixtraneous-stuff 
-rwxr-xr-x 1 jenkins jenkins 472 May 19 12:20 jenkins.sh 
-rw-r--r-- 1 jenkins jenkins 16847 May 19 12:20 pom.xml 
+ jenkins.sh build.sh 
/home/jenkins/workspace/[email protected]/repos/[email protected]/durable-a3ec0501/script.sh: line 2: jenkins.sh: command not found 

tôi cuối cùng đã làm điều này :

dir(srcDir){ 
    sh 'cdr=$(pwd); $cdr/jenkins.sh "build.sh"' 
} 
6

Lý do tập lệnh của bạn không hoạt động là vì "build.sh" không nằm trong PATH của bạn.

Jenkinsfile đang chạy tập lệnh "sh", có toàn bộ nội dung là chuỗi build.sh. Kịch bản mẹ nằm trong thư mục "@tmp" và sẽ luôn ở đó - thư mục "@tmp" là nơi Jenkins giữ Jenkinsfile, về cơ bản, trong khi chạy.

Để khắc phục vấn đề này, thay đổi dòng của bạn để sh "./build.sh" hoặc sh "bash build.sh", do đó sh khối trong Jenkinsfile có thể xác định vị trí một cách chính xác các build.sh kịch bản mà bạn muốn thực hiện.

0

Jenkins tạo một thư mục khi nó làm cho một bản sao từ dự án của bạn như thế này:

/var/lib/Jenkins/workspace/việc tên @script

Để làm việc này bạn phải thiết lập các tập tin như thực thi nếu bạn đang ở trong một môi trường Linux và sau đó gọi kịch bản shell.

Something như thế này:

// Permission to execute 
sh "chmod +x -R ${env.WORKSPACE}/../${env.JOB_NAME}@script" 

// Call SH 
sh "${env.WORKSPACE}/../${env.JOB_NAME}@script/script.sh" 
Các vấn đề liên quan