製品のパフォーマンスメトリックをキャプチャするには、jenkinsマスタースレーブ構成を使用します。 jenkins-slaveはメモリを蓄積する傾向があるため、キャプチャされるパフォーマンスメトリックに影響することが観察されています。
キャプチャされるメトリックの一貫性を確保するために、スレーブで実行中のジョブがないときに、マスターから毎日ジェンキンススレーブを再起動することを考えています。これは可能ですか?
どうすればそれを達成できますか?
注:jenkins-slaveをサービスとして使用することは、他のセキュリティアクセスの問題があるため、オプションではありません。
私はこの答えが少し遅れて来ていることを知っています:
これは私が同じ理由で同じことをした方法です、これがこれを達成するための最良の方法であるかどうかはわかりませんが、私たちの問題の多くを解決しました:
Windowsマシンの場合:
Macマシンの場合:
このプロセスは、Macでは比較的簡単です。まず、Macノードで「shutdown -r now」を実行するジョブを作成します
ノードは、ssh経由で接続するようにセットアップするだけです。これで、Jenkinsでオンラインで表示できるようになります。
これは、自動化に使用されたすべてのマシンを再起動するためのスクリプトの「実行シェル」部分でした:
distro=`uname`
if [ "$distro" = "Windows_NT" ] || [ "$distro" = "WindowsNT" ] ;then
echo "Restarting Windows Machine...."
shutdown -r -f
else
echo "Restarting Mac Machine...."
Sudo shutdown -r now
fi
PS:
質問と正確に関連しているわけではありませんが、指定した状況に役立つ場合があります。 Windowsマシンの起動時に一時ファイルを消去するバッチスクリプトを追加することをお勧めします。 Windowsマシンのスタートアップフォルダーにあるバッチスクリプト(Say、cleanTemp.bat)に以下を追加します。 (Windows 10の場合、C:\ Users \\ AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)
rmdir %temp% /s /q
md %temp%
それでも答えが必要な場合: https://wiki.Apache.org/general/Jenkins#How_do_I_restart_a_Jenkins_Unix_Slave.3F
ただ、切断しただけで、スレーブでプロセスが停止したことがわかりました。手動で殺す必要はありませんでした。その後、スレーブを再度起動し、それで終わりです。
これはWeb UIから良いことです。まだCLIを検索していません。
ジョブを作成します(例: 「Reboot-Slave」、シェル「shutdown -r -t 0」で設定し、ターゲットスレーブ名をパラメーターとして使用します。 (このようにして、再起動コマンドは再起動するターゲットスレーブで直接実行されます。)
別のジョブを作成します「Reboot-Check-Slave-Online」、このジョブでは、最初のジョブを呼び出し、ターゲットスレーブ名をパラメーターとして渡す必要があります。さらに、スレーブが再起動を完了してJenkinsに接続したかどうかを判断するロジックを記述する必要がありますサーバーに再度、ジョブに「システムgroovyスクリプトの実行」ステップを追加して実装し、以下のコードを記述します。
import hudson.model.*
def target_slave_param = "target_slave"
def resolver = build.buildVariableResolver
def target_slave = resolver.resolve(target_slave_param)
println "target_slave is: ${target_slave}"
def status = 0;
//do{
println "Searching for ${target_slave}";
slave = Hudson.instance.slaves.find({it.name == target_slave});
if (slave != null)
{
computer = slave.getComputer();
if (computer.isOffline())
{
println "Error! $target_slave is offline.";
status = 1;
}
else
{
println "OK: $target_slave is online";
}
}
else
{
println "Slave $target_slave not found!";
status = 1;
}
//}