Azure Devops (Pipelines) を無償、無料で使う

# はじめに

記載情報は CI/CD に関連します。  
実務上関わった環境・機能を身近な情報としてお届けしたく、投稿をはじめました。  
各学習上、お金のかからない方法を選択していきます。

以下の手順を実施することで、パイプラインを作成・実行できるようにします。

## 対象者と関連環境・機能

この記事は下記のような人を対象にしています。

- CI/CD 初学者
- プログラミング初学者
- 駆け出しエンジニア

記載している環境・機能は以下です。

- Azure Devops
- Azure Pipelines

## 準備

今回は github 上のパイプラインを Azure Pipelines から実行します。  
下記が準備となりますが、振り返りが不要な場合にはお読み飛ばしください。

- [Azure Devops (Artifacts) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/9c21859d8b5b6a63246e)
- [Spring Tool Suite 4 インストール、Spring Initializr 、gradlew の利用](https://qiita.com/wf-kenji-ikeda/items/d00766da8a4076ec43ed)
- [Spring Boot Web アプリケーションを作る](https://qiita.com/wf-kenji-ikeda/items/1e64e44094ce8a1d997f)
- [Jar の Library を作り、Azure Artifacts を利用して成果物を配布する](https://qiita.com/wf-kenji-ikeda/items/696bda335a8933abfcb3)
- [ライブラリ開発者より指定されたバージョンを利用してアプリを作る](https://qiita.com/wf-kenji-ikeda/items/5bf06ce19c52e73a5463)
- [アプリを Docker 、Docker Compose でコンテナを動かしてみる](https://qiita.com/wf-kenji-ikeda/items/e6604ea6ae257f3925a7)

### ソース

本作業で利用するパイプラインとなります。  
[azure-Pipelines](https://github.com/oad3/application-springboot/blob/main/pipelines/10_test/10_test_pipeline.yml)

```Azure Pipelines
trigger:　※パイプラインを起動するトリガーの設定。本サンプルでは手動での実行のみを想定。
- none

pool:
  vmImage: 'ubuntu-latest'　※MS提供のVMでパイプライン実行を行う。

resources:
  repositories:
  - repository: 'application-springboot'　※githubからとってくる対象リポジトリ
    type: github　※githubからとってくる
    ref: main　※githubからとってくるブランチ
    endpoint: '20220501'　※作成したサービスコネクション名
    name: 'oad3/application-springboot'　　※githubからとってくる対象リポジトリ

stages:
- stage: stage_test
  jobs:
  - job: MyJob
    displayName: MyJob_1
    workspace:
      clean: outputs
    steps:
    - script: ls -la　※初期状態を出力
    - checkout: self　※パイプライン配置している己「oad3/azure-Pipelines」を取得
    - checkout: 'application-springboot'　※githubからとってくる対象リポジトリ（ビルド対象想定）
    - script: ls -la　※取得後状態を出力
```

### github 上のパイプラインを実行出来るようにサービスコネクション(Service connections)を作成する

- github への接続認証のため、事前に[個人アクセストークン](https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)を取得します。
- github の個人アクセストークン取得後、サービスコネクションを作成作成します。
![ServiceConnections_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/c763151b-97be-65cb-f0b0-4b425780249f.png)
![ServiceConnections_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/415ab109-1e47-af1c-ac13-247f0c3d709c.png)
[個人アクセストークン](https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)を設定  
![ServiceConnections_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/261b5510-b570-7a92-c3d8-dfea195f026d.png)


### 作成したサービスコネクション(Service connections)を利用して、パイプライン実行準備をする

★★★ 要注意 ★★★  
以下は一日では終わらない可能性がありますが、少々腰を据えて準備ください。  
パイプラインを実行する VM を MS 提供のものを使う想定となり、MS への申請が必要でした。（2, 3 営業日で利用許可通知が送られてきたような気はします。）  
申請なしに MS Hosted の VM でパイプライン実行を行おうとしても、異常終了となりますためご認識ください。  
自前のサーバでも可能ではありますものの「どちらのほうがハードルが低いか」ですと、ほんの少し自前のサーバへのエージェント設定のほうが面倒な印象があります。。  
性能や可用性観点だと MS Hosted のみの運用はありえないとも思いますが、この場では活用させて頂きます。

[Azure Pipelines を無料枠で使おうとして躓いた話](https://qiita.com/Hachiyou-Renge/items/2083f2ce9e8b38558805)  
[Azure Pipelines エージェント](https://docs.microsoft.com/ja-jp/azure/devops/Pipelines/agents/agents?view=azure-devops&tabs=browser)

PileLines へ  
![CreatePipeline_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/1823c023-8c28-2bc0-1867-2e2ee6a612bb.png)

GitHub 上のソースを読み込んでパイプライン実行をするためこちらを選択  
![CreatePipeline_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/db5a5cc1-9562-e862-ee00-7bc7d9bce66f.png)

読み込み対象リポジトリを選択  
![CreatePipeline_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/2519a745-52c5-eb2f-bc31-2d641189be1b.png)

リポジトリアクセスの範囲は任意にて次へ  
![CreatePipeline_004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/fdcbad34-2fa3-9cd2-6771-bde84c988333.png)

アカウントはこのままとして次へ  
![CreatePipeline_005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/9751af29-09b9-f237-a8e5-9ab67eb47364.png)

準備済の既存パイプラインを利用するので以下選択  
![CreatePipeline_006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/a85d3f13-5b39-f714-507a-8cab95c089fa.png)

main ブランチの指定パイプラインを紐付ける  
![CreatePipeline_007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/d2e7873a-c5fd-5b79-1029-14cb872694be.png)

保存  
![CreatePipeline_008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/ec6a60d1-6de6-c731-2896-1e46d6bff2b9.png)

後で見分けにくい名前になっているので、命名  
![CreatePipeline_009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/31703e78-cf24-d2e8-5843-ba92cce20c32.png)

いよいよ起動へ  
![CreatePipeline_010.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/0a5f3f20-a5ae-af99-b7ed-dc14ff90acc5.png)

動かす対象ブランチを指定可能。Run 実行。  
![CreatePipeline_011.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/e3efb85d-abd7-158f-bb3a-543ce76a2562.png)

Job が動きだして  
![CreatePipeline_012.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/1e997551-d7bd-6fb5-b293-d8c0bc8c46ee.png)

パイプライン配置リポジトリとは異なる、アプリ配置リポジトリからソース取得して、階層表示している  
![CreatePipeline_013.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2738816/acfafbda-0ea5-f76c-97e9-8fa9469eeeb0.png)

## 関連作業

- [CI/CD とは?](https://qiita.com/wf-kenji-ikeda/items/bfb6d5e21b33d0cca83b)
- [Azure Devops (Artifacts) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/9c21859d8b5b6a63246e)
- [Spring Tool Suite 4 インストール、Spring Initializr 、gradlew の利用](https://qiita.com/wf-kenji-ikeda/items/d00766da8a4076ec43ed)
- [Spring Boot Web アプリケーションを作る](https://qiita.com/wf-kenji-ikeda/items/1e64e44094ce8a1d997f)
- [Jar の Library を作り、Azure Artifacts を利用して成果物を配布する](https://qiita.com/wf-kenji-ikeda/items/696bda335a8933abfcb3)
- [ライブラリ開発者より指定されたバージョンを利用してアプリを作る](https://qiita.com/wf-kenji-ikeda/items/5bf06ce19c52e73a5463)
- [アプリを Docker 、Docker Compose でコンテナを動かしてみる](https://qiita.com/wf-kenji-ikeda/items/e6604ea6ae257f3925a7)
- [Azure Devops (PileLines) を無償、無料で使う](https://qiita.com/wf-kenji-ikeda/items/451838da3b4ac45a8d65)
- [Azure Devops (PileLines) でテスト、ビルド、イメージプッシュをする](https://qiita.com/wf-kenji-ikeda/items/5ddf6158bb98c4174db9)
- [minikube(kubernetes) でコンテナを動かしてみる](https://qiita.com/wf-kenji-ikeda/items/95604d83850a17b91c46)
- [nginx のコンテナを Docker や minikube(kubernetes) で動かし、静的コンテンツ公開工程を模倣](https://qiita.com/wf-kenji-ikeda/items/bf6cb1b7a047f562d309)

## 参考記事

[Azure Pipelines を無料枠で使おうとして躓いた話](https://qiita.com/Hachiyou-Renge/items/2083f2ce9e8b38558805)  
[Azure Pipelines エージェント](https://docs.microsoft.com/ja-jp/azure/devops/Pipelines/agents/agents?view=azure-devops&tabs=browser)