有没有办法在java程序中访问jenkins环境变量(BUILD_NUMBER等)而不对jenkins作业进行任何更改。
我在想是否有任何监听器(Jenkins或Maven)可以用来获取jenkins环境变量,然后我可以将它们设置为 System 属性并访问我的java程序中的任何位置。
我遇到了 EnvInject 插件,但这需要更改作业。我正在寻找一个解决方案,我可以编程访问!
答案 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代码中访问它,则可以使用以下步骤:
您可以使用以下代码在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
这将打印当前的内部版本号。同样,您也可以访问其他变量。