この記事は リンク情報システム の「2020新春アドベントカレンダー TechConnect!」のリレー記事です。
TechConnect! は勝手に始めるアドベントカレンダーとして、engineer.hanzomon という勝手に作ったグループによってリレーされます。
(リンク情報システムのFacebookはこちらから)
はじめに
今さらながらCI/CDをやってみたのでまとめておきます。
Azure DevOpsを使用してApp Service(Dockerコンテナ)のCI/CD環境をつくりました。
AzureもCI/CDも初心者です。間違っているところは教えて下さい。
必要なもの
- git
- Azureアカウント
ソースコードを準備
App Serviceのクイックスタートサンプルを使う
# クローン
git clone https://github.com/yiliaomsft/python-hello-world.git
cd python-hello-world
# リモートリポジトリの削除
git remote remove origin
Azure DevOps
すべてのサービスへ移動。
「Azure DevOps」を選択。
赤枠のリンクをクリック。
organization作成
「Continue」
ユニークなorganization名を付けて「Continue」
project作成
Reposにソースコードをpush
コマンドはこんな感じ。
git remote add origin YOUR_REPOSITORY_URL
git push -u origin --all
コンテナーレジストリ作成
「コンテナーレジストリ」を選択。
「追加」
リソースグループを作成、管理者ユーザーを「有効」にして「作成」
Docker Registry service connection作成
「Docker Registry」を選択して「Next」
先程つくったコンテナーレジストリを指定。名前はお好みで。
ビルドパイプライン作成
「Azure Repos Git」を選択。
「Starter pipeline」を選択。
13行目以降を消して「Show assistant」をクリック。
「Docker」を選択。
Container registryには先程つくったservice connection、
Container repositoryは何でもOK、
Commandは「buildAndPush」を選択して「Add」
yamlに反映されていることを確認して「Save」
動かす
コンテナーレジストリを確認
App Service作成
「App Service」を選択。
「追加」
ユニークな名前を付け、Dockerコンテナー、Linuxを選択して次へ。
先程pushしたイメージを選択して「確認および作成」
「作成」
確認
リリースパイプライン作成
「Azure App Service deployment」を選択して「Apply」
赤枠のリンクをクリック。
サブスクリプション選択して「Authorize」
これまでに作成したものをそれぞれ選択もしくは設定。
※Registryには「.azurecr.io」を付けるのを忘れずに
Artifactsは使用しないためチェックを入れて「Save」
「OK」
「Add an artifact」をクリック。
先程つくったビルドパイプラインを選択して「Add」
自動ビルド・リリースを動かしてみる
「Hello World!」を「hello world!」に修正して「Commit」
「Commit」
ビルド
masterブランチに変更が入ったためビルドが始まる。
ビルド完了。
リリース
App Serviceを確認
「Hello World!」が「hello world!」に変わっていることを確認。
(おまけ)自動テスト
自動テストにはTest Plansを使うものかと思っていたところ、公式に以下の記載を発見。
CI/CD ワークフローに自動テストは必要ありませんか?Azure Pipelines の使用
Azure PipelinesにContainer Structure Test用のTaskがあったので、ビルドパイプラインに組み込んでみる。
テスト用のファイルを作成
「hello-world.py」が存在するかチェックするだけ。
schemaVersion: '2.0.0'
fileExistenceTests:
- name: 'app'
path: '/code/hello-world.py'
shouldExist: true
ビルドパイプラインを修正
これでイメージがpushされた後にContainer Structure Testが実行される。
おわりに
おつかれさまでした。