在jenkins管道中用envsubst替换文件变量

时间:2019-01-17 11:29:43

标签: linux jenkins

我想在运行时从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(隐藏)

  • envsubst仓库

sonar.projectKey =项目:MavenTest $ BRANCHNAME

sonar.projectName = MavenTest $ BRANCHNAME

有人可以帮我吗

2 个答案:

答案 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"