はじめに
業務上の都合により、Windows Formアプリに関するCI環境を整えることになり、
色々検索していった所GitLabのCI/CDパイプラインである程度どうにかできそうな手がかりを得た。
ただ、色々とかなり複雑に感じたため、忘備録として資料を残しておく
環境
Windows10(Home Editionでも動作可能なはず。)
RaspberryPi(GitLab動作用)
大まかな手順
- GitLabのセットアップ
- RaspberryPi上にGitLabをインストールする
- リポジトリの準備
- Windows側のセットアップ
- Windowsでgitlab-runnerをダウンロードし、インストールする
- NetCoreバージョンのPowershell(pwsh.exe)をインストールする
- 何らかの方法で(手段は問わない)pwsh.exeへのパスを通す
- .NetFrameworkのツールのインストールを行う
- ビルドツール
- テストツール
- Windows上のRunnerをGitLabへ登録する
- Jobの設定
GitLabのセットアップ
これは公式ホームーページのReapberryPi用のインストール手順ページに従うだけだから割愛する。
セットアップが完了したら、CI環境を整えたいレポジトリを作成しておく。
Windows側のセットアップ
Runnerのダウンロードとサービスへの登録
下記を参照すれば、とりあえずgitlab-runnerは登録できる。
ただし、自分の場合は何をやっても自分のアカウントでサービスとしてrunnerを立ち上げることができなかった。
ちなみにこの時点で他の設定を整えて動かそうとしたらこのようなエラーが出る。
.NetCore版のPowershell(pwsh)のインストールと環境変数の調整が必要となるようだ。
(※ログが長すぎたので改行しています。)
ERROR: Job failed (system failure):
prepare environment:
failed to start process:
exec: "pwsh":
executable file not found in %PATH%.
Check https://docs.gitlab.com/runner/shells/index.html#shell-profile-loading for more information
.NetCore版のPowershellのインストール
最新のPowershellでは.Net Core 6.0が必要になる。.Net Core 6.0も一緒にダウンロードしよう。
Powershellのインストール方法にはいくつか方法があるが、多分msiを使用するのが無難だと思う。
PowerShellのインストールサイト
.Net 6.0(Powershellに必要なライブラリ)のダウンロードサイト
自分は「.NET グローバル ツールとしてインストール」からインストールしてしまったため、後でpwsh.exeへのパスを調べてシステムの環境変数に追加する必要が出てしまった。
その他必要なツールのインストール
Visual Studio 2019の時点では、.Net FrameworkのアプリのテストにはMSTestを使用するようだ。
その場合は下記記事の「コンソールでUnitTestを実施」以降を参考にすれば良い。
あとは使用した環境に一致したBuild ToolsをAgentsをダウンロードしたサイトからダウンロードしよう。
この記事投稿時点(Visual Studio 2022)の時点では、各ツールへのパスは下記の通り。
(2022以外を使う場合は下記の2022の数字を変更すればよさそうだ。)
- ビルドツール
C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\MSBuild\Current\Bin\MSBuild.exe
- テストツール
C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe
ビルドはともかく、テストツールはどのように動くのかわかってないから試しに動かしてみる。
下記のようにコマンドを送って試してみた。
$mstest = "C:\Program Files (x86)\Microsoft Visual Studio\2022\TestAgent\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe"
$testtarget = ".\(テストプロジェクト)\bin\Release\MainTest.dll"
cd (ソリューションのディレクトリ)
& "$mstest" "$testtarget"
出力結果はこんな感じ。
Microsoft (R) Test Execution Command Line Tool Version 17.0.0
Copyright (c) Microsoft Corporation. All rights reserved.
テスト実行を開始しています。お待ちください...
合計 1 個のテスト ファイルが指定されたパターンと一致しました。
成功 TestMethod1 [5 ms]
テストの実行に成功しました。
テストの合計数: 1
成功: 1
合計時間: 1.4221 秒
RunnerのGitLabへの登録
これは上の方のリンク「GitLabにWindowsのrunnerを追加する」を参考にすれば問題ないので割愛します。
Jobの設定
まずは動作確認をしたかったので、サンプルに「windows」のタグだけ追加してみた。
(runnnerで指定しているタグを過不足なく入れておく必要があります)
stages: # List of stages for jobs, and their order of execution
- build
- test
build-job: # This job runs in the build stage, which runs first.
stage: build
tags:
- windows
script:
- echo "Compiling the code..."
- echo "Compile complete."
unit-test-job: # This job runs in the test stage.
stage: test # It only starts when the job in the build stage completes successfully.
tags:
- windows
script:
- echo "Running unit tests... This will take about 60 seconds."
- sleep 60
- echo "Code coverage is 90%"
このファイルが含まれるコードを実際にPushしたら次のような動作になった。
とりあえず、適当なスクリプトをWindows上で動かせるようになったので、
今後はこの環境を使って実際に色々動かして試してみることにする。