ASP.NET note

GitLab Runner で .Net のビルドとデプロイができるか検証する

社内で CentOS の GitLab にソースがマージされたら、Windows Serverで自動にビルドが走ってデプロイまでやりたいというご要望がありまして、途中まで検証できたのでメモ。

今回は、yamlファイルがコミットされたら、MS Buildが走るってところまでやってみました。2日ほど悩んだ。。( シンギュラリティ・ソサエティ のエンジニアさんにアドバイスもらった。ありがとうございます)

参考サイト

Windows Sever にツールをインストール

OS
  • Windows Server 2016
Tools
  1. Microsoft Build Tools 2015 と Git をインストールする
  2. 「C:\GitLab-Runner」フォルダを作り、gitlab-ci-multi-runner-windows を配置する
  3. 環境変数の 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ファイルに書けばいいのかな?

 

-ASP.NET, note