【.Net】JenkinsからMSbuildした時にはまったポイント

2020年3月4日

話題のCI/CDの波に乗りたい!!!

ということで、Jenkinsおじさんに協力してもらいながら自動化してみたら意外とはまったので備忘録として書き残しておこうと思います。

そもそもJenkins使うのも初めてだし、今までずっとコーディングばっかりしてたのでこういった環境構築系の内容全く知らないど素人だったので、「なんでそこにはまったの?」みたいなところもあるかと思いますがご容赦を。。。

そもそもIIS向けにデプロイする方法わからない

Jenkins以前にデプロイ自体どうやってやんの?っていう話ですね。。。
これ自体は以外と長くなっているので、別記事でまとめています。

OKデプロイはわかった、じゃあどうやってJenkinsから実行するの?

Jobから設定するのはわかった、どうやらトリガみたいなのも設定できるのも分かった、ビルドっていう欄があるからそこにMSBuildのコマンド書けばいいのかな!?!?

っていう考えはあってたんですが、何を考えていたのか、
MSbuild実行用のbatファイル用意して、それをJenkinsの
「Windowsバッチコマンドの実行」を利用して用意したbatファイル叩いて間接的にMSBuild実行しようとしてたんですよね。。。
「MSBuildの実行」っていう直接的なものがあったんですけどね。

ただそれを実行できるようにするまでにいろいろ設定が必要がったのでその方法を記載しておきます。

まず、Jenkins開いて、Jenkinsの管理 > Global Tool Configurationを開きます。

jenkins1
jenkins2

そしたら設定画面が開かれるので、MSBuildの欄を探して、「MSBuild追加」ボタンをクリックします。

jenkins3

設定欄が開くので、
「名前」と「MSBuild.exe ファイルパス」を入力します。

「名前」欄はわかるような名前であればなんでもOKです。
「MSBuild.exe ファイルパス」欄はお使いのVisual Studioのバージョンに応じて格納先が変わるのでご注意ください。
ちなみに2017 Communityの場合は
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin
に格納されていました。

これでJenkinsのJobからMSBuildの実行準備ができたので後は設定するだけのはず!
Job設定のビルドから、ビルド手順の追加で「MSBuildの実行」を選択して実行しましょう!
コマンドライン引数とかは本記事上部でも書きました、「IIS向けにデプロイする方法」を参考にしていただければ大丈夫かと思います。

さぁこれで実行だ!!!

Nugetパッケージの復元を実行してって怒られる

ハイ、失敗しました。。。

通常、Visual Studioを使ってる限りではNugetって自動でリストアされるのであまり意識しない所なんですが、MSBuildを利用するにあたっては自動でリストアしてくれないので注意が必要です。
一回のコマンドだけで実行できないか試したのですが、解決策が見つからず、私は2回に分けてNugetのリストアとMSBuildを実行する、という方法で解決しました。

JenkinsのJobで「ビルド」欄にすでに一つビルドとデプロイ用に「MSBuildの実行」が用意されていると思うのですが、それの前にリストア用の処理を実行してしまおう!ということです。

そのために、まずはnuget.exeをダウンロードする必要があります。
こちらからダウンロードできます。

それを任意のフォルダに配置して、ビルドの手順として「Windowsバッチコマンドの実行」を追加し、以下の感じで設定すればOKです。

"<NuGet.exeの配置パス>"/nuget.exe restore "<復元対象のソリューションファイル>"

こいつが、ビルド実行時の一番最初に動くように一番上側にドラッグして持って行ってあげればOKです。

さぁこれで実行してみましょう!!!

jenkins_6

これでようやくお天気晴れてくれました。