From d25425b309e6d66b7480e9de260eaed0ebb2a60f Mon Sep 17 00:00:00 2001 From: "Patrick Nelson (VS)" Date: Thu, 20 Aug 2026 13:31:59 -0700 Subject: [PATCH 1/2] Add Linux build image pipeline Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 91fc1ee3-05d7-4c21-8dae-9ab4fd12b8c7 --- build/yaml/pipelines/build_images.yaml | 81 ++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 build/yaml/pipelines/build_images.yaml diff --git a/build/yaml/pipelines/build_images.yaml b/build/yaml/pipelines/build_images.yaml new file mode 100644 index 00000000..528df429 --- /dev/null +++ b/build/yaml/pipelines/build_images.yaml @@ -0,0 +1,81 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +# Build Pipeline: Linux Build Images +# Manually rebuilds and publishes the Ubuntu and Alpine images used by Linux CI. + +trigger: none +pr: none + +name: $(date:yyyyMMdd)$(rev:rr) + +parameters: +- name: ImageTag + displayName: Container image tag + type: string + default: latest + +variables: + TeamName: ClrInstrumentationEngine + RegistryName: proddiagbuild + RegistryServer: proddiagbuild.azurecr.io + +jobs: +- job: BuildImages + displayName: Build Linux images + + pool: + ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: + name: AzurePipelines-EO + image: 1ESPT-Ubuntu20.04 + os: linux + ${{ else }}: + vmImage: ubuntu-latest + + steps: + - checkout: self + clean: true + + - bash: | + set -e + if [[ ! "$IMAGE_TAG" =~ ^[A-Za-z0-9_.-]+$ ]]; then + echo "Invalid image tag: $IMAGE_TAG" + exit 1 + fi + displayName: Validate image tag + env: + IMAGE_TAG: ${{ parameters.ImageTag }} + + - task: AzureCLI@2 + displayName: Docker login + inputs: + azureSubscription: 'VS Diagnostics Dev (ProdDiagBuild)' + scriptType: bash + scriptLocation: inlineScript + inlineScript: az acr login --name $(RegistryName) + + - bash: | + set -e + image="$(RegistryServer)/clrie-build-ubuntu:$IMAGE_TAG" + docker build --pull \ + --label "org.opencontainers.image.revision=$(Build.SourceVersion)" \ + --tag "$image" \ + --file src/unix/docker/dockerfiles/build/ubuntu/Dockerfile \ + src/unix/docker/context + docker push "$image" + displayName: Build and push Ubuntu image + env: + IMAGE_TAG: ${{ parameters.ImageTag }} + + - bash: | + set -e + image="$(RegistryServer)/clrie-build-alpine:$IMAGE_TAG" + docker build --pull \ + --label "org.opencontainers.image.revision=$(Build.SourceVersion)" \ + --tag "$image" \ + --file src/unix/docker/dockerfiles/build/alpine/Dockerfile \ + src/unix/docker/context + docker push "$image" + displayName: Build and push Alpine image + env: + IMAGE_TAG: ${{ parameters.ImageTag }} From 51fb284b2ab6b6e6783d52d0716f4ba3496ab930 Mon Sep 17 00:00:00 2001 From: "Patrick Nelson (VS)" Date: Mon, 24 Aug 2026 10:38:17 -0700 Subject: [PATCH 2/2] Use 1ES container image pipeline Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 91fc1ee3-05d7-4c21-8dae-9ab4fd12b8c7 --- build/yaml/pipelines/build_images.yaml | 135 ++++++++++++++----------- 1 file changed, 77 insertions(+), 58 deletions(-) diff --git a/build/yaml/pipelines/build_images.yaml b/build/yaml/pipelines/build_images.yaml index 528df429..6f5cd251 100644 --- a/build/yaml/pipelines/build_images.yaml +++ b/build/yaml/pipelines/build_images.yaml @@ -14,68 +14,87 @@ parameters: displayName: Container image tag type: string default: latest +- name: RegistryServiceConnection + displayName: ACR Docker service connection + type: string + default: 'VS Diagnostics Dev (ProdDiagBuild)' variables: - TeamName: ClrInstrumentationEngine - RegistryName: proddiagbuild - RegistryServer: proddiagbuild.azurecr.io +- name: TeamName + value: ClrInstrumentationEngine + readonly: true +- name: ImageTag + value: ${{ parameters.ImageTag }} + readonly: true -jobs: -- job: BuildImages - displayName: Build Linux images +resources: + repositories: + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release - pool: - ${{ if eq(variables['System.TeamProject'], 'devdiv') }}: +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + pool: name: AzurePipelines-EO image: 1ESPT-Ubuntu20.04 os: linux - ${{ else }}: - vmImage: ubuntu-latest - - steps: - - checkout: self - clean: true - - - bash: | - set -e - if [[ ! "$IMAGE_TAG" =~ ^[A-Za-z0-9_.-]+$ ]]; then - echo "Invalid image tag: $IMAGE_TAG" - exit 1 - fi - displayName: Validate image tag - env: - IMAGE_TAG: ${{ parameters.ImageTag }} - - - task: AzureCLI@2 - displayName: Docker login - inputs: - azureSubscription: 'VS Diagnostics Dev (ProdDiagBuild)' - scriptType: bash - scriptLocation: inlineScript - inlineScript: az acr login --name $(RegistryName) - - - bash: | - set -e - image="$(RegistryServer)/clrie-build-ubuntu:$IMAGE_TAG" - docker build --pull \ - --label "org.opencontainers.image.revision=$(Build.SourceVersion)" \ - --tag "$image" \ - --file src/unix/docker/dockerfiles/build/ubuntu/Dockerfile \ - src/unix/docker/context - docker push "$image" - displayName: Build and push Ubuntu image - env: - IMAGE_TAG: ${{ parameters.ImageTag }} - - - bash: | - set -e - image="$(RegistryServer)/clrie-build-alpine:$IMAGE_TAG" - docker build --pull \ - --label "org.opencontainers.image.revision=$(Build.SourceVersion)" \ - --tag "$image" \ - --file src/unix/docker/dockerfiles/build/alpine/Dockerfile \ - src/unix/docker/context - docker push "$image" - displayName: Build and push Alpine image - env: - IMAGE_TAG: ${{ parameters.ImageTag }} + + stages: + - stage: BuildImages + displayName: Build Linux images + + jobs: + - job: BuildUbuntuImage + displayName: Build and publish Ubuntu image + + templateContext: + authenticatedContainerRegistries: + - serviceConnection: ${{ parameters.RegistryServiceConnection }} + + outputs: + - output: containerImage + image: proddiagbuild.azurecr.io/clrie-build-ubuntu:$(ImageTag) + targetPath: $(Build.ArtifactStagingDirectory) + artifactName: ubuntu-image + + steps: + - checkout: self + clean: true + + - task: 1ES.BuildContainerImage@1 + displayName: Build Ubuntu image + inputs: + image: proddiagbuild.azurecr.io/clrie-build-ubuntu:$(ImageTag) + path: $(Build.SourcesDirectory)/src/unix/docker/context + dockerfile: $(Build.SourcesDirectory)/src/unix/docker/dockerfiles/build/ubuntu/Dockerfile + enableNetwork: true + useBuildKit: true + + - job: BuildAlpineImage + displayName: Build and publish Alpine image + + templateContext: + authenticatedContainerRegistries: + - serviceConnection: ${{ parameters.RegistryServiceConnection }} + + outputs: + - output: containerImage + image: proddiagbuild.azurecr.io/clrie-build-alpine:$(ImageTag) + targetPath: $(Build.ArtifactStagingDirectory) + artifactName: alpine-image + + steps: + - checkout: self + clean: true + + - task: 1ES.BuildContainerImage@1 + displayName: Build Alpine image + inputs: + image: proddiagbuild.azurecr.io/clrie-build-alpine:$(ImageTag) + path: $(Build.SourcesDirectory)/src/unix/docker/context + dockerfile: $(Build.SourcesDirectory)/src/unix/docker/dockerfiles/build/alpine/Dockerfile + enableNetwork: true + useBuildKit: true