Dies beginnt um mich zu verrückt .. aber es scheint, wie ich aus Glück bin es selbst herauszufinden:/Passing-System Env Variable in Jenkins Slave
Ich brauche einen Mechanismus einzurichten Zeichenfolge zu teilen Wert zwischen zwei Slaves, zum Beispiel genannt Slave A und Slave B.
Momentan werden die meisten am nächsten, die ich gefunden habe, ist dies SO Frage: Jenkins Slave Environment Variable Refresh
Aber es soll noch Zugang in buildscripts ermöglichen, nicht in der Slaves Umgebungsvariable selbst. (Bezogen SO Frage: How are environment variables used in Jenkins with Windows Batch Command?)
Zur Zeit habe ich dieses Setup:
1) auf A der Job A ausgelöst wird.
Sie führt diesen Windows-Batch-Code (tatsächliche Pfade, sind offensichtlich, die mit '<>' ersetzt):
cmd /c start java -jar <path_of_slave>\slave.jar -jnlpUrl <url_of_slave>/slave-agent.jnlp
setenv.exe /m HOR_BUILD_ID -delete
setenv.exe /m HOR_BUILD_ID %BUILD_NUMBER%
setenv.exe /m HOR_UPSTREAM_ID -delete
setenv.exe /m HOR_UPSTREAM_ID %JOB_NAME%
ziemlich selbsterklärend und geradlinig imho.
2) der Auftrag auf A stromauf Job B haben, ist, dass bei erfolgreicher Build ausgelöst. Also, in dem Slave-B die B baut diesen Batch Code ausführt (tatsächliche Pfade, sind offensichtlich, ersetzt mit '<>'):
SetLocal EnableDelayedExpansion
@echo off
@echo --- Refreshing Environemnt variables...
@echo on
set prgfil=%ProgramFiles(x86)%
call "%WORKSPACE%\..\..\..\tools\misc\resetvars.bat"
@echo --- Reading environment variables...
copy /y "<path_containing_%HOR_UPSTREAM_ID%_variable" "<path_containing_%HOR_BUILD_ID%_variable"
if !errorlevel!==0 goto ok1
goto error
:ok1
goto end
:error
EndLocal
exit /b 1
:end
EndLocal
HINWEIS: resetvars.bat und resetvars.vbs ist genommen von dieser SO Frage: Is there a command to refresh environment variables from the command prompt in Windows?
Der Ausgang (% HOR_BUILD_ID% und% -Werte HOR_UPSTREAM_ID%), nach wie vor, veraltet ist ... nur so neue Variablen aufgefrischt zu bekommen, ist, dass darn jenkins neu zu starten (Master) Service, aber das ist defi netly no-go in der CI-Umgebung ...
Die Frage ist nun Oberflächen - wie diese Variablen machen aktualisiert werden/neu gelesen, wenn der Build Job B auf B ausgelöst wird, so konnte ich zugreifen Systemvariablen vom Slave ohne das EnvInject Plugin?
Ein weiterer SO Frage und Antwort, die Interaktion mit dem Benutzer braucht daher nicht akzeptabel in meinem Fall: http://comments.gmane.org/gmane.comp.java.hudson.user/37897
Vielleicht: Jenkins - passing variables between jobs?
auch in meinem Fall nicht funktionieren der Slave und sein entsprechender Knoten erhalten keine Variable/lösen seine Umgebung nicht korrekt auf, was dazu führt, dass Informationen von Global envirton nicht abgerufen werden können mtn-Variablen?Ceched es aus und plötzlich einige interessante Umgebungsvariable config Daten houstt mein Auge:
NODE_LABELS | a prodreleases
NODE_NAME | ein
... ist dies für Slave B, aber es sollte unterschiedliche Werte sein, da dieser Slave ursprünglich für A ... Was für eine Hölle ????????????? ????? !!!! :/
Ich habe das Gefühl, dass Root-Problem ist, dass Jenkins Bug bei der Auflösung mehrerer Slave-NODE-Informationen hat.
entschied sich für eine Ausgabe @ Jenkins jira zu erstellen: https://issues.jenkins-ci.org/browse/JENKINS-15397
Hey Kumpel, ich nicht alles verstehen konnten Sie geschrieben haben. Aber im Grunde konnte ich Jenkins Systemvariable über ant-Skript übergeben. –
das ist zu viel Bloat und Java Parsing Pferdestärke für solche Grundbedürfnisse. :/ –
Ich würde vermeiden, Daten zwischen den Slaves über Jenkins Skript/Job zu übergeben - dies wird wahrscheinlich beim Hinzufügen von Slaves oder bei der Offline-Übernahme eines Slaves brechen. Das Verketten der Jobs (wie von @zagrev vorgeschlagen) ist ein viel besserer Weg, Sie können die Daten in einem Artefakt weiterleiten oder ein Plugin verwenden. –