从文件 - shell脚本中读取值
问题描述:
我有一个Jenkinsfile
,我想从shell脚本中读取一些值。从文件 - 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脚本我怎样才能得到这些值
任何帮助表示赞赏(任何疑问,请向)
由于
答
改进case_to_var
脚本(用法 “case_to_var文件名”):
case_to_var Jenkinsfile
的
#!/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
}
:
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
:
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}' Jenkinsfile
谢谢,你介意后'解释所有其他选项break'。我可以看到你已经删除了'env'和'.' – Richlewis
当变量具有'env'时,它不是独特的,可以被删除。 – agc
当你说小心使用'eval'会不会有更安全的方法?或者这可以吗? – Richlewis