1. はじめに
こんにちは!株式会社Definerのライターチームです!
今回は、Azure PipelinesとGCP Cloud Runを連携する方法について気になりますよね。
実際の画面や、資源を見ながら詳しく解説していきましょう。
2. 目的・ユースケース
この記事では、Azure PipelinesでGCP Cloud RunのCI/CDパイプラインを構築したいときに、参考になる情報やプラクティスをまとめています。
3. ステップ.1 セットアップ
早速、実装していきます。
まずは準備として、Container RegistryやAzure Pipelineを作成していきます。
①Azure DevOpsプロジェクトの設定
Azure DevOpsのコンソールへアクセスし、新しいプライベートプロジェクトを作成します。
右のタブで「Repo」を選択し、GitHubから以下のリポジトリをクローンします。
②GCPでのAzure Pipeline用のサービスアカウントの作成
GCPアカウントにログインし、サービスアカウントを作成します
以下コマンドで作成してください。
キーは、後ほど使うので控えておいてください。
③Container RegistryへAzure Pipelineを接続
ここで、Azure PipelineとGCPのレジストリの接続をおこなっていきます。
Azure DevOpsの「Project Settings」→「Pipelines」→「Service Connections」
「Create Service Connections」をクリックし、「Docker Registry」にGCPのレジストリIDを、「Password」に先ほど控えたキーをコピペします。
## GCPサービスアカウントの作成
gcloud iam service-accounts create azure-pipelines-publisher \
--display-name="for_azure_pipelines" \
--project=${PROJECT_ID}
## サービスアカウントへのストレージ権限の付与
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member serviceAccount:azure-pipelines@${PROJECT_ID}.iam.gserviceaccount.com \
--role roles/storage.admin \
--project=${PROJECT_ID}
## サービスアカウントへのデプロイ権限の付与
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member serviceAccount:azure-pipelines@${PROJECT_ID}.iam.gserviceaccount.com \
--role roles/run.admin \
--project=${PROJECT_ID}
## キーの発行
gcloud iam service-accounts keys create azure-pipelines.json \
--iam-account azure-pipelines@${PROJECT_ID}.iam.gserviceaccount.com \
--project=${PROJECT_ID}
4. ステップ.2 デプロイの実装
続いて、デプロイ部分を実装していきます。
①設定ファイルの適用
コマンドラインに、以下のyamlファイルをコピペしてください。
環境変数として、Google Cloudのサービスアカウントキーを設定します。
②Azure Pipelineのデプロイ定義作成
Azure Pipielineから「Releases」をクリックし、パイプラインを作成します。
デプロイスクリプトを設定すると、パイプラインが実行されるようになります。
パイプラインをキックすると、Cloud Runに新しいコードが適用されています。
resources:
- repo: self
fetchDepth: 1
queue:
name: Hosted Ubuntu 1604
trigger:
- master
variables:
TargetFramework: 'netcoreapp3.1'
BuildConfiguration: 'Release'
DockerImageName: '${PROD_PROJECT_ID}/CloudDemo'
steps:
- task: DotNetCoreCLI@2
displayName: Publish
inputs:
projects: 'applications/clouddemo/netcore/CloudDemo.MvcCore.sln'
publishWebProjects: false
command: publish
arguments: '--configuration $(BuildConfiguration) --framework=$(TargetFramework)'
zipAfterPublish: false
modifyOutputPath: false
- task: PublishBuildArtifacts@1
displayName: 'Publish Artifact'
inputs:
PathtoPublish: '$(build.artifactstagingdirectory)'
- task: Docker@2
displayName: 'Login to Container Registry'
inputs:
command: login
containerRegistry: 'gcr-tutorial'
- task: Docker@2
displayName: 'Build and push image'
inputs:
Dockerfile: 'applications/clouddemo/netcore/Dockerfile'
command: buildAndPush
repository: '$(DockerImageName)'
デプロイスクリプト
## 認証
gcloud auth activate-service-account \
--quiet \
--key-file <(echo $(ServiceAccountKey) | base64 -d) && \
## デプロイ
gcloud run deploy ${Cloud Run名} \
--quiet \
--service-account=${サービスアカウント名} \
--allow-unauthenticated \
--image=${イメージパス} \
--platform=managed \
--region=${Region} \
--project=${プロジェクトID}
5. 引用・参考記事
6. 独自ソリューション「PrismScaler」について
PrismScalerは、開発・運用を要さずにたった3ステップで、AWSやAzure、GCPなどのマルチクラウド基盤構築を実現するWebサービスです。
エンジニアの大変な作業を肩代わり
・自動構築
・自動監視
・構成可視化
クラウド基盤に関わる作業を以上のように効率化します。
SRE/DevOpsエンジニアが行う大変な作業を肩代わりします。
高品質な汎用クラウド基盤の実現
・クラウド基盤構築/クラウド移行
・クラウドの保守運用・コスト最適化
など幅広い利用シーンを想定しています。IaaSやPaaSを適切に組み合わせた数百を超える高品質な汎用クラウド基盤を容易に実現できます。
興味を持たれた方には、無料で資料を提供しております。
お気軽にご相談ください。
7. お問合せ
株式会社Definerでは、
・ITの上流から下流まで一気通貫のワンストップソリューションをご提供。
・AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミット。
・少ないエンジニアで事業が成長する仕組みづくりの実現。
・エンジニアが喜ぶ、採用しやすい環境づくりの実現。
・高速なアジャイル開発環境の実現。
・自社プロダクトとしてPrismScalerを展開。
上記事業内容を進行しております。
※「開発者ブログ」では、エンジニアの入門編として有益な情報を無料公開しています。
ご相談やお問い合わせは「株式会社Definer」へ。
8. Definerに関して。
・ Definer Incは、ITの上流から下流まで一気通貫のワンストップソリューションをご提供しております。
・ AIやクラウドのITインフラなど、先進的なIT技術のコンサルティングから要件定義 / 設計開発 / 実装、保守運用に至るまでの統合的な支援にコミットしています。
・ DevOpsとCI/CDコンサルティングにより「少ないエンジニアで事業が成長する仕組みづくり」「エンジニアが喜ぶ、採用しやすい環境づくり」「高速なアジャイル開発環境」を実現しています。
・ また、自社プロダクトとしてPrismScalerを展開しております。PrismScalerは、AWS、Azure、GCPなどのマルチクラウド / ITインフラの高品質かつ迅速な、「自動構築」「自動監視」「問題検知」「構成可視化」を実現します。