在Java程序中访问Jenkins环境变量
是否有任何方法可以在java程序中访问jenkins环境变量(BUILD_NUMBER等),而无需对jenkins作业进行任何更改 我在想,如果有任何监听器(Jenkins或Maven),我可以连接到其中获取Jenkins环境变量,然后我可以将它们设置为系统属性,并访问java程序中的任何地方 我遇到了EnvInject插件,但这需要更换工作。我正在寻找一个解决方案,我可以获得访问编程 参考:在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
从该文档中可以清楚地看到,您可以以这种方式将这些值作为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代码中访问它,可以使用以下步骤:
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
这将打印当前版本号。同样,您也可以访问其他变量。谢谢,但我正在寻找一种解决方案,不必对作业本身进行任何更改。这样做的原因是,我正在使用一个功能,在这个功能中,无论工作是什么,我都应该能够将有关构建的所有数据存储在一个集中的数据库中。那是不可能的