2016-12-02 13 views
0

私はJenkinsの2つのフリースタイルジョブをGroovyでパイプラインジョブとして動作させるために翻訳作業を行っていますが、Groovyでの経験はほとんどありません。 Groovyの内部で実行する引数を取得する方法を解説します。ここにスクリプトの重要な部分があります。引数を使ってGroovyでシェルスクリプトを実行する方法

stage ('Clean') { 
    try { 
     notifyBuild('STARTED') 

     dir("cloudformation") { 

      def list = sh(script: "ls -1 *.template", returnStdout: true) 

      for (i in list) { 
       sh "aws s3 cp $i s3://URLHERE —expires 1 —cache-control 1" 
      } 

     } } catch (e) { 
     // If there was an exception thrown, the build failed 
     currentBuild.result = "FAILED" 
     throw e 
    } finally { 
     // Success or failure, always send notifications 
     notifyBuild(currentBuild.result) 
    } } 

関連ビットはsh "aws s3 cp $i s3://URLHERE —expires 1 —cache-control 1"です。これを実行しようとすると、次のエラーが返されます。

Googleは、Groovyの内部で引数を持つシェルスクリプトをほとんど作りませんでした。明らかに、それはそれぞれのスペース区切りチャンクをそれ自身のビットとして扱うことを試みています。どのように私はその行動を停止するのですか?

追加する編集: 私は、同じエラーを返すsh "aws s3 cp $i s3://URLHERE '—expires 1' '—cache-control 1'"を試してみましたが、Unknown options: —expires 1,—cache-control 1と私は、私は適切に引用して、スペースを含むことができることを得るが、それはまだ根本的な問題を残します。

答えて

0

キャッシュ制御パラメータには、の2つのダッシュ--cache-control <value>とexpiresパラメータが必要です。

S3 documentation of cpを参照してください。

+0

これを試してみると、勘違いがあります。 "sh 'aws s3 cp $ i s3:// URLHERE" --expires 1 "" --cache-control 1 "''で終了しました(二重ダッシュ修正と同様に、私は現在、 '' cloudform''を実行しています。 + aws s3 cp s3:// URLHERE --expires 1 --cache-control 1 不明なオプション:--cache-control 1' 認識されるのは現在のところ期限切れですが、キャッシュ制御はありませんか?他のアイデア? – Alex

+0

はい。オプショングループの前後に二重引用符を使用しないでください。これは、引用符で囲まれた各文字列をシェルの1つの引数のように見せます。また、コマンドライン文字列全体の一重引用符も二重引用符で囲む必要があり、Groovyの変数補間が機能します。オプションの二重ダッシュ付きのオリジナルのコマンドラインは、このトリックを行う必要があります。 – BalRog

関連する問題