💻

Windows版Jenkinsで、別ユーザーの権限を使ってバッチファイルを実行する

2023/11/13に公開

Windows 11 Homeにはグループポリシーエディターが付属していないため、Jenkinsインストールの際にLogon Typeで Run service as local or domain user が選択できず、 Run service as LocalSystem の設定でインストールが必要になります。
しかし、LocalSystemでサービスを実行すると、Jenkinsからバッチファイルなどを実行しようとする際に、コマンド実行がシステムユーザーとして実行されるため、ログインユーザーの権限で通していたパスや認証情報が利用できず、処理の実行に失敗してしまいます。

このようなケースでは、コマンドプロンプトから操作する場合は一般的にrunasコマンドが使用出来ますが、jenkins経由では認証時にパスワード入力ができないため、今回はタスクスケジューラを用いて解決します。
Windowsのタスクスケジューラで作成されたタスクは、タスクの実行時に使うユーザーアカウントを指定することが出来るため、Jenkinsからschtasksコマンドを使ってタスク経由でバッチファイルを実行してみます。

サービスの実行ユーザーを変更して、設定を永続化する場合はこちら
https://zenn.dev/sion_pn/articles/0ceffb3297ffa2

実行環境

  • Windows 11 Home
  • Jenkins 2.414.3

手順

  • Win+R して taskschd.msc を実行
  • タスクスケジューラが起動するので、左ペインから タスク スケジューラ ライブラリ を右クリックし、 タスクの作成 を選択
  • 全般 タブを選択し、 名前 に任意のタスク名を設定
  • 操作 タブを選択し、新規 ボタンを押下
  • 操作プログラムの開始 を選択し、 プログラム/スクリプト に実行したいbatファイルを指定
  • その他はお好みで設定し、 OK を押してタスクを登録
  • Jenkins側で新規ジョブを作成し、 Build StepsWindowsバッチコマンドの実行 を選択
  • コマンドに schtasks /run /tn task_name (※task_nameは任意のタスク名)を入力

以上の手順で、タスクスケジューラで設定したユーザーの権限を使ってバッチファイルを実行することができます。

Discussion