.NET CoreアプリをGitHub ActionsでAzureにデプロイした
個人サービスをkuduデプロイからGitHub Actionsへ、.NET Core2.2から3.1に上げた。
NET Coreバージョンアップは別の記事で書く。
kuduとは
Azure Webサイトで利用されているGitデプロイエンジン。要はオープンソースのCIなのだが、非常に使い勝手が悪い、というか結局シェルスクリプトゴリゴリなのであまり恩恵がない上、github上で連携出来ないのでAzure portalを見に行かなければならず非常に不便だった。さらに.NET Coreを使う上で大きな問題がある
.NET Coreを使う上でのkuduの問題点
kuduはホスティング上でビルドするのでホスティング環境が整ってないとビルドが出来ないことがある。AppServiceではnodeは8(記憶上だと)と古く、.NET Coreで言えばビルドするために必要なdotnet cliが使えない(厳密には使えるが最新のバージョンをサポートしてない)。dotnet cliはSDKに含まれてるのでAzureのサービス上でビルド出来ないのだ。AppServiceなど3.1のruntimeはあるのにビルド出来ずにバージョンが上げれず、いつSDKがリリースされるのか告知も無い。そのようなことがあり継続的なバージョンアップが出来ないと判断し、GitHub Actionsに移行した。あと、MSがgithubを買収したところからkudu廃止してGitHub Actionsに移行する方向で進んでそう。
GitHub Actionsを選んだ理由
無料枠多すぎ、Microsoftひいきしすぎ(ドキュメント豊富)、期待感すごい。
ワークフローを作る
[new workflow]から.NET Coreを選択。
[set up this workflow]をクリックするとテンプレートが表示される。2020/4時点はこれ↓
name: .NET Core on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1.101 - name: Install dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Test run: dotnet test --no-restore --verbosity normal
以下、テンプレから変えたところ。
checkout
git submodulesを使ってるリポジトリだったのでcheckout@v1
を選択。submodulesをv2で実現するのはちょっと面倒なので。
+ - uses: actions/checkout@v1 + with: + submodules: true - - uses: actions/checkout@v2
submodulesでsshだと取得出来ないのでhttpsに変更した。
.gitmodules
[submodule "library/DapperSlackOff"] path = library/DapperSlackOff + url = https://github.com/ikuosaito1989/DapperSlackOff.git - url = git@github.com:ikuosaito1989/DapperSlackOff.git
setup-dotnet
- name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1.100 - name: Install dependencies run: dotnet restore - name: Build run: dotnet publish "{path}" --configuration Release -o hoge
テストは作ってないので削除。
コードフォーマッター
.NET Coreではdotnet format
というフォーマッタがある。prittierとか使ってるとちょっとしょぼいように感じるが、無いよりましなので追加する。
github.com
導入は下記参照。
.NET ローカル ツールの使い方 - Qiita
※マニフェストファイルがないとdotnet toolコマンドが有効にならないので注意
- name: Restore Tool run: dotnet tool restore - name: Check code format run: dotnet format --check --dry-run
--check
はフォーマットせずチェックする仕組みで--dry-run
は失敗したときに0以外の終了コードを返すオプション。
webapps-deploy
Azureにデプロイするためのworkflows。
デプロイするための認証情報を取得する必要があるので[発行プロファイルの取得]を押下。githubのSecretにてダウンロードしたファイルを以下で貼り付け。packageはdotnet publish
で出力したディレクトリを指定する。
- uses: azure/webapps-deploy@v1 with: publish-profile: ${{ secrets.publish_profile }} package: './hoge'
masterにpushされたら自動デプロイする
push: branches: [ master ]