理系学生日記

おまえはいつまで学生気分なのか

Azure PipelinesのService Connectionを使ってAzure Container RegistryのコンテナをPULLする

Azure Pipelinesにおいて、ジョブを動かすコンテナイメージをAzure Container RegistryからPULLしたい。 これを実行するとき、docker loginでACRにログインするんだろうなと考えていました。そうすると、ログイン用のクレデンシャルを保存しておかなければなりません。 しかし、よく見ると他の仕組みで実現可能なことがわかりました。それがService Connectionです。

Service ConnectionはAzure Pipelinesから別サービスを参照するための仕組みで、ACRにも対応しています。 場所がわかりづらいのですが、Azure DevOpsのProject Settings->Pipelines->Service Connectionsに設定があります。

ここでACRに対するService Connectionの設定をします。Service connection nameで任意の名前をつけましょう。 Grant access permission to all pipelinesにチェックをつけると、組織内の各パイプラインからService Connectionが使えるようになります。ちなみにチェックをつけないと、特定のPipelineで使おうとする都度、承認が必要になります。

Azure PipelinesにおけるPipelineの設定ファイルであるazure-pipelines.ymlからは、以下のように指定します。 こうすると、docker login等を実施することなく、PipelineがイメージをPULLできます。

resources:
  containers:
    - container: terraform_lint
      image: ciimages.azurecr.io/terraform-lint:$(TFLINT_VERSION)
      endpoint: CIImagesServiceConnection # Project settings -> Pipelines -> Service connections

stages:
  - stage: Lint
    jobs:
      - job: tflint
        displayName: Terraform Lint
        container: terraform_lint
        steps:
          - script: |
              echo hello world