わしのlog

プログラミングとかバイクとか。

gitlab-runnerを使って.NET Frameworkのプロジェクトをビルドする

はじめに

こんにちは、だいきちです。
今回はgitlab-runnerを使って.NET Framework製のプロジェクトをビルドしてみたいと思います。
MSBuildを使用するため、runnerの登録はWindows側にしています。
悪戦苦闘したので、備忘録として。

環境

runnner側: Windows10 pro
GitLab側: Ubuntu 18.04 LTS

手順

今回はこの記事を参考にさせていただきました。
qiita.com

1. 証明書の作成

openssl.cnfを編集し、subjectAltnameUbuntuIPアドレスを追記
※注: 記事中はopenssl.cnfの階層が/etc/pki/tls/となっていますが
今回はUbuntuなので/usr/lib/ssl/となります。
次に、記事コマンドを参考に、ubuntu上にserver.keyserver.crtを生成。

2. gitlab.rbの編集

秘密鍵と証明書のパスを追記しておきましょう。

nginx['ssl_certificate'] = "秘密鍵のパス"
nginx['ssl_certificate_key'] = "証明書のパス"

その後は、下記コマンドでGitLabをrestart

$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart

3. Tokenの確認

CIを行う対象GitLabプロジェクトのページに移動し
Settings > CI/CD > Runners を開いて、Set up a specific Runner manuallyに書いてある
URLとTokenをコピーしておきます。

4. GitLab-Runnerのインストール

公式の手順を参考にインストールしましょう。
○ダウンロードURLからexeファイルをダウンロード
○リネームして任意の場所に配置
とりあえずここまでが終わったら、一旦Windows側にサーバ証明書をインストールしてやります。
参考記事証明書のインストール参照。
これまたこの記事を参考にさせていただきました。

qiita.com

  1. WinSCP等でUbuntu側からserver.crtファイルを持ってくる
  2. PowerShellを管理者権限で開いて、server.crtがあるディレクトリに移動。
    その後、certutil -addstore -f -user "ROOT" server.crt を実行。
  3. gitlab-runner.exeがあるディレクトリに移動
    その後、gitlab-runner.exe registerコマンドを使用
    対話形式で情報を聞かれるので順に
    ○先程確認したURL
    ○先程確認したToken
    ○GitLabRunnerの説明
    ○タグ(任意)
    ○タグがつけられていないジョブを実行するかどうか
    ○GitLab Runnerを現在GitLabにあるプロジェクトのみで使用するかどうか
    ○GitLab Runnerのタイプ→私はpowershellを選択
  4. runnerのユーザ登録を行う
    gitlab-runner.exe install --password [ログイン中のWindowsユーザのパスワード]

5. GitLab-Runnerの起動

いよいよ起動です。
ここでgitlab-runner.exe startと実行すると・・・
私の場合、起動しませんでした
他の方の記事を見ているとこのコマンドで起動できているみたいなのですが
どうやら私はgitlab-runner.exe runでないとうまく起動しないようです。
だれか知見のある方いらっしゃいましたら教えていただきたい・・・。

gitlab-ci.ymlの作成

一応、私はこんな感じで作りました。
IISを使ったことのある方は見覚えのあるディレクトリがあるかと思います。

variables:
  UNITTEST_FOLDER: './tests/bin/Release/'

stages:
  - build

# build用のjob
build_job:
  stage: build
  only:
    - branches
  script:
    - chcp 65001
    - 'nuget restore ./hogeProject'
    - 'msbuild ./hogeProject/hoge.sln /nr:false /p:Configuration=Release /clp:ErrorsOnly'
  artifacts:
    expire_in: 2 days
    paths:
      - '"%UNITTEST_FOLDER%"'

ちょっと勉強不足感もあり、artifacts配下のpathsはほぼ意味を為していません(ぇ
書いてあることはほぼほぼそのままなんですが、deploy時のscriptはごっちゃごちゃなのであえて載せていません。

後は該当プロジェクトにpush時、CIが動いているか確認してあげましょう。

その他

gitlab-ci.ymlでの注意点

○gitlab-ci.ymlでWindows環境での環境変数の指定の仕方が違う
powerShellを使っているので当たり前なのですが、環境変数に用いる記号が違います。
linux: $hoge
windos-cmd: %hoge%
windows-powershell: "env:hoge"
といった感じ。

MSBuild時のエラー対応

GetReferenceNearestTargetFrameworkTaskエラーが出る場合

こちら参照

developercommunity.visualstudio.com

要するにMSのBuildToolsを開いて
「Nuget targets and build tasks(ナゲットターゲットとビルドタスク)」にチェック入れて変更を押すだけ。

error MSB4226: "C:\Program Files (x86)...Microsoft.WebApplication.targets" が見つかりませんでした。

また先程のインストーラを開いて「Web開発ビルドツール」をチェックして変更。

まとめ

備忘録なので走り書きのような形になってしまいましたが、このような感じです。
抜け等ありましたらまた加筆・修正します。

現場からは以上です。