Azure DevOpsとは、Azure 上で DevOps(計画→開発→デリバリー→運用)を実現するために必要なサービスが揃ったプラットフォームのことをいう。
また、Azure DevOpsの提供するサービスの1つにAzure Pipelinesがあり、ソースコードのビルドと配置を自動的に行える。
今回は、Azure Pipelinesを利用して、Dockerコンテナを利用したPythonアプリケーションをContainer Registryに自動反映してみたので、その手順を共有する。
なお、Azure Pipelinesについては、以下のサイトを参照のこと。
https://qiita.com/mstakaha1113/items/f9fad71b8bd33e77d9ce
前提条件
下記サイトの手順に従って、Azure DevOps上のAzure Reposにブランチを作成しソースコードを配置済であること。

また、下記サイトの手順に従って、Azure Functions上で動作するDockerコンテナを利用したPythonアプリケーションをContainer Registryに配置済であること。

やってみたこと
Azure Pipelinesの作成
ソースコードのビルドと配置を自動的に行うためのAzure Pipelinesは、Azure Devops上で作成できる。その手順は、以下の通り。
1) Azure DevOpsにログインし、Reposを確認した結果は、以下の通り。ここで「Pipelines」ボタンを押下する。
3) ソースコードをAzure DevOps上のAzure Reposに配置しているため、「Azure Repos Git」を選択する。
4) 表示されたAzure Reposリポジトリを選択する。
5) 今回はDockerイメージを作成しAzure Container Registryに配置したいため、下記赤枠のDockerを選択する。
6) Azureのサブスクリプションが表示されるため、選択し「Continue」ボタンを押下する。
7) 以下のような別ウィンドウが起動するため、Azure Portalにログインするアカウントを利用して、サインインする。

8) 作成済のAzure Container Registryを選択し、Image名はそのままで、「Validate and configure」ボタンを押下する。
なお、Azure Portal上で、Azure Container Registryに、以下の「funccontainer」を作成済であるとする。
9) 以下のようなYAMLファイルが作成されるため、このまま「Save and run」ボタンを押下する。
10) そのまま「Save and run」ボタンを押下する。
11) 以下のように、Azure Pipelinesの開始が確認できる。なお、Azure Pipelinesは、作成されたYAMLファイル(azire-pipelines-yml)の設定に従って動作する。
12) Azure Pipelineが終了すると、以下の画面が表示される。
13)「Pipelines」メニューを再度押下すると、以下のように表示される。
14) Azure Portalにログインし、Container Registry「funccontainer」を確認すると、以下のように、「azurefunctionpython」リポジトリが作成されたことが確認できる。


Azure Functionsでの動作検証
配置されたAzure Container Registry上のDockerイメージは、Azure Functionsに設定することで動作検証できる。その手順は、以下の通り。
1) Azure Portalにログインし、Dockerイメージを配置するAzure Functionsを開き、「設定」の「構成」メニューを押下する。
2) イメージ・イメージタグを、先ほど作成された「azurefunctionpython」リポジトリ変更し、「保存」ボタンを押下する。
3) Azure Functionsを再起動するため、概要メニューの「停止」ボタンを押下する。
4) 停止確認のダイアログが表示されるので、「はい」ボタンを押下する。
5) Azure Functions停止確認後、「開始」ボタンを押下する。
6) Azure Functionsの開始を確認後、URL確認のため、「HttpExample」関数のリンクを押下する。
7)「関数のURLの取得」メニューを押下後、_master(ホストキー)のURLをコピーする。
8) ブラウザでコピーしたURLにアクセスすると、以下のように、Azure DevOps上のfunction_app.pyの赤枠部分の文字列が、画面上に表示されることが確認できる。

ソースコードの修正とAzure Pipelines動作検証
Azure DevOps上のAzure Reposにソースコードを配置すると、作成済のAzure Pipelinesにより、Dockerコンテナを利用したPythonアプリケーションをContainer Registryに自動反映できる。その確認手順は、以下の通り。
1) 配置するソースコードのうち、function_app.pyの赤枠部分(by Pipeline)を追加する。
2)「git add」「git commit」「git push」コマンドを、それぞれ順次実行していくことで、ローカルのソースコードを、Reposリポジトリに配置する。


ちなみに、「git push」コマンドが一度失敗したため、「git pull」コマンドを実行後に、上記「git push」コマンドを実行している。
3)「git push」コマンドでAzure Reposを更新すると、以下のように、Azure Pipelineが自動的に動作し始めることが確認できる。
4) Azure Pipeline実行後の履歴は以下の通りで、2回、Azure Pipelineが実行されたことが確認できる。

5) Reposのコミット履歴を確認した結果は、以下の通り。

6) Azure Portal上のコンテナレジストリの内容は以下の通りで、「azurefunctionpython」リポジトリにタグ「173」が増えているのが確認できる。
7) Azure Portal上で関数アプリのイメージタグを最新版「173」に変更後、Azure Functionsを再起動する。
なお、詳細手順はこのページの Azure Functionsでの動作検証 を参照のこと。
8) 関数のURLにアクセスすると、以下のように、末尾に「by Pipeline!!」が表示されていることが確認できる。
要点まとめ
- Azure DevOpsの提供するサービスの1つにAzure Pipelinesがあり、ソースコードのビルドと配置を自動的に行える。