社内で CentOS の GitLab にソースがマージされたら、Windows Serverで自動にビルドが走ってデプロイまでやりたいというご要望がありまして、途中まで検証できたのでメモ。
今回は、yamlファイルがコミットされたら、MS Buildが走るってところまでやってみました。2日ほど悩んだ。。( シンギュラリティ・ソサエティ のエンジニアさんにアドバイスもらった。ありがとうございます)
参考サイト
- https://qiita.com/k_nakayama/items/02ca5374919a572c9eb0
- https://www.atmarkit.co.jp/ait/articles/1505/13/news016.html
Windows Sever にツールをインストール
OS
- Windows Server 2016
Tools
- Microsoft Build Tools 2015 と Git をインストールする
- 「C:\GitLab-Runner」フォルダを作り、gitlab-ci-multi-runner-windows を配置する
- 環境変数の PATH に「C:\GitLab-Runner」を追加する
GitLab Runner を登録
Windows Server に置いた GitLab Runner を GitLab に登録する。
GitLab登録用トークンを取得する
GitLabのナビゲーションバー>管理者エリア>Runner を開く。
トークンをこぴっとく。
GitLab Runner を GitLab に登録する
コマンドプロンプトとか PowerShell 起動
> gitlab-ci-multi-runner-windows-amd64.exe register Runtime platform arch=amd64 os=windows pid=5288 revision=6c154264 version=11.11.0 Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/): http://192.168.0.100/ ← GitLab のアドレスを入力する Please enter the gitlab-ci token for this runner: ★先ほどこぴったトークンを貼り付ける★ Please enter the gitlab-ci description for this runner: [WIN-G000636]: C# Build Server ←説明文入力 Please enter the gitlab-ci tags for this runner (comma separated): C# ←タグ名を入れる Registering runner... succeeded runner=g1QWzrSL Please enter the executor: docker-windows, shell, virtualbox, docker-ssh+machine, kubernetes, docker, docker-ssh, parall els, ssh, docker+machine: shell ←Shellを指定 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically re loaded! PS C:\Users\Administrator>
「Whether to run untagged builds」と「Whether to lock Runner to current project」は false を指定しました。
> gitlab-ci-multi-runner-windows-amd64.exe install --password [現在ログインのユーザーパスワード] Runtime platform arch=amd64 os=windows pid=3296 revision=6c154264 version=11.11.0 > gitlab-ci-multi-runner-windows-amd64.exe start Runtime platform arch=amd64 os=windows pid=2712 revision=6c154264 version=11.11.0
ポーリングできているか確認する。
OKそう。
Windows Server にビルドしたいファイルを作る
ディレクトリを作成
C:\workspace\msbuild_test
C:\workspace\msbuild_test\App.xaml を作成
<Application x:Class="App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="MainWindow.xaml"> </Application>
C:\workspace\msbuild_test\AppByMSBuild.csproj を作成
<?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <AssemblyName>AppByMSBuild</AssemblyName> <Platform>AnyCPU</Platform> <OutputType>WinExe</OutputType> <OutputPath>.\bin\Release</OutputPath> <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> </PropertyGroup> <ItemGroup> <ApplicationDefinition Include="App.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </ApplicationDefinition> <Page Include="MainWindow.xaml"> <Generator>MSBuild:Compile</Generator> <SubType>Designer</SubType> </Page> <Reference Include="PresentationCore" /> <Reference Include="PresentationFramework" /> <Reference Include="WindowsBase" /> <Reference Include="System" /> <Reference Include="System.Xaml"> <RequiredTargetFramework>4.0</RequiredTargetFramework> </Reference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> </Project>
C:\workspace\msbuild_test\MainWindow.xaml を作成
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title=".NET TIPS #1107" Height="350" Width="525"> <Grid> <TextBlock Text="Hello, MSBuild!" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center" /> </Grid> </Window>
YAMLファイルを作る
- GitLabのトップページに移動動して [New project] でプロジェクトを作成する
- 作成したプロジェクトに移動。サイドメニュー>リポジトリ>ファイル に移動する
- [New File]クリック
- テンプレートタイプ「.gitlab-ci.yml」を選択
- ファイル名も「.gitlab-ci.yml」にする
variables: MSBuildEXE: 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe' stages: - build msbuild: stage: build tags: - C# script: - chcp 65001 - '"%MSBuildEXE%" C:\workspace\msbuild_test\AppByMSBuild.csproj'
- [Commit changes]ボタンをクリックする。
- サイドメニュー>CI/CD>パイプライン に移動。
失敗した形跡がありますが(わからなかくて大変だったのよー)
ちゃんと動くと
bin と obj フォルダができました。
C:\workspace\msbuild_test\bin\Release\AppByMSBuild.exe
これを実行。
やったね!
自動化とか詳しい人がみたら、なーんだとか思うかもですが・・
世の中、CircleCI でしょっ!ってかもですが・・
まぁそこは、キャッチアップできてなさすぎのSIerさんなので・・そんなこともあるさ!
ちょっとずついろいろできるようになるといいなぁ。
これをベースにあとは
GitLabにマージされたらPull して、ビルドして、デプロイってYAMLファイルに書けばいいのかな?