2017-10-27 7 views
5

内のシェルスクリプトを実行している間、私は以下のようなグルーヴィー内部ジェンキンスでビルド・パイプラインの一部としてシェルスクリプトを実行しようとしていた。ジェンキンスパイプライン:java.lang.NoSuchMethodErrorの:いいえ、そのようなDSL方式、グルーヴィーに新たなのでグルーヴィー

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' 
} 

しかし、以下のような例外を取得し終わる:

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 """ '

ませ運もインターネット上で多くのソリューションを試した後、グルーヴィーな内部シェルスクリプトがここでの課題ではありません。構文に問題はありますか?

+0

同様の引用符で囲まれた問題については、[このGitHub Gist](https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4)を参考にしてください。 – mkobit

+0

おそらくあなたの行のすべての引用符に\エスケープコードを追加する必要があります。 piped-command全体をシェルスクリプトに入れ、パイプラインから実行することを検討してください。 – yorammi

答えて

2

はい、構文が不良です。主に私が見る問題は、シェルコマンドを引用していることです。これは有効ではありません:あなたはおそらくGroovyのクロージャとして解釈されている{print $4}、のために単一引用符で囲まれた文字列を抜け出している

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}')' 

私はそれはそれはエラーを与えている理由を私は理解していないけど、あなたが最も簡単にシェルコマンドを引用し、単一のトリプルによってそれを解決することができれば、私は思う:

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}')''' 

私がもしわかりませんしかし、次のエコーラインも機能します。まず、AMD_IDは、echoを実行しているところには存在しません。それはシェル内にのみ存在していました。また、$ AMD_IDは有効なgroovy変数として存在しません。私はあなたがそのエコーステートメントで何をしようとしているのかは完全には分かっていませんが、実際に実行されるならば、それがあなたが期待することはしません。

+0

echoはAMI_IDを表示していましたが、私は質問を更新しました – Jet

+0

シェルスクリプトは現在実行中ですが、 '構文エラー:引用符で囲まれていない文字列'を取得しています。 – Jet

+0

これはおそらくこのためです:awk -F "\" "\" "の後ろに1つだけあるはずです。また、私はまだ 'echo $ AMI_ID'があなたが望むことをするつもりはないと思っています。 $ AMD_IDはどこでもgroovyで宣言されていません。それはシェル内にのみあります。 –

関連する問題