2017-10-27 43 views
5

Là mới để hấp dẫn, tôi đã cố gắng để thực hiện shell script như một phần của xây dựng đường ống dẫn trong Jenkins bên groovy như dưới đây:Jenkins đường ống: java.lang.NoSuchMethodError: Không có phương pháp DSL như vậy, trong khi thực hiện shell script bên groovy

stage('AMI ID EXTRACTION') { 
     sh 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')' 
     echo $AMI_ID 
     } 

stage ('ft-ami-extraction') 
{ 
     build job: 'crspng-CCPDev-ami-extraction' 
} 

Nhưng kết thúc nhận được ngoại lệ như dưới đây:

java.lang.NoSuchMethodError: No such DSL method 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F """ '

Không may mắn thậm chí sau khi thử nhiều giải pháp trên internet, vỏ kịch bản bên trong groovy là thách thức ở đây. Bất kỳ vấn đề với cú pháp?

+0

Đối với những người chạy vào các vấn đề trích dẫn tương tự, [GitHub Gist] này (https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4) có thể hữu ích. – mkobit

+0

bạn có thể sẽ cần phải thêm \ escape code cho tất cả các dấu ngoặc kép trong dòng bạn. Xem xét việc đưa toàn bộ lệnh đường dẫn vào một kịch bản lệnh shell và chạy nó từ đường dẫn. – yorammi

Trả lời

2

Có, cú pháp là xấu. Chủ yếu là vấn đề tôi thấy đã làm với trích dẫn của bạn về lệnh shell. Đây không phải là hợp lệ:

sh 'AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')' 

Bạn đang phá vỡ ra khỏi chuỗi trích dẫn duy nhất cho {print $4}, mà có lẽ được hiểu như là một đóng cửa groovy.

Tôi không chắc là tôi hiểu lý do tại sao nó được đưa ra các lỗi đó là, nhưng tôi nghĩ nếu bạn có thể dễ dàng nhất giải quyết nó bằng ba single trích dẫn lệnh shell của bạn:

sh '''AMI_ID=$(grep artifact_id /opt/repository/jenkins/workspace/crspng-CCPDev-ccp-ft-AMI/manifest.json | awk -F "\"" '{print $4}'| awk -F ":" '{print $2}')''' 

Tôi không chắc chắn nếu dòng echo tiếp theo cũng sẽ hoạt động. Trước hết, AMD_ID không tồn tại nơi bạn đang chạy echo. nó chỉ tồn tại trong vỏ. Ngoài ra, $ AMD_ID không tồn tại dưới dạng biến groovy hợp lệ. Tôi không hoàn toàn chắc chắn những gì bạn đang cố gắng để làm với tuyên bố echo đó, nhưng nếu nó thực sự chạy, nó sẽ không làm những gì bạn mong đợi nó để làm.

+0

echo là để in AMI_ID, tôi đã cập nhật câu hỏi – Jet

+0

shell script đang chạy ngay bây giờ nhưng nhận được 'Cú pháp lỗi: Unterminated trích dẫn chuỗi', những gì có thể là sai? – Jet

+0

Có lẽ vì điều này: awk -F "\" "Điều đó có lẽ chỉ nên có một" sau \ ". Ngoài ra, tôi vẫn không nghĩ rằng 'echo $ AMI_ID' sẽ làm những gì bạn muốn. $ AMD_ID không được khai báo ở bất kỳ đâu. Nó chỉ ở trong vỏ. –

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