【问题标题】:Access Jenkins Environment Variables in Java Program在 Java 程序中访问 Jenkins 环境变量
【发布时间】:2017-03-28 08:15:44
【问题描述】:

有没有什么方法可以在 java 程序中访问 jenkins 环境变量(BUILD_NUMBER 等)而不对 jenkins 作业做任何更改。

我在想是否有任何监听器(Jenkins 或 Maven)可以用来获取 jenkins 环境变量,然后我可以将它们设置为 System 属性并访问我的 java 程序中的任何位置。

我遇到了 EnvInject 插件,但这需要换工作。我正在寻找可以以编程方式访问的解决方案!

参考: https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables

【问题讨论】:

    标签: java maven jenkins jenkins-plugins


    【解决方案1】:

    从该文档中可以清楚地看出,您可以以这种方式将这些值作为 VM 选项传递:

    clean install -DBUILD_NUMBER=${BUILD_NUMBER} -DBUILD_ID=${BUILD_ID} ... etc.
    

    (并通过 System.getProperty(...) 在您的 java 程序中访问它们)。

    【讨论】:

    • 谢谢,但我正在寻找一种无需对工作本身进行任何更改的解决方案。这样做的原因是,我正在开发一项功能,无论工作如何,我都应该能够将有关构建的所有数据存储在集中式数据库中。
    • 那是不可能的
    【解决方案2】:

    如果您想在 Jenkins 中设置环境变量并在您的 java 代码中访问它,您可以使用以下步骤:

    1. 在管理 Jenkins 页面的配置系统菜单中的 Jenkins 中创建环境变量。例如,您添加了一个名为“Browser”的环境变量。
    2. 您可以使用以下代码在 java 程序中访问相同的环境变量。

      System.out.println(System.getenv("Browser"));
      

    【讨论】:

      【解决方案3】:

      jenkins 作业已经预定义了一些环境变量。这些带有名称和描述的变量列表将在以下网址中提供

      http:// 你的 Jenkins URL/env-vars.html(例如:http://cptest-Jenkins/env-vars.html

      可以使用以下代码轻松访问这些环境变量列表。

      System.out.println("Build Number:"+System.getenv("BUILD_NUMBER")); //BUILD_NUMBER - name of the environment variable
      

      这将打印当前的内部版本号。同样的方式你也可以访问其他变量。

      【讨论】:

        【解决方案4】:

        一个“hacky”但有效,您可以创建一个从构建中获取环境变量的 groovy 脚本,然后使用 jenkins-cli 触发它。

        例如,用于从构建中获取环境变量的 groovy 脚本:

        import hudson.model.*
        import jenkins.model.*
        
        def jenkins = Jenkins.getInstance()
        def jobName = this.args[0]
        def buildNumber = Integer.valueOf(this.args[1])
        def job = jenkins.getItem(jobName)
        def bld = job.getBuildByNumber(buildNumber)
        bld.environment.each{
          println it
        }
        

        要使用 jenkins-cli 触发它,请使用以下命令:

        java -jar pathToCli/jenkins-cli.jar -s http://myJenkins:8080/ groovy getBuildEnvVars.groovy jobName bldNum
        

        然后要从 java 代码中触发它,您可以执行以下操作:

        public static void main(String[] args) {
                Process proc = null;
                String jenkinsCliPath = <path to jenkins cli jar>;
                String jenkinsUrl = <jenkins url>;
                String groovyScriptPath =<pathToGroovyScript>;
                String jobName = <jobName> ;
                int buildNumber = <build number>;
        
                try {
                    String cliCmd = "java -jar "+ jenkinsCliPath +"  -s "
                            + jenkinsUrl +" groovy " + groovyScriptPath + " " + jobName + " "
                            + buildNumber;
                    proc = Runtime.getRuntime().exec(cliCmd);
                    proc.waitFor();
                    InputStream is = proc.getInputStream();
                    byte b[] = new byte[is.available()];
                    is.read(b, 0, b.length);
                    System.out.println(new String(b));
        
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        

        注意:运行脚本的用户必须先登录,所以使用cli登录,或者将用户的公钥添加到Jenkins中的相关用户。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-26
          相关资源
          最近更新 更多