Azure DevOps の Azure Pipelines で Sphinx ドキュメント を生成して Azure App Service で公開する

# 目次
1. Azure Repos にSphinx ドキュメント を用意する
1. Azure App Service を作成する
1. Azure DevOps と Azure Subscription を接続する
1. Azure Pipelines で html を生成して、Azure App Serviceへデプロイする
1. トラブルシューティング

# 手順
## 1. Azure Repos にSphinx ドキュメント を用意する
1. Azure Repos に SphinxをインストールしているPythonモジュール を格納する。
    a. ここでは例として[Django](https://qiita.com/tamura__246/items/672bd98a8f30b76789b6)をimportして使用する。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/07e58052-1508-e3e2-e54a-31c813e011ad.png)
## 2. Azure App Service を作成する
1. App Service で検索してクリック![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/b1cbe9bc-7431-b897-126e-7c7210943898.png)
1. 作成 -> Web アプリ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/1495a199-ed90-41c7-bad8-06b36fa1094a.png)
1. 各項目を入力する。命名はMicrosoftの[ベストプラクティス](https://learn.microsoft.com/ja-jp/azure/cloud-adoption-framework/ready/azure-best-practices/resource-naming)に従う。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/90b13b00-57a8-35df-61f3-6cad3b657114.png)
    **今回使用した省略形↓↓**
    |リソース|省略形|
    |:----|:----|
    |Resource group|rg|
    |App Service プラン|asp|
    |Web アプリ|app|
    |東日本|jpe|

    ※GeoCodeは[ここ](https://learn.microsoft.com/ja-jp/azure/backup/scripts/geo-code-list)に記載
1. ドキュメントの閲覧ができなくても影響は少ないため、Application Insights は無効にする![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/1fe6eb87-8587-4ea4-7caf-3ce41a48cae7.png)
1. 設定を確認して作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/c4a390e1-46e5-4a57-5e9b-60bdac28f8bd.png)
## 3. Azure DevOps と Azure Subscriptionを接続する
1. Project settings -> Service connections -> Create service connection -> Azure Resource Manager![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/b91d44be-2dfe-61ab-11a7-f68c78485039.png)
1. Workload Identity federation (automatic) ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/37eb4f31-7882-1855-f702-103638bfd22d.png)
1. ポップアップ画面が表示されるので、Azure Subscriptionに紐づくアカウントで認証する。[※表示されないとき](#表示されないとき)
1. Resource groupは空欄のままにし、Service connection name を入力し、Grant access permission to all pipelines にチェックを入れSaveする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/9e4710c6-70c8-9096-608f-81e5a1cc78ed.png)
## 4. Azure Pipelines で html を生成して、Azure App Serviceへデプロイする
1. Pipelines -> Create Pipeline -> Azure Repos Git -> _study_ -> Starter pipline -> Show assistant -> Azure App Service deploy ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/f5367431-82c8-f9fd-faf7-854759dbe0d3.png)
1. 前の手順で作成したApp Serviceを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/6247237c-a469-2b91-5754-37bd63008407.png)
1. ymlを書き換えて、Save and Run [※エラーが出たとき](#エラーが出たとき)
```yml
trigger:
- main

pool:
  vmImage: windows-latest

steps:
- script: |
    pip install Sphinx
    cd django/docs/
    make html
  displayName: 'Make html'
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: 'django/docs/'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(System.DefaultWorkingDirectory)/$(Build.BuildId).zip'
    replaceExistingArchive: true
- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: 'Azure subscription 1 connection'
    appType: 'webApp'
    WebAppName: 'app-study-prod-jep-001'
    packageForLinux: '$(System.DefaultWorkingDirectory)/*.zip'
```

## 5.トラブルシューティング
### 表示されないとき
ポップアップ表示されなけばWebブラウザのアドレスバーにあるポップアップブロック表示をクリックし、ブロックを解除して表示させる。何らかのResource group名が表示されれば認証済みである。（このとき未認証状態だと空欄のままとなる）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2956167/cd9b2edc-a021-2ffc-1a73-2fe175349883.png)
### エラーが出たとき
下記のエラーが出たら、メッセージに記載のURLから無料利用をリクエストする。([マイニング利用防止のために制限がかかっている。](https://learn.microsoft.com/ja-jp/azure/devops/release-notes/2021/sprint-184-update#changes-to-azure-pipelines-free-grants))
```
##[error]No hosted parallelism has been purchased or granted. To request a free parallelism grant, please fill out the following form https://aka.ms/azpipelines-parallelism-request
```