gitlab-runnerを使って.NET Frameworkのプロジェクトをビルドする
はじめに
こんにちは、だいきちです。
今回はgitlab-runnerを使って.NET Framework製のプロジェクトをビルドしてみたいと思います。
MSBuildを使用するため、runnerの登録はWindows側にしています。
悪戦苦闘したので、備忘録として。
環境
runnner側: Windows10 pro
GitLab側: Ubuntu 18.04 LTS
手順
今回はこの記事を参考にさせていただきました。
qiita.com
1. 証明書の作成
openssl.cnf
を編集し、subjectAltname
にUbuntu側IPアドレスを追記
※注: 記事中はopenssl.cnf
の階層が/etc/pki/tls/
となっていますが
今回はUbuntuなので/usr/lib/ssl/
となります。
次に、記事コマンドを参考に、ubuntu上にserver.key
と server.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側にサーバ証明書をインストールしてやります。
※参考記事の証明書のインストール
参照。
これまたこの記事を参考にさせていただきました。
- WinSCP等でUbuntu側から
server.crt
ファイルを持ってくる - PowerShellを管理者権限で開いて、
server.crt
があるディレクトリに移動。
その後、certutil -addstore -f -user "ROOT" server.crt
を実行。 gitlab-runner.exe
があるディレクトリに移動
その後、gitlab-runner.exe register
コマンドを使用
対話形式で情報を聞かれるので順に
○先程確認したURL
○先程確認したToken
○GitLabRunnerの説明
○タグ(任意)
○タグがつけられていないジョブを実行するかどうか
○GitLab Runnerを現在GitLabにあるプロジェクトのみで使用するかどうか
○GitLab Runnerのタイプ→私はpowershellを選択- 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開発ビルドツール」をチェックして変更。
まとめ
備忘録なので走り書きのような形になってしまいましたが、このような感じです。
抜け等ありましたらまた加筆・修正します。
現場からは以上です。