web-dev-qa-db-ja.com

JenkinsスレーブをコマンドラインでWindowsサービスとしてインストールする

私はGoogleでコマンドラインでサービスをインストールする方法をたくさん探していました(そのため手動での対話なしで)が、jenkins-slave.exeを取得する方法に固執しています

私はそれらの指示を見つけました https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+as+a+Windows+service ですが、実行可能ファイルを取得する方法がわかりません。スレーブを接続する正しいキーでslave.jarをダウンロードして実行しましたが、exeは生成されません。

このページを見つけました https://github.com/kohsuke/winsw/blob/master/doc/installation.md#winsw-installation-guide 手動でインストールしますが、瓶ができるときにホイール。さらに、WinSW.exeが異なり、プラグインによって更新されないというリスクがあります(自動更新コードがいくつか見られました)。

Jenkins-slave.exeをダウンロードまたは生成する方法はありますか?または、slave.jarからコマンドラインで「サービスとしてインストール」を実行する方法はありますか?

8
Maxime Viargues

プラグイン開発者に連絡した後、自分の質問に答えるには:

Jenkinsからexeを直接ダウンロードする実際の方法はありません。slave.jarは、リモートプロトコルを介してマスターからそれを取得します。 URLを介してダウンロードできるようにするためのリクエストを作成しました(開発者が提案したとおり)。今後利用できるようになる可能性があります。

現在、実行可能ファイルは名前が変更されたWindows Service Wrapperバイナリです: https://github.com/kohsuke/winsw したがって、このバイナリを同じ方法で使用しました。

WinSWおよびXMLファイルで使用される構成に関しては、GitHubリポジトリ https://github.com/jenkinsci/windows-slave-installer-module の構成を使用しました。バージョンは、構成に関して互換性があります。

基本的に、exeをダウンロードし、Jenkinsから秘密鍵を取得し、元のプラグインの構成を使用してサービスを作成します。次に、jenkins-slave.exe installを使用してサービスをインストールします。

ステップバイステップ:

  • JNLPコマンドをJenkinsから(Nodeページから))取得して、秘密鍵を取得します(例:Java -jar slave.jar -jnlpUrl http://jenkins...
  • Jenkinsからslave.jarファイルをダウンロードします(JNLPコマンドから取得)
  • サービスラッパーの実行可能ファイルをダウンロードします。 http://repo.jenkins-ci.org/public/com/Sun/winsw/winsw/2.1.0/winsw-2.1.0-bin.exe
  • サービスの実行に使用されるXMLをセットアップします(モジュールで、またはwinsw Webサイトで直接利用可能)
  • スレーブ構成XMLファイルをセットアップします(モジュールのソースコードで利用可能)
  • 次に、jenkins-slave.exe installを使用してサービスをインストールします
9
Maxime Viargues

私がやることは:

  • slave.jarファイルをダウンロードします(Jenkinsのノードのページから)
  • ノードのページからJava -jar slave.jar -jnlpUrl http://<YOUR URL HERE>コマンドをコピーします
  • このコマンドを新しい.batファイルに貼り付けて保存します
  • Windowsの起動時にこの.batファイルを実行するスケジュールされたタスクを登録する
2
EM-Creations

または、コマンドラインでslave.jarから「サービスとしてインストール」を実行する方法はありますか?

jenkins-slave.exeを使用しませんが、代わりにJava -jar slave.jarを起動するときにJenkinsスレーブに設定する正確な環境変数を制御できるカスタムスクリプトを使用します。その新しいスレーブのJenkinsマスターノードページ。

マスターからスレーブにslave.jarを取得するには、スレーブWindowsサーバーから実行します。

curl -o slave.jar https://your.server/jenkins/jnlpJars/slave.jar

Jenkins-slave.exeを置き換えるには、Windowsサービスとして宣言されたスクリプトを nssm で使用します=

スクリプトはagent.batに似ています:

set PATH=C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0
set PATH=D:\Tools\SonarRunner\bin;%PATH%
set M2_HOME=D:\Tools\Apache-maven-3.5.0
set PATH=%M2_HOME%\bin;%PATH%
set PATH=D:\Tools\Apache-ant-1.9.3\bin;%PATH%
set GH=D:\Tools\Git
set PATH=%GH%\bin;%GH%\usr\bin;%GH%\mingw64\bin;%PATH%
set PATH=%Java_HOME%\bin;%PATH%

set WORKSPACE_FOLDER=D:\Jenkins\workspace
set GIT_WORKSPACE_FOLDER=D:\Jenkins\workspace

Java -Xmx768m -jar slave.jar -jnlpUrl https://your.server/jenkins/computer/<SlaveName>/slave-agent.jnlp -secret 87ef3d...

その後、そのスクリプトはWindowsサービスとして呼び出され、専用のユーザーアカウントによって実行されます。

runas /user:<domain>\<jenkinsUser> cmd ( enter `jenkinsUser` Windows password )

D:\Tools\nssm-2.24\win64\nssm.exe install <SlaveName> D:\Jenkins\agent.bat

次に、Windowsサービスが構成されます。

sc config <SlaveName> obj= <domain>\<jenkinsUsers> password= <jenkinsUser password>
sc config <SlaveName> start= auto

他のソフトウェアのインストールの自動化については、 Chocolatey-Software Management Automation 、Windows用パッケージマネージャーを参照してください。


スレーブの宣言側を完全に自動化するには、Web APIを使用してスレーブを作成し、 Jenkinsノード/スレーブシークレットJnlpMacキーを取得するGroovyスクリプト を使用します。
作成用のこのスクリプト 」を参照してください。
そして、秘密鍵を取得するためのグルーヴィーなスクリプト(Jenkins 2.46以降):

echo 'println jenkins.model.Jenkins.instance.nodesObject.getNode("my-agent")?.computer?.jnlpMac' \
  | Java -jar ~/Downloads/jenkins-cli.jar -s https://jenkins/ groovy =
1
VonC