AzurePipelinesでMavenプロジェクトのCI

以下の記事の続きで、今回はAzurePipelinesを使ってみます。
https://qiita.com/kasa_le/items/b152f91a61315a2b12b2

# Azure Pipelines
言わずとしれた、MicrosoftのクラウドサービスAzureの中の、Azure DevOpsに含まれるCIになります。
https://azure.microsoft.com/ja-jp/services/devops/

## 特徴
Azure Repos(AzureのGitリポジトリサービス)だけでなく、Githubや汎用Gitとも接続できます(※)。
当然、.NETやC#のプロジェクトのビルド環境が充実していて、Windows開発者は、実質AppVeyorかこちらかの二者択一でしょうね。もっとも、少し前まではAppVeyorしかなかったので、選択肢ができたことは良いことではないでしょうか。
Visual StudioやVisual Studio Codeとの連携やExtensionが充実しているのも流石です。

※ただし、SSH公開鍵方式での接続には非対応で、かつ、汎用Gitの場合は、Classic Editorというものでしか設定が出来ません。

## 料金
Azure Pipelinesのみの場合、５ユーザーまで、月1,800分まで１並列ジョブが無料で使えます。セルフホステッドの場合は、毎月の利用制限はありません（１並列ジョブ）。
成果物をアップロードするのはAzure Artifactsというのを使い、こちらは2GBまでは無料で使えます。

詳しくはこちらで。
https://azure.microsoft.com/ja-jp/pricing/details/devops/azure-devops-services/

## 実績
まあ、なんといっても、Microsoftですから(汗)

どうてもいいですけどEラーニングコースが、物語形式でとても読むのに疲れます(苦笑)
英語しか用意されてないのですが、かといってあれが日本語になっていても変なので、あえて訳を用意していないのかも^^;

## 設定

Classic Editorという物を使う方法と、`yml`ファイルを書く方法と２種類あります。
基本的なMavenビルド、テストなら、テンプレートで**Maven**を選んだそのままでいけます。
以下は、YAMLモードでのテンプレート初期設定のままです。JerseySampleはこの設定のままで行けました。

```azure-pipelines.yml
# Maven
# Build your Java project and run tests with Apache Maven.
# Add steps that analyze code, save build artifacts, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/java

trigger:
- master

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: Maven@3
  inputs:
    mavenPomFile: 'pom.xml'
    mavenOptions: '-Xmx3072m'
    javaHomeOption: 'JDKVersion'
    jdkVersionOption: '1.11'
    jdkArchitectureOption: 'x64'
    publishJUnitResults: true
    testResultsFiles: '**/surefire-reports/TEST-*.xml'
    goals: 'package'
```

テスト結果はパイプラインのページで確認できます。

|<img width="509" alt="azule-pipelines-test-summary.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/0f2b1a8e-af70-0e64-d7bb-d3c33a799e7c.png">|
|:--|

`jdkVersionOption`の指定で、Version11が、`1.11`と指定しなければならないのが気持ち悪いですね(汗)

Github同様、OpenJDKはAzul Zuluが使われます。(Azul Zuluは基本的に有償ですが、Azure Pipelinesでの使用は無償となっています。あれ？Github Actionsは？？)
https://github.com/actions/virtual-environments/blob/master/images/linux/Ubuntu1804-README.md

諸事情により、AdoptOpenJDKでもビルドできる必要があるので入れられるか調べたのですが、便利なExtensionを公開してくださっている方がいました。
https://marketplace.visualstudio.com/items?itemName=hanabi1224.adopt-openjdk-installer

|<img width="538" alt="atopdopenjdk_marketplase.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/61ca8e86-2fce-54fa-3727-8caafbc8a011.png">|
|:--|
 
こちらは、**Classic Editor**から使えます。
Classic Editorは、Pipelineを作るときに、YAMLではなくて[Classic Editor]という小さなリンクが最初のページに有るので、それをクリックすると使えます。

|<img width="427" alt="azule-pipelines-classic-editor.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/b1acc0d3-d136-d7c2-d7a5-e29b16cbd8d7.png">|
|:--|


また、Classic Editorで作ったうえで、その`yml`を参考にすることも出来ます。

|<img width="595" alt="azule-pipelines-view-yaml.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/d8a9e8bd-cea5-de6e-8130-b846e283e3db.png">|
|:--|

ただ、Classic Editorは非推奨になっているので、いつメニューから消えてもおかしくはありません。


# 感想
操作は割としやすいですが、メニュー構成はちょっと慣れが必要です。

英語の[ラーニングパス](https://docs.microsoft.com/ja-jp/learn/paths/build-applications-with-azure-devops/)や下記の記事のチュートリアルを多少でもやっておかないと、どこに何があるか分かりづらいかもしれません。
https://docs.microsoft.com/ja-jp/azure/devops/pipelines/create-first-pipeline?view=azure-devops&tabs=java%2Cyaml%2Cbrowser%2Ctfs-2018-2

個人的には、一番テスト結果が見やすいかなあと感じました。また、手動で実行するのもわかりやすくボタンがあるので良いですね。

Slackとの統合も簡単そうなのも良いです。
個人や小規模チームは無料枠でいけますし、サブスクリプションをすでに持っているような場合も使いやすいんじゃないでしょうか。

ちなみに、最初の設定からビルド、テスト実行され、テスト結果を見られる状態にするまでは、他のCIサービスと比べて、Azure Pipelinesが一番早かったです。

**追記**
CI回したら、GithubにPRが作成されてCheckページにも表示が追加されていました。

|<img width="829" alt="azure_pipelines_github_pr.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103886/1d9a847c-02d9-0f72-85dc-3fd1e3062d0f.png">|
|:--|

これは便利なようですが、毎回PR作成も嫌なので、ちょっと調査が必要ですね・・・