2017-04-06 14 views
0

Jenkinsfile私はシェルスクリプト内からいくつかの値を読みたいと思っています。ファイルシェルスクリプトから値を読み取る

ファイルのセクションでは、私はcase文のデフォルトセクション内env.ECHO_CHAMBER_BRANCHenv.HENDRICKS_JS_INTEGRATIONenv.FEATURES_BRANCHに割り当てられた値を読み取る必要があるので、この例では、私はfeature-branchがそれぞれに返さたい

-- Jenkinsfile 
stage ('Setup Vars') { 
    switch(BRANCH_NAME) { 
    case 'develop': 
     env.ECHO_CHAMBER_BRANCH = 'develop' 
     env.HENDRICKS_JS_INTEGRATION_BRANCH = 'master' 
     env.FEATURES_BRANCH = 'master' 
    break 
    case 'master': 
     env.ECHO_CHAMBER_BRANCH = 'develop' 
     env.HENDRICKS_JS_INTEGRATION_BRANCH = 'master' 
     env.FEATURES_BRANCH = 'master' 
    break 
    default: 
     env.ECHO_CHAMBER_BRANCH = 'feature-branch' 
     env.HENDRICKS_JS_INTEGRATION_BRANCH = 'feature-branch' 
     env.FEATURES_BRANCH = 'feature-branch' 
    break 
    } 
} 

ですシェルスクリプトを使用して

変数iが得ることができますどのようにすべてのヘルプは感謝

これらの値(任意の質問はお問い合わせください)

おかげ

答えて

2

の改善case_to_varスクリプト(使用方法 "case_to_varファイル名"):

#!/bin/sed -nf 
# Only look at lines ending in ':' 
/:$/{ 
    # remove leading `case`, spaces, and the ':', and save name. 
    s/.* \|://g 
    h 
    # until the `break` line, recall name, append variable name, 
    # and make it shell-parsable. 
    :foo g 
     N 
     y/./_/ 
     s/'//g 
     s/ = /=/ 
     s/\n.*env//gp 
     /break$/!b foo 
} 

case_to_var Jenkinsfileの出力:

develop_ECHO_CHAMBER_BRANCH=develop 
develop_HENDRICKS_JS_INTEGRATION_BRANCH=master 
develop_FEATURES_BRANCH=master 
master_ECHO_CHAMBER_BRANCH=develop 
master_HENDRICKS_JS_INTEGRATION_BRANCH=master 
master_FEATURES_BRANCH=master 
default_ECHO_CHAMBER_BRANCH=feature-branch 
default_HENDRICKS_JS_INTEGRATION_BRANCH=feature-branch 
default_FEATURES_BRANCH=feature-branch 

出力シェル構文解析可能な作りは、それが実行されることを可能にします使用された。

eval $(case_to_var Jenkinsfile) 
echo $default_FEATURES_BRANCH $develop_FEATURES_BRANCH 

出力:

feature-branch master 

ワンライナーのバージョン:evalのこの慎重な使用と同様に

sed -n '/:$/{s/.* \|://g;h;:foo g;N;y/./_/;s/'"'"'//g;s/ = /=/;s/\n.*env//gp;/break$/!b foo}' Jenkinsfile 
+0

おかげで、あなたは 'の後に他のすべてのオプションを説明する気になり休憩。私はあなたが 'env'と' .'を削除したのを見ることができます。 – Richlewis

+0

変数に 'env'があるとき、それは特有ではなく、削除できます。 – agc

+0

あなたが 'eval'を慎重に使用すると安全な方法があると言えば?またはこれは大丈夫ですか? – Richlewis

関連する問題