Azure Pipelines を無料枠で使おうとして躓いた話

# はじめに

皆さん、はじめまして。
Qiitaデビューしましたので、よろしくお願いします。

最近、仕事でAzureを触る機会がありました。
躓いたらネットで検索するのですが、日本語の記事がほぼヒットせず、なかなかつらかったです。
(MS公式ドキュメントを読みながら試行錯誤するか、英語を読むか・・・)

個別具体的なトラブルとその解決策に関する記事はほぼ見つからない。
ないならば作ろうということで、自分が躓いた内容を記事にします。

同じ問題に当たったどなたかのお役にたてば幸い。

# この記事で言いたいこと

前書きはこれくらいにして、本題に入ります。

この記事で言いたいことは次の通りです。

- Azure Pipelinesの無料枠を使うためには、MSへの手続きが必要（になった）！

ここ数年アジャイル開発とやらが注目を集めているそうで、
その関連（だと思う）で「GitLab CI」や「GitHub Actions」をはじめとする
`継続的インテグレーション(CI)`および`継続的デリバリー(CD)`関係のプロダクト/機能やノウハウが充実してきているように感じています。

今回取り上げる`Azure Pipelines`はこのCI/CDを支援するツールの1つです。
このAzure Pipelines、無償利用枠があります。
が、とある時期（具体的には2021/3/23）以降に新規作成されたものについては
無償利用枠を使用するためにはMSに申請が必要なように変更されていました。
（ここで躓いた）

今回はAzure Pipelinesの無料枠の使い方について記事にします。

Azure Pipelinesに関する詳細はこのあたりのドキュメントを参照していただければ。

- [Azure Pipelines](https://azure.microsoft.com/ja-jp/services/devops/pipelines/)
- [Azure Pipelines とは](https://docs.microsoft.com/ja-jp/azure/devops/pipelines/get-started/what-is-azure-pipelines?view=azure-devops)

## 構築の流れ

ここから実際の構築の流れを躓いた部分とその対処も含めて順番に記載します。

### Azure DevOpsの組織を作成する

Azure Pipelinesを使用するためには、前提として`Azure DevOps`の組織（GitLabでのグループに相当する）が必要です。
そのため、まずAzure DevOpsの組織を作成します。

サービス一覧から`Azure DevOps organizations`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/0ee398cc-f0cf-2cde-9c91-13956fa9d066.jpeg">

Azure DevOpsの画面に遷移しますので、`My Azure DevOps Organizations`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/91daab73-9967-e910-b69f-fb68f29f393a.jpeg">

名前と連絡先（メールアドレス）の入力を求められますので、入力します。
（こちらは作成する組織の管理者アカウントの情報となります。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/9950b58d-e16e-a79e-eb79-f020df08e1c1.jpeg" width="420">

`新しい組織の作成`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/e91e9788-0c95-0a4f-6531-6a60ce9aa6ad.jpeg" width="420">

`作成する組織の名称`と`ロケーション`を設定します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/386d75ec-1960-dbfb-ed07-4864215456d2.jpeg" width="420">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/d5ae0581-27eb-6b1e-459b-bee975e3d316.jpeg" width="420">

これでAzure DevOpsの組織作成は完了です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/9dd750f5-5734-377d-bdbf-973c5713b905.jpeg">

### Azure DevOpsのプロジェクトを作成する

次にパイプラインを使用するリポジトリとして
Azure DevOpsのプロジェクト（GitLabのプロジェクトに相当する）を作成します。

なおリポジトリはAzure Repos以外にも、GitHub、Subversionなども使用可能なようです。
（パイプライン作成時の選択肢に出てきました。）

`プロジェクト名`と`公開範囲`(Public:インターネット上に公開、Private:プロジェクト関係者のみ）を設定し、`Create Project`を押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/ebb4068f-8415-cd4b-86b8-00ca1c8fc3b4.jpeg" width="420">

これでプロジェクトが完成しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/3e2e8ef1-3987-8d95-280e-a81d2020c8ab.jpeg">

### パイプラインを作成する

Azure Pipelinesを作成します。
左ペインから`Pipelines`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/691dbee9-0eea-6cd4-bdb6-b38158551e39.jpeg" width="220">

`Create Pipeline`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/da932085-6401-9ea6-e6b6-48b8d99b6de9.jpeg" width="420">

パイプラインで使用するレポジトリを選択します。
（ここではAzure Reposを使用します。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/04cbcb4e-9b54-e735-308e-ad42d9acd812.jpeg">

指定可能なリポジトリの一覧が表示されるので、先ほど作成したレポジトリ`free-pipelines`を選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/1dc53d5c-d3d8-1f77-1729-1b2862ce3bdc.jpeg">

パイプラインの具体的な動作を設定します。
今回は用意がないので、YAMLファイルを新規作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/79a0c2f8-8021-c208-7e8f-8a4599221e64.jpeg">

ブラウザ上にエディターと初期テンプレートが表示されるので、
YAMLファイルを記載します。
ここではテンプレートそのままで進めるので、画面右上の`Save and run`を押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/4ce7268f-d3be-71bd-e026-645934aa92bc.jpeg">

作成したYAMLファイルのpush方法（コミットメッセージとどのブランチにpushするか）を聞かれるので入力し、画面右下の`Save and run`を押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/095797d9-4b74-e1bb-bfcd-03af1702641c.jpeg" width="420">

YAMLファイルがpushされ、テストランのジョブが登録されました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/4cd448f2-270c-6c32-9ca9-2efc1fef598d.jpeg">

### エラーで躓く

エラーで失敗しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/19efc253-67ce-e579-ff9f-25f0b0dc4283.jpeg">

「[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」

エラーの原因は冒頭に記載した通り、
無償利用枠を使用するにはMSに申請が必要であり、その申請を実施していないためです。
ちなみにこの変更が入ったのは2021/3/23とのことでした。

この変更の理由は[無料付与のAzure Pipelines変更](https://docs.microsoft.com/ja-jp/azure/devops/release-notes/2021/sprint-184-update#azure-pipelines-1)に記載されています。

端的にいうと「暗号化マイニングなどの不正利用が絶えないなので、許可制にしました」ということだそうです。

### MSに無料枠を申請する

ということで指定されたURLにアクセスして、無償利用枠の付与を依頼します。

`申請者の氏名`と`連絡先メールアドレス`、無償利用枠付与を依頼する`Azure DevOps組織のURL`を入力します。
今回だと作成した組織の名称は`free-pipelines`になるので、
URLは`https://dev.azure.com/free-pipelines`になります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/756d52e4-1f29-4e9b-533f-75400e9d63f0.jpeg" width="420">

プロジェクトの種別を選択します。
作成したAzure Reposはプライベートプロジェクトなので`private`を選択し、
最後に送信ボタンを押下します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/4b441cda-5fbe-2773-f0b0-5af1b08e59ee.jpeg" width="420">

申請が送信されました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/2bad1707-7f19-836f-71f3-0d7ba5fa7ffa.jpeg" width="420">

2、3営業日後にこのような承認メールが届きます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/bf52cab6-fced-7834-b9ca-cc6fafd7cbf5.jpeg" width="320">

#### （おまけ）プロジェクト種別がPublicの場合

なお、プロジェクト種別で`Public`を指定した場合、
追加質問が表示されます。
Publicの場合は、さらに付与する`リポジトリの一覧`と`プロジェクトの概要`を回答する必要があるようです。不正利用対策ですかね。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/d8859da1-3a9a-2ef4-ae82-51956019dc63.jpeg" width="420">

### テストランを再実行

失敗していたテストランを再実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/b98f7ddc-e1db-9a42-6fa3-b5dcade18b8f.jpeg" width="420">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/181b5b26-b535-abdb-2add-c262f01f186a.jpeg" width="420">

成功！
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2396115/fc21b8ef-ad50-a9ec-e75f-61a0c53faaa2.jpeg">

## まとめ

ということでまとめです。
ご参考になれば。

- 2021/3/23以降に作成した組織でAzure Pipelinesの無料枠を利用するには`MSに申請`が必要です
  - 未実施の場合、次のようなエラーでパイプラインの実行が失敗します。
    - 「[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」
- 申請は`MS Forms`にて実施します。
- MSの承認が下りると、メールで連絡がきます。