(後編)CI/CDサービス「Azure Pipelines」入門 ~Microsoft Azure DevOps入門~

"" (2020年12月1日 掲載)

こんにちは。ソフトバンクの島崎と申します。
今回はAzure DevOps入門、第3回「Azure Pipelines」の後編になります。前編をまだご覧になられていない方は、ぜひチェックしてみてください。(CI/CDの概要と、Azure Pipelinesを利用するための事前準備を解説しています)

CI/CDサービス「Azure Pipeline」入門【前編】

後編ではいよいよ、Azure Pipelinesを利用して、実際にCI/CDを体験していきます!

目次

5. Azure Pipelines

本章より、デプロイしたAzure DevOpsの「Pipelines」機能を解説していきたいと思います。
今回はAzure PipelinesのCI/CD機能である「Pipelines」「Releases」について、解説したいと思います。(その他の機能に関しては、メイン機能からは外れるため、今回は対象外とします)
本章をご覧いただければ、CI/CDを実際の動きを見ながら、Azure Pipelinesの機能を確認することができます。

5-1. Azure Pipelines「Pipelines」

Azure Pipelinesの「Pipelines」機能では、主にCI機能を提供します。YAML形式のパイプラインファイルに、テストやアーカイブするための、定義を記載します。Azure DevOps側で、本ファイルを読み込み、記載された通りに、自動テストや自動ビルドを実施していきます。

5-1-1. パイプラインファイルの作成

 以下より、実際にパイプラインファイルを作成していきます。Azure Pipelinesでは、1からファイルを作成する必要がなく、ある程度の型が自動で作成されるので、非常に簡単にCIを実装することができます。

①左タブより、「Pipelines>Pipelines」を選択し、「Create Pipeline」を選択する

""

② 今回は、Azure Reposのコードを利用するため、「Azure Repos Git」を選択します。

③「Select a repository」にて、使用するリポジトリを選択します。
(事前準備にてインポートしたリポジトリを指定します)

④「Configure your pipeline」にて「Python package」を選択します。

⑤「Save and Run」を押下し、以下の通り、新しくブランチを作成した上で、「Save」を押下します。(コードの中身は、後程編集します)

⑥「Azure Repos>Files」より、「azure-pipelines」ブランチを確認すると、「azure-pipelines.yml」が作成されていることが確認できます。

""

5-1-2. CIの設定(パイプラインファイルの編集)

本章にて、CIの設定を行います。設定を行うために、上記で作成されたパイプライン定義ファイルである、「azure-pipelines.yml」を編集していきます。

①「Azure Repos>Files」を押下し、「azure-pipelines.yml」を確認します

""

② ブランチが「master」などになっている場合、前章で作成したブランチ(今回の場合「azure-pipelines」ブランチ)に切り替えます。

③「azure-pipelines.yml」を選択し、右側の「Edit」を押して、編集できる状態にします。

""

④以下となるように、「azure-pipelines.yml」を修正します。


# Python package
# Create and test a Python package on multiple Python versions.
# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/python

# マスターブランチへの変更をトリガーとして起動します
trigger:
- master

# CIに必要なVMを定義します
pool:
  vmImage: 'ubuntu-latest'
strategy:
  matrix:
    Python37:
      python.version: '3.7'

# パイプラインの処理を記載します
steps:
# 利用するPythonのバージョンを定義します
- task: UsePythonVersion@0
  inputs:
    versionSpec: '$(python.version)'
  displayName: 'Use Python $(python.version)'

# 必要なライブラリをインストールします
- script: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
  displayName: 'Install dependencies'

# テストを実行します
- script: |
    pip install pytest pytest-azurepipelines
    pytest
  displayName: 'pytest'

# ソースコードをアーカイブし、公開します
- task: ArchiveFiles@2
  inputs:
    rootFolderOrFile: '$(Build.SourcesDirectory)'
    includeRootFolder: false
    archiveType: 'zip'
    archiveFile: '$(Build.ArtifactStagingDirectory)/Application$(Build.BuildId).zip'
    replaceExistingArchive: true
    verbose: # (no value); this input is optional
- publish: $(Build.ArtifactStagingDirectory)/Application$(Build.BuildId).zip
  displayName: 'Upload package'
  artifact: drop

⑤ 右上の「Commit」を押し、変更を保存します。
※「Branch name」が作成したブランチ(本ブログの場合、「azure-pipelines」ブランチ)になっていることを確認してください

以上で、CIの設定が完了しました。本定義通りに、自動テスト、自動ビルドが実施されます。

5-1-3. Pythonアプリケーション側の設定

次に、デプロイした「Python」アプリケーションが起動するための設定を行います。(本章はAzureDevOpsとは直接関係ありませんが、デプロイした環境のweb画面を確認するために必要な設定になります)

① 「Azure Repos>Files」の上部の「・・・」マークより、「New>File」を選択し、新しいファイルを作成します。

②「application.py」と入力し、「Create」を押します。

 ※デフォルトでAzure Web Appsは、「opt/defaultsite」配下にあるファイルを読み込みにいき、Azure Web Appsで用意されている以下の既定の画面を表示します。

""

今回はサンプルアプリケーションの画面を表示させたいので、「application.py」を作成し、デフォルトファイルの代わりに当該ファイルを読み込ませるようにします。
このAzure Web Appsの動きの詳細に関しては、Microsoft社の公式ドキュメントをご参照ください。

③「application.py」の中身を以下の通り編集し、「Commit」します
※「Branch name」が作成したブランチ(本ブログの場合、「azure-pipelines」ブランチ)になっていることを確認してください

from hello_app.webapp import app

以上で、Pythonアプリケーション側の設定が完了となります。

5-1-4. 「master」ブランチへのマージ

ここまでで、設定が完了しましたが、現在「master」ブランチへは反映されていません。本章では「master」ブランチへのこれまで行ってきた設定内容を反映させます。

①「Repos>Pull requests」から、作成されている「Pull Request」を選択します。

""

②右上の「Complete」を選択して、変更をmasterブランチに反映させます。
※マージの際のチェックボックスはデフォルトのままで構いません

以上で、CI側の設定が「master」ブランチに反映されました。現在、masterブランチに変更が発生するたびに、Azure Pipelineの「Pipelines」機能が起動し、自動テストとデリバリーを実施するようになっています。

5-2. Azure Pipelines 「Releases」

前章までで、CIの設定が完了しましたので、本章では実際にAzure Web Appsに、自動でデプロイするためのCD側の設定を行います。CD機能は、Azure Pipelinesの「Releases」にて提供されます。
以下の手順を実行し、「Releases」の設定を行い、自動でデプロイが処理されるようにします。

① 「Pipelines>Releases」より「Releases」を開き、「New pipeline」を押下します。

② 「Select a template」にて、「Azure App Service deployment」を選択します。

③「Stage name」を「Deploy to WebApp」に変更します。

④「Add an artifact」を押下します。
以下の「Artifacts」⇒「Stages」の流れで、処理が行われます。CI(Artifactsの部分)が成功すると、そのままCD(Stagesの部分)へ移行します。

  • Artifacts(左側):前章までのCI機能の部分。
  • Stages(右側):CD機能部分。CIが成功すると移行する。

⑤「Source」を、今回作成したパイプラインを選択し、「Add」を押します。
これで「CI⇒CD」までの一連の流れが完成します。

⑥次に、雷マークを押し、「Continuous deployment trigger」の一番上の設定を「Enabled」に設定します。

""

この設定を有効にすることで、前フェーズのCIが成功した場合、”自動で”CDが開始され、Azure WebAppに、コードがデプロイされます。

⑦画面上部の「Tasks」を選択し、「Azure subscription」情報と、「App type」、「App service name」を入力していきます。

  • 「Azure subscription」:(利用しているサブスクリプションを選びます)
  • 「App type」:(「Web App on Linux」を選択します)
  • 「App service name」:先ほど作成した「Azure Web Apps」を選択します

""

⑧ 最後に、「Deploy Azure App Service」を編集して、「Package or folder」にパッケージファイルが格納されているフォルダを入力します。

$(System.DefaultWorkingDirectory)/_【Azure DevOpsのプロジェクト名】/drop/Application$(Build.BuildId).zip

"

⑨入力後、画面右上の「Save」を押し、設定を保存します。

以上で、「Releases」の設定は完了になります。上記の設定によって、CIが正常に完了すると、自動でCDが処理されるようになりました。次章では、実際にCI/CDの一連の流れを確認します。

5-3. Azure Pipelinesの一連の流れを確認する

これまで構築したAzure Pipelinesの一連の流れを確認します。今回は手動でPipelinesを起動して、CI→CDを実施します。最後に実際にデプロイがされていることを、Azure WebAppsにアクセスして確認します。

5-3-1. デプロイ前の「Azure Web Apps」の状態を確認する

①Azure Portalより、作成した「Azure Web Apps」の「概要」から、「URL」に接続します。

""

②以下の画面が表示されることを確認します。
以下は、Azure Web Apps側で用意されている、デフォルト画面になります。
(この段階では、サンプルアプリがデプロイされていないことがわかります)

""

5-3-2. 実際にCI/CDを起動させる

今回は、手動でCIを起動し、その後自動でCDが実行され、「Azure Web Apps」にコードがデプロイされることを確認します

①Azure DevOpsの「Pipelines>Pipelines」より、作成したPipelineを選択します。

""

②右上の「Run pipeline」を押し、CIを起動させます。
以下のように、CIが動き出したことが確認できます。

""

③ 「Pipelines>Releases」より、該当のリリースを選択し、CDが自動で起動していることを確認します。

""

完了すると以下のように、「Succeeded」という表示なります。

※失敗した場合は、「Deploy to WebApp」にカーソルを合わせ、「Logs」を選択し、ログを確認します。

5-3-3. CI/CDが実施されたことを「Azure WebApps」上で確認する

①「5-3-1」と同様にして、作成した「Azure WebApps」にブラウザでアクセスします

②以下のサンプルアプリの画面が表示されていることを確認します

上記画面が確認できれば、CI→CDを通じて、「Azure Web Apps」にコードがデプロイされたことになります。
なお、現在の設定では、masterブランチのソースコードに変更がある度に、自動でCI/CDが起動する設定になっています。ぜひ、Azure Reposより、ソースコードを編集・保存して、実際にコードを編集しただけでCI/CDが実行されることを、ご確認いただければと思います。

6. おわりに

CI/CDの領域では、これまで手動で行ってきた、テストやデプロイを自動化することで劇的にリリースまでの効率化を行うことができます。CI/CDを実践する上で、今回ご紹介しました、Azure DevOpsの「Pipelines」は、非常に有用なサービスになります。本稿が、これからAzure DevOpsを利用しようとしている方々の助けに少しでもなれば、非常にうれしく思います。
ここまでご覧いただきありがとうございました!

f:id:aq-sb-01:20201201151159j:plain

関連サービス

Microsoft Azureは、Microsoftが提供するパブリッククラウドプラットフォームです。コンピューティングからデータ保存、アプリケーションなどのリソースを、必要な時に必要な量だけ従量課金で利用することができます。→詳細はこちら