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

在Java程序中访问Jenkins环境变量,java,maven,jenkins,jenkins-plugins,Java,Maven,Jenkins,Jenkins Plugins,是否有任何方法可以在java程序中访问jenkins环境变量(BUILD_NUMBER等),而无需对jenkins作业进行任何更改 我在想,如果有任何监听器(Jenkins或Maven),我可以连接到其中获取Jenkins环境变量,然后我可以将它们设置为系统属性,并访问java程序中的任何地方 我遇到了EnvInject插件,但这需要更换工作。我正在寻找一个解决方案,我可以获得访问编程 参考: 从该文档中可以清楚地看到,您可以以这种方式将这些值作为VM选项传递: clean install -D

是否有任何方法可以在java程序中访问jenkins环境变量(BUILD_NUMBER等),而无需对jenkins作业进行任何更改

我在想,如果有任何监听器(Jenkins或Maven),我可以连接到其中获取Jenkins环境变量,然后我可以将它们设置为系统属性,并访问java程序中的任何地方

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

参考:

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

clean install -DBUILD_NUMBER=${BUILD_NUMBER} -DBUILD_ID=${BUILD_ID} ... etc.
(并通过
System.getProperty(…)
)在java程序中访问它们)。

一个“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();
        }
    }
publicstaticvoidmain(字符串[]args){
processproc=null;
字符串jenkinsCliPath=;
字符串jenkinsUrl=;
字符串groovyScriptPath=;
字符串jobName=;
int buildNumber=;
试一试{
String cliCmd=“java-jar”+jenkinsCliPath+“-s”
+jenkinsUrl+“groovy”+GroovyScript路径+“”+jobName+“”
+建筑物编号;
proc=Runtime.getRuntime().exec(cliCmd);
进程waitFor();
InputStream=proc.getInputStream();
字节b[]=新字节[is.available()];
is.read(b,0,b.长度);
System.out.println(新字符串(b));
}捕获(IOE异常){
e、 printStackTrace();
}捕捉(中断异常e){
e、 printStackTrace();
}
}

注意:运行脚本的用户必须登录。因此,请使用cli执行登录,或将用户的公钥添加到Jenkins中的相关用户。

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

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

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

  • jenkins作业已经预定义了一些环境变量集。这些带有名称和说明的变量列表将在下面的url中提供

    http://Your Jenkin-URL/env-vars.html(例如:)

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

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

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

    谢谢,但我正在寻找一种解决方案,不必对作业本身进行任何更改。这样做的原因是,我正在使用一个功能,在这个功能中,无论工作是什么,我都应该能够将有关构建的所有数据存储在一个集中的数据库中。那是不可能的