web-dev-qa-db-ja.com

groovyスクリプト-変数付きsh

明らかな何かが欠けています。 groovyスクリプトからシェルコマンドに変数を渡すにはどうすればよいですか?これは、構文が重要な場合、Jenkinsfileのコンテキスト内にあります。

def COLOR

node('nodename'){

    stage ('color') {

        COLOR = "green"
        echo "color is $COLOR"

        sh '''COLOR=${COLOR}
        echo $COLOR'''

    }
}

Shellビットがgreenと表示されることを期待していますが、次のようになります。

[Pipeline] echo
color is green
[Pipeline] sh
[job] Running Shell script
+ COLOR=
+ echo

shで三重引用符を使用する必要があります。これは、これを整理するとそこに含まれるコンテンツがあるためです。

8
Alex

文字列内の式を置き換えるには、単一引用符ではなく二重引用符を使用する必要があります。

def COLOR

node('nodename'){

    stage ('color') {

        COLOR = "green"
        echo "color is $COLOR"

        sh """COLOR=${COLOR}
        echo $COLOR"""

    }
}

何らかの理由で一重引用符を使用する必要がある場合は、+を使用して連結してみてください。

sh '''COLOR=''' + COLOR + '''
    echo ''' + COLOR
16
manouti

ここのコードがgroovy変数の値( "green")を環境変数COLORに割り当て、_echo $COLORは、Shell変数、$は、シェルが次のように読み取れるようにエスケープする必要があります。

sh """COLOR=${COLOR}
echo \$COLOR"""
2
Amy B Higgins

COLOR = "緑"

shラベル: ''、スクリプト: "echo $ COLOR"

0
Raj Polakala