Jenkinsでシェルスクリプト実行失敗時の対処方法：java.io.IOException: Cannot run program "sh"

# 課題
Jenkinsの初心者ですが、
以下サイトを見てJenkinsで**ジョブ**を作り、**Build Steps**で**シェルの実行**を試したところ、、、

https://tracpath.com/works/development/how_to_create_a_new_job_in_jenkins/

このエラーで躓いてました。。。
```
Running as SYSTEM
ビルドします。 ワークスペース: C:\ProgramData\Jenkins\.jenkins\workspace\test
[test] $ sh -xe C:\Windows\TEMP\jenkins15041529600795810946.sh
指定されたファイルが見つかりません。
FATAL: コマンドの実行に失敗しました
java.io.IOException: CreateProcess error=2, 指定されたファイルが見つかりません。
	at java.base/java.lang.ProcessImpl.create(Native Method)
	at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:499)
	at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1110)
Caused: java.io.IOException: Cannot run program "sh" (in directory "C:\ProgramData\Jenkins\.jenkins\workspace\test"): CreateProcess error=2, 指定されたファイルが見つかりません。
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1143)
	at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
	at hudson.Proc$LocalProc.<init>(Proc.java:252)
	at hudson.Proc$LocalProc.<init>(Proc.java:221)
	at hudson.Launcher$LocalLauncher.launch(Launcher.java:994)
	at hudson.Launcher$ProcStarter.start(Launcher.java:506)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:144)
	at hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:92)
	at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:20)
	at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:818)
	at hudson.model.Build$BuildExecution.build(Build.java:199)
	at hudson.model.Build$BuildExecution.doRun(Build.java:164)
	at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:526)
	at hudson.model.Run.execute(Run.java:1895)
	at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:44)
	at hudson.model.ResourceController.execute(ResourceController.java:101)
	at hudson.model.Executor.run(Executor.java:442)
Build step 'シェルの実行' marked build as failure
Finished: FAILURE
```
# 前提
・Javaインストール済み（Jenkinsは11以上しかだめらしい）
・Jenkinsインストール済み
・Jenkins初期設定済み
・上のサイトに従いジョブを作成

# 環境
```
$ java -version
java version "17.0.8" 2023-07-18 LTS
```

# 対処方法
以下記事を参考にし、うまく解決できた！！

https://stackoverflow.com/questions/72108168/java-io-ioexception-cannot-run-program-sh

## ①ダッシュボード左のJenkinsの管理を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/f6df66ad-e8c5-f085-848a-da47824786cb.png)

## ②System ConfigurationのSystemを押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/f168ef79-143b-f361-8f76-31058e96707c.png)

## ③シェル実行ファイルを設定
ネットで「Windows シェルを実行」を検索すると、linux機能の有効化やUbuntuのインストールなどを誘導するサイトが多いですが。。。（それは間違ってないよ）

ただ、今回の事象は、実はwindows内蔵の**cmd**でシェルを実行できるよ！

初めてJenkinsをインストールするとき、シェル実行ファイルの設定が空欄になっている人が多いようで、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/f2a523b2-14ec-7bf5-590f-7634030e0ea5.png)

以下のパスを設定してください！
```
C:\Windows\system32\cmd.exe
```
:::note info
※補足
デフォルトでcmdの居場所はここですが、場所が違ったりする人は適宜変更してください～
:::

## ④再実行するとうまく行った！
どうやら、シェルスクリプトが実行できない原因は、windowsでの実行場所を教えてあげてないようでした。。。

上記のようにcmdの居場所を設定したら実行できるようになった！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3538617/b37f7fe3-de1c-49c8-4722-9545beaf12f6.png)

# 終わりに
今回はJenkinsのついでに、シェル実行時に裏でwindowsがどう動いてるか勉強できた！