Skip to main content
 首页 » 编程设计

jenkins之使用环境变量 Jenkins Pipeline 加载文件

2024年12月31日14dflying

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

构建 -> 分期 -> 生产

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

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 插件为舞台和制作制作不同的工作(但我失去了舞台 View )
  • 或者 make withEnv(但是代码变大了,因为今天我正在使用 12 个环境变量)
  • 请您参考如下方法:

    从文件加载环境变量的一种方法是加载 Groovy 文件。

    例如:

  • 假设您在“$JENKINS_HOME/.envvars”中有一个名为“stacktest-staging.groovy”的 groovy 文件。
  • 在此文件中,您定义了要加载的 2 个环境变量
    env.DB_URL="hello" 
    env.DB_URL2="hello2" 
    
  • 然后你可以加载它使用
    load "$JENKINS_HOME/.envvars/stacktest-staging.groovy" 
    
  • 然后您可以在后续的 echo/shell 步骤中使用它们。

  • 例如,这是一个简短的管道脚本:
    node { 
       load "$JENKINS_HOME/.envvars/stacktest-staging.groovy" 
       echo "${env.DB_URL}" 
       echo "${env.DB_URL2}" 
    }