💻
Windows版Jenkinsで、別ユーザーの権限を使ってバッチファイルを実行する
Windows 11 Homeにはグループポリシーエディターが付属していないため、Jenkinsインストールの際にLogon Typeで Run service as local or domain user が選択できず、 Run service as LocalSystem の設定でインストールが必要になります。
しかし、LocalSystemでサービスを実行すると、Jenkinsからバッチファイルなどを実行しようとする際に、コマンド実行がシステムユーザーとして実行されるため、ログインユーザーの権限で通していたパスや認証情報が利用できず、処理の実行に失敗してしまいます。
このようなケースでは、コマンドプロンプトから操作する場合は一般的にrunasコマンドが使用出来ますが、jenkins経由では認証時にパスワード入力ができないため、今回はタスクスケジューラを用いて解決します。
Windowsのタスクスケジューラで作成されたタスクは、タスクの実行時に使うユーザーアカウントを指定することが出来るため、Jenkinsからschtasksコマンドを使ってタスク経由でバッチファイルを実行してみます。
サービスの実行ユーザーを変更して、設定を永続化する場合はこちら
実行環境
- Windows 11 Home
- Jenkins 2.414.3
手順
-
Win+Rしてtaskschd.mscを実行
- タスクスケジューラが起動するので、左ペインから
タスク スケジューラ ライブラリを右クリックし、タスクの作成を選択
-
全般タブを選択し、名前に任意のタスク名を設定
-
操作タブを選択し、新規ボタンを押下
-
操作でプログラムの開始を選択し、プログラム/スクリプトに実行したいbatファイルを指定
- その他はお好みで設定し、
OKを押してタスクを登録 - Jenkins側で新規ジョブを作成し、
Build StepsでWindowsバッチコマンドの実行を選択 - コマンドに
schtasks /run /tn task_name(※task_nameは任意のタスク名)を入力
以上の手順で、タスクスケジューラで設定したユーザーの権限を使ってバッチファイルを実行することができます。
Discussion