💻
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