Azureデプロイなど .Net Core プロジェクトをコマンドラインから操作

# はじめに
JenksinでAuzreのデプロイ周りを自動化する際に使用した、
.Net系のコマンド集です。


# 環境
コマンドを叩くために必要なcliツール
VisualStudioが入っていれば、すでに入っているはず。
なければ、別途インストールして、PATHを通します。

dotnet 5.0.102
msbuild 16.8.3.61104

azure-cliをインストールしてください。

```
az --version
```
コマンドが認識されなければインストール
https://docs.microsoft.com/en-us/cli/azure/install-azure-cli


各コマンドが入ったか確認

```
dotnet --version
5.0.102
msbuild -version
16.8.3.61104
az --version
2.24.0
```

# Azure Web Appsにデプロイ

```bat
dotnet publish "MyProject.csproj" /p:Configuration=Release /p:PublishProfileFullPath="C:\MyProject - Web Deploy.pubxml" /p:Username="ユーザー名" /p:Password="パスワード"
```

1. 第一引数は発行したいプロジェクトのcsprojファイルのPath
1. Configurationは構成

1. PublishProfileFullPathはVisualtStudioからプロジェクトの「発行」をする際にできるファイル。まずはVisualStudioで目的のAzureWebAppsに向いているファイルを作っておきます。
プロジェクトフォルダ/Properties/PublishProfiles下にあります。

1. ユーザー名とパスワードはAzureポータルから取得
発行プロファイルの中に以下のプロパティがあります
「userName」「userPWD」
![無題クリップ_063021_071302_PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139166/0cac94dc-073e-7840-9325-480151335f47.jpeg)

# Azure Functionsにデプロイ

```bat 
msbuild "MyProject.csproj" /p:DeployOnBuild=True /p:PublishProfileFullPath="C:\MyProject - Zip 配置.pubxml" /p:Username="ユーザー名" /p:Password="パスワード"
```

引数の意味はWeb Appsと一緒
dotnet publishだとうまく行かなかったのでmsbuildを使っている

# EF Coreのマイグレーション

```bat
dotnet new tool-manifest
dotnet tool install dotnet-ef --version 3.1.11

dotnet ef database update --context MyContext --project MyProject --startup-project MyProject --configuration Release
```

# MSIXの発行
３ステップ必要です。

nugetの復元

```bat 
msbuild -property:RuntimeIdentifiers=\"win-x86\" /t:restore /p:platform=\"x86\" /p:configuration="Release" ${workspace}\\MyProject.sln
```
バージョンの書き換え

```Groovy
 powershell """
                   \$xmlFileName = \"${env:workspace}\\MyProject.Package\\Package.appxmanifest\"
                   [xml]\$xmlDoc = Get-Content \$xmlFileName
                   \$xmlDoc.Package.Identity.Version = 1.0.0.0
                   \$xmlDoc.Save(\$xmlFileName)
                """
```
パッケージ化

```bat
msbuild -property:RuntimeIdentifiers=\"win-x86\" MyProject.Package\\MyProject.Package.wapproj /nologo /nr:false  /p:platform=\"x86\" /p:configuration=\"Release\" /p:PackageCertificateKeyFile=${workspace}\\MyProject.Package\\証明書.pfx /p:PackageCertificatePassword=\"証明書パスワード\" /t:clean;restore;rebuild
```

# Azrue Blob Storageにファイルのアップロード

```bat
az storage blob upload --account-name Blobのアカウント名 --account-key BlobのKey --container-name コンテナ名 --file ファイル名 --name アップロード後のファイル名
```

# Web Appsのアプリケーション設定の上書き

ログイン

```bat
 az login --username ユーザー名 --password パスワード
```

```bat
az webapp config appsettings set --resource-group リソースグループ名 --name リソース名 --slot スロット名 --settings 上書き対象のKey=新しい値 --subscription サブスクリプションID         
```
--slotと--subscriptionは省略可能

# デプロイスロットのスワップ

```bat
az functionapp deployment slot swap --name リソース名 --resource-group リソースグループ名 --slot スロット名
```

# Azure Web Apps FTPデプロイ

windowsにコマンドがなかったのでcygwin64を使ってzipとcurlをいれました

デプロイ対象フォルダをzip圧縮

```bat
C:\cygwin64\bin\zip.exe -r wwwroot.zip .
```

```bat
curl -X POST -u ユーザー名:パスワード --data-binary @"wwwroot.zip" エンドポイント/api/zipdeploy
```

ユーザー名、パスワード、デプロイエンドポイントは画像の位置からダウンロード

![無題クリップ_063021_075843_PM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139166/cb17a095-67db-4ed8-3822-819eb287486c.jpeg)

ダウンロードしたprofile.publishsettingsの中を確認

ユーザー名 = userName
パスワード = userPWD
エンドポイント＝publishUrl (例：mywebapp.scm.azurewebsites.net)