我正在做一个简单的管道:

构建-

我需要不同的环境变量进行暂存和生产,所以我正在尝试获取变量。

sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh' 

但它返回未找到

[Stack Test] Running shell script
+ source /var/jenkins_home/.envvars/stacktest-staging.sh
/var/jenkins_home/workspace/Stack Test@tmp/durable-bcbe1515/script.sh: 2: /var/jenkins_home/workspace/Stack Test@tmp/durable-bcbe1515/script.sh: source: not found

路径是正确的,因为我在通过 ssh 登录时运行相同的命令,并且它工作正常。

下面是管道的想法:

node {
    stage name: 'Build'
    // git and gradle build OK
    echo 'My build stage'

    stage name: 'Staging'
    sh 'source $JENKINS_HOME/.envvars/stacktest-staging.sh' // PROBLEM HERE
    echo '$DB_URL' // Expects http://production_url/my_db
    sh 'gradle flywayMigrate' // To staging
    input message: "Does Staging server look good?"    

    stage name: 'Production'
    sh 'source $JENKINS_HOME/.envvars/stacktest-production.sh'
    echo '$DB_URL' // Expects http://production_url/my_db
    sh 'gradle flywayMigrate' // To production
    sh './deploy.sh'
}

我该怎么办?

  • 我在考虑不使用管道(但我将无法使用Jenkinsfile)
  • 或者使用EnvInject插件为登台和生产制作不同的作业(但我失去了登台视图)
  • 或者使用env(但代码变大了,因为今天我使用的是12个env-var)