我想在运行时从jenkins管道脚本替换具有$ variablename的文件中的某些变量。看来envsubst对我的用例来说是最好的。当我在Linux服务器上通过命令行执行时,它的工作正常,但是当我在sh脚本中通过jenkins管道执行时,什么也没发生。
sonar-scanner.properties:
sonar.projectKey =项目:MavenTest $ BRANCHNAME sonar.projectName = MavenTest $ BRANCHNAME
Linux上的命令行示例:
$ export BRANCHNAME = develop
$ envsubst'$ BRANCHNAME'
输出:
sonar.projectKey =项目:MavenTestdevelop
sonar.projectName = MavenTestdevelop
但是当我通过jenkins文件作为脚本执行时,文件中没有任何变化。
詹金斯脚本:
node {
stage('checkout'){
checkout([$class: 'GitSCM', branches: [[name: ':^(?!origin/master$|origin/develop$).*']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'c0ce73db-3864-4360-9c17-d87caf8a9ea5', url: 'http://172.16.4.158:17990/scm/ctoo/testmaven.git']]])
}
stage('initialize variables'){
// Configuring BRANCH_NAME variable
sh 'git name-rev --name-only HEAD > GIT_BRANCH'
sh label: '', script: 'cut -d \'/\' -f 3 GIT_BRANCH > BRANCH'
branchname = readFile('BRANCH').trim()
env.BRANCHNAME = branchname
}
stage('build & SonarQube analysis') {
withSonarQubeEnv('Sonar') {
sh "envsubst '$BRANCHNAME' <sonar-scanner.properties"
}
}
}
输出: [管道] sh(隐藏)
sonar.projectKey =项目:MavenTest $ BRANCHNAME
sonar.projectName = MavenTest $ BRANCHNAME
有人可以帮我吗
答案 0 :(得分:0)
嗨,我不了解envbust,但是可以通过将声纳参数通过命令行传递给声纳来实现,请参见以下示例:
withSonarQubeEnv('Sonar') {
sh "<sonarscanner path> -Dsonar.projectKey=Project:MavenTest$BRANCHNAME"
}
答案 1 :(得分:0)
我遇到了这个问题,并使用他的逃生角色解决了
\
,
例如:
sh "envsubst '\${SERVER_NAME}' < ./config/nginx/nginx.conf.template > ./config/nginx/nginx.conf"