在Java程序中访问Jenkins环境变量

时间:2017-03-28 08:15:44

标签: java maven jenkins jenkins-plugins

有没有办法在java程序中访问jenkins环境变量(BUILD_NUMBER等)而不对jenkins作业进行任何更改。

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

我遇到了 EnvInject 插件,但这需要更改作业。我正在寻找一个解决方案,我可以编程访问!

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

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

“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中的相关用户。

答案 2 :(得分:0)

在Jenkins中,如果要设置环境变量并在Java代码中访问它,则可以使用以下步骤:

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

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

答案 3 :(得分:0)

已经使用一些环境变量集预定义了詹金斯作业。这些具有名称和描述的变量列表将在下面的URL中提供

http://您的Jenkin 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

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