【问题标题】:Jenkins environment variables available during post build step构建后步骤中可用的 Jenkins 环境变量
【发布时间】:2015-07-09 08:49:36
【问题描述】:

我了解 Jenkins 在构建执行期间设置了某些环境变量。但我的问题是我可以在我的构建后脚本中访问这些变量吗?

我进行了快速测试,但无法从构建后步骤 python 脚本访问 PROJECT_NAME 和 BUILD_URL 等。

有没有办法可以从构建后步骤 python 脚本中访问这些变量?我做错了什么吗?

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    另一种解决方案是使用Jenkins EnvInject Plugin将Jenkins参数重新定义为环境变量:

    此环境变量应该在您的后期构建步骤 Python 脚本中可用。

    在 Linux 和 Shell 脚本上,我可以同时访问(Jenkins 参数和环境变量):

    【讨论】:

      【解决方案2】:

      EnvInject 插件在我每次需要导出变量时都会读取一个属性文件。

      所以我在构建后的第一个步骤中使用 Groovy PostBuild 插件实现了所需的功能,该插件从属性文件中读取所有需要的变量并将它们导出以用于下一个构建后步骤:

      /*
      Inject environment variables using Groovy because EnvInject plugin is not user-friendly
      */
      
      import hudson.model.*
      
      def console = manager.listener.logger.&println
      
      // read the props file
      def props = new Properties()
      new File("${manager.envVars['WORKSPACE']}/postbuild.props").withInputStream { 
          stream -> props.load(stream) 
      }
      
      props.each{
          key, value -> console("${key}:${value}")
          def pa = new ParametersAction([
              new StringParameterValue(key, value)
          ])
          manager.build.addAction(pa)
      } 
      

      在需要将变量传递给构建后步骤的每个构建步骤中,我都会执行以下操作:

      echo "hipchat_message=Server build succeded: <a href='https://$SERVER_NAME/'>$SERVER_NAME</a> (<a href='$BUILD_URL'>Job</a>)" > "$WORKSPACE/postbuild.props"
      

      【讨论】:

      • 这看起来正是我所需要的...我看到值读取正确并记录到控制台,但注入的值在后续的构建后步骤中似乎不可用(例如 Slack 通知)
      • 我找到了答案...在以后的 Jenkins (2.x >) 中有一些安全限制,你必须在你的 groovy 脚本中为你想要的每个环境变量添加一行 System.setProperty("hudson.model.ParametersAction.safeParameters", "BUILD_URL")放。见这里issues.jenkins-ci.org/browse/…
      【解决方案3】:

      我不确定 python 但至少 shell 脚本可以从 Jenkins 获取参数

      /code/workspace/myscript.sh ${BUILD_NUMBER}
      

      您只需将其添加到发布步骤中

      【讨论】:

      【解决方案4】:

      是的,由 Jenkins 自己生成的环境变量在构建后步骤中可用(对于您自己的环境变量,您需要 EnvInject plugin

      您可以运行构建后的“执行 shell”或“执行批处理命令”步骤,只需键入 set。您在那里看到的一切都可以访问。

      【讨论】:

      • 适用于 maven 项目,但不适用于 freestyle 项目
      【解决方案5】:

      我在 Freestyle 项目中也遇到了同样的问题。我现在通过将构建后步骤移动到构建部分本身来解决它(作为最后一步)。

      【讨论】:

        猜你喜欢
        • 2018-04-04
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 2015-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多