6

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

+0

Hey Kumpel, ich nicht alles verstehen konnten Sie geschrieben haben. Aber im Grunde konnte ich Jenkins Systemvariable über ant-Skript übergeben. –

+0

das ist zu viel Bloat und Java Parsing Pferdestärke für solche Grundbedürfnisse. :/ –

+0

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. –

Antwort

2

Haben Sie sich das parametrisierte Trigger-Plugin angeschaut?

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Trigger+Plugin

Dies sollte Ihnen ermöglichen, Parameter aus dem ersten Auftrag an den zweiten (wie dem Jobnamen löschen) zu übergeben.

+0

nOP. NICHT ARBEITEN. –

+0

Was ich brauche, ist eine SYSTEM-Umgebungsvariable (im Maschinenkontext) INTO BATCH von Job B <- FROM <- SYSTEM env-Variable (im Maschinenkontext) zu lesen, die ich als SYSTEM env-Variable (im Maschinenkontext) einstelle in Job A. Das erlaubt mir derzeit nichts. –

+0

Also, Java lässt Sie nicht Systemvariablen zurück auf das Betriebssystem schreiben. Jenkins wird auf Java ausgeführt, daher können Sie wahrscheinlich keine Betriebssystemumgebungsvariablen schreiben.Klingt wie Sie müssen eine andere Methode der Kommunikation zwischen den Jobs wählen. Wenn Job A tatsächlich eine Betriebssystemumgebungsvariable ausgibt, wird sie von der JVM in Job B übernommen. Haben Sie daran gedacht, Dateien zu verwenden, um die Informationen oder Nachrichten aus einer Warteschlange zu enthalten? geteilte Erinnerung? Können Sie ändern, wie Job A die Daten weitergibt? – Zagrev

2

Ich glaube, Sie suchen Jenkins Parameterized Baut! Folgen Sie den Anweisungen here, und Sie werden in kürzester Zeit einsatzbereit sein!

+0

Wie ich geschrieben habe - zusätzliche Last auf Java und daher ziemlich Buggy Jenkins Kern während des Upgrades/Update ist keine-gehen in Heavy-Duty-geladenen Vorproduktion ci Server. Außerdem-es unterstützt keine vollautomatische Parametrisierung, imho. –

+1

Es funktioniert perfekt für uns in einer sehr schweren Umgebung – meza

+0

Bitte geben Sie die vollständige Konfiguration, die Sie verwenden. Ich brauche dringend dieses Problem gelöst ... –

0

wie dies scheint (https://issues.jenkins-ci.org/browse/JENKINS-6604) fixiert die folgenden Änderungen vorgenommen:

  • feste inpossibility mehr als ein Slave in Windows 2k8 zu installieren (R2) x64 (Datencenter) Maschine;
  • festen Unmöglichkeit, Werte korrekt aufzulösen. Das Setup wurde nicht geändert ... aber es scheint so, als ob alle Logins erneut eintraten.
  • probobly brach die Tool Environment Einstellungen wie die NODE_LABELS und NODE_NAME ist nicht in System Information config mehr xD geladen ... aber wen interessiert es, solange diese Einrichtung tatsächlich funktioniert (und nicht in nächsten Jenkins Update gebrochen wird ...): D

Als Referenz der jira Frage habe ich noch offen ...