[英]Access Jenkins Environment Variables in Java Program
有沒有辦法在java程序中訪問jenkins環境變量(BUILD_NUMBER等)而不對jenkins作業進行任何更改。
我想是否有任何監聽器(Jenkins或Maven)我可以用來獲取jenkins環境變量,然后我可以將它們設置為系統屬性並訪問我的java程序中的任何位置。
我遇到了EnvInject插件,但這需要更改工作。 我正在尋找一個解決方案,我可以編程訪問!
參考: https : //wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project#Buildingasoftwareproject-JenkinsSetEnvironmentVariables
從文檔中可以清楚地看出,您可以將這些值作為此選項的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();
}
}
注意:運行腳本的用戶必須登錄。因此,使用cli執行登錄,或者將用戶的公鑰添加到Jenkins中的相關用戶。
在Jenkins中,如果要設置環境變量並在java代碼中訪問它,可以使用以下步驟:
您可以使用下面的代碼在java程序中訪問相同的環境變量。
System.out.println(System.getenv("Browser"));
已經使用一組環境變量預定義了jenkins作業。 這些帶有名稱和描述的變量列表將在以下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
這將打印當前的內部版本號。 同樣您也可以訪問其他變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.