Azure Pipelinesでコンテナのビルド&登録を行う

前回の記事では、コンテナをビルドした後にAzure Container Registryに登録するのをコマンドラインで行いました。
また、ACRを使ってビルドができることも確認しました。

Node.jsとTypeScriptで作ったAPIを、Azure App ServiceのWeb App for Containerで公開す...

今回は、Azure DevOpsのAzure Pipelinesを使って同じことを行なってみます。
まずは、Azure DevOpsに登録して、Reposにソースコードをpushしておきます。

メニューのPipelinesを選択して、「New pipeline」をクリックすると、ウィザード形式の画面が開きます。

「Where is your code ?」ということなので、ソースコードのあるリポジトリを指定します。今回はAzure Repos Gitを選択します。
するとリポジトリの一覧が表示されるので、先ほどpushしたリポジトリを選択します。

次に、処理内容のテンプレートを選択します。

Pipelineの正体はYAMLになるのですが、一から全て書くのは大変なので、よくある処理内容がテンプレートととして用意されています。いずれかのテンプレートを選択した後、そのYAMLを書き換えてカスタマイズすることもできます。
今回は、Dockerの2番目(Build and push an image to Azure Container Repository)を選択します、
すると、接続先のACRを設定するウインドウが右に出てきます。

この設定は、実は「サービスコネクション」と呼ばれるものです。Azure Pipelinesから外のサービスに接続する際に、接続先や資格情報などをYAMLに記載するのではなく、サービスコネクションとして別途保存しておき、それをYAMLから参照する形式になります。

これが終わるとYAMLが生成されます。
内容を見てみましょう。

trigger:
- master

resources:
- repo: self

variables:
  # Container registry service connection established during pipeline creation
  dockerRegistryServiceConnection: 'xxxx'
  imageRepository: 'webapp'
  containerRegistry: 'xxxx.azurecr.io'
  dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
  tag: '$(Build.BuildId)'
 
  # Agent VM image name
  vmImageName: 'ubuntu-latest'

stages:
- stage: Build
  displayName: Build and push stage
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)

いろいろな命令が並んでいて、一度に全部理解するのはなかなか大変です

triggerのmasterは、masterブランチにコミットされた時にこのpipelineが動く設定です。
resourcesはソースコードの場所を指定しています。DevOpsのReposを使うとシンプルにselfになります。
variablsで変数を定義しています。

その後の stages > jobs > steps がマルチステージパイプラインと呼ばれる処理のまとまりになります。コメントが入っているのでなんとなく処理内容はわかるのですが、例えば「Docker@2」というtaskの詳細はドキュメントを見ないとわかりません。

Docker イメージのビルドまたはプッシュ、ログインまたはログアウト、コンテナーの開始または停止、Docker コマンドの実行。

このようなpipelines独自のtaskがたくさん用意されているので、テンプレートや各種サンプルを探しながら理解していくことになります。

YAMLはプロジェクト直下に「azure-pipelines.yaml」として、ソースコードの一部としてコミットして管理します。
また、ウィザード中で作成したサービスコネクションは、Project Settings > Service Connections で確認できます。
もちろん先にサービスコネクションを作っておき、YAMLにそれを直接記載する方法でも作成できます。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク