7

これは私を夢中にさせ始めています..しかし、自分でそれを理解するのは運が悪いようです:/

たとえば、スレーブAとスレーブBという名前の 2 つのスレーブ間で文字列値を共有するメカニズムをセットアップする必要があります。

現在、私が見つけた中で最も近いものは、この SO Question: Jenkins Slave Environment Variable Refreshです。

ただし、Slaves 環境変数自体ではなく、ビルドスクリプトでアクセスを有効にすることを目的としています。(関連する SO の質問: Jenkins で Windows バッチ コマンドを使用して環境変数を使用するにはどうすればよいですか? )

現在、私はこのセットアップを持っています:

1) Aで、ジョブAがトリガーされます。

この Windows バッチ コードを実行します (実際のパスは、明らかに '<>' に置き換えられます)。

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%

かなり自明で簡単な私見。

2) Aのジョブにはアップストリーム ジョブBがあり、ビルドが成功するとトリガーされます。したがって、スレーブBでは、Bビルドがこのバッチ コードを実行します (実際のパスは、明らかに '<>' に置き換えられます)。

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

注: resetvars.bat および resetvars.vbs は、この SO 質問から取得されます: Windows のコマンド プロンプトから環境変数を更新するコマンドはありますか?


出力 (%HOR_BUILD_ID% および %HOR_UPSTREAM_ID% の値) はまだ古くなっています...新しい変数を更新する唯一の方法は、そのひどいジェンキンス (マスター) サービスを再起動することですが、これは明らかに CI 環境では使用できません。 ..

質問が表面化しました - BのビルドジョブBがトリガーされたときにこれらの変数を更新/再読み取りする方法を作成して、たとえば EnvInject プラグインを使用せずにスレーブからシステム変数にアクセスできるようにするにはどうすればよいですか?


ユーザーの操作が必要な別の SO の質問と回答。したがって、私の場合は受け入れられません: Jenkins - ジョブ間で変数を渡しますか?


これも私の場合は機能しません: http://comments.gmane.org/gmane.comp.java.hudson.user/37897


スレーブとそれに対応するノードが変数を受信せず、その環境を同時に解決しないため、グローバル環境変数から情報を取得できなくなる可能性がありますか? それを確認したところ、突然、いくつかの興味深い環境変数の設定データが私の目に飛び込んできました:

NODE_LABELS | 製品リリース

NODE_NAME | a

...これはスレーブB用ですが、これはもともとスレーブA用であるため、異なる値にする必要があります...なんてこった??????????????????!!!! :/

根本的な問題は、Jenkins が複数のスレーブ NODE 情報を解決する際にバグを持っていることにあると感じ始めています。

Issue @ Jenkins jira を作成することにしました: https://issues.jenkins-ci.org/browse/JENKINS-15397

4

2 に答える 2

2

パラメータ化されたトリガー プラグインの追加について検討しましたか?

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

これにより、最初のジョブから 2 番目のジョブにパラメーターを渡すことができます (削除するジョブ名など)。

于 2012-10-16T00:15:09.887 に答える
0

この (https://issues.jenkins-ci.org/browse/JENKINS-6604) 修正により、次の変更が行われたようです。

  • Windows 2k8 (R2) x64 (データセンター) マシンに複数のスレーブをインストールできない問題を修正しました。
  • 値を正しく解決できない問題を修正しました。セットアップは変更されていません...しかし、すべてのログインを再入力するとうまくいったようです。
  • NODE_LABELS と NODE_NAME がシステム情報構成にロードされなくなったため、おそらくツール環境設定を壊しました xD ... しかし、このセットアップが実際に機能する限り、誰が気にしますか (そして、次の jenkins 更新で壊れていません ...) :D

参考までに、私が作成したjiraの問題はまだ開いています...

于 2012-12-17T17:50:18.350 に答える