我有一个Jenkinsfile,我想从一个shell脚本中读取一些值。
文件的部分是
-- 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
}
}我需要在case语句的默认部分中读取分配给env.ECHO_CHAMBER_BRANCH、env.HENDRICKS_JS_INTEGRATION和env.FEATURES_BRANCH的值,因此在这个示例中,我希望为每个变量返回feature-branch。
使用shell脚本,如何获得这些值?
发布于 2017-04-06 14:28:10
改进的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使输出shell可解析,允许执行和使用它;与谨慎使用eval一样
eval $(case_to_var Jenkinsfile)
echo $default_FEATURES_BRANCH $develop_FEATURES_BRANCH输出:
feature-branch master一条龙版本:
sed -n '/:$/{s/.* \|://g;h;:foo g;N;y/./_/;s/'"'"'//g;s/ = /=/;s/\n.*env//gp;/break$/!b foo}' Jenkinsfilehttps://stackoverflow.com/questions/43253811
复制相似问题