From 0337b17b1295c28a533b9ba91dd6f202940a17c7 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 11:07:24 -0700 Subject: [PATCH 01/25] use hyperv isolation --- .pipelines/azure_pipeline_dev.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 4834bcac5..f79af6805 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -91,7 +91,7 @@ jobs: pool: name: Azure-Pipelines-CI-Test-EO variables: - linuxImagetag: $[ dependencies.common.outputs['setup.linuxImagetag'] ] + linuxImagetag: $[ dependencies.common.outputs['setup.linuxImagetag'] ] steps: - task: AzureCLI@2 @@ -146,8 +146,8 @@ jobs: pool: name: Azure-Pipelines-Windows-CI-Test-EO variables: - windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + steps: - task: PowerShell@2 inputs: @@ -179,7 +179,7 @@ jobs: @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker build --tag ${{ variables.repoImageName }}:$(windowsImageTag) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag) --build-arg IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageName }}:$(windowsImageTag) From 6e24fc0cdc15256b9437caf8e792eacff7a028d1 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 12:10:54 -0700 Subject: [PATCH 02/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 89 +++++++++++++++++++++++++++--- kubernetes/windows/Dockerfile | 4 +- 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index f79af6805..e1e7a56ae 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -141,7 +141,7 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: build_windows +- job: build_windows_2019 dependsOn: common pool: name: Azure-Pipelines-Windows-CI-Test-EO @@ -163,7 +163,7 @@ jobs: displayName: 'build base' - task: AzureCLI@2 - displayName: "Docker windows build" + displayName: "Docker windows build for base image ltsc2019" inputs: azureSubscription: ${{ variables.armServiceConnectionName }} scriptType: ps @@ -176,28 +176,101 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} + export WINDOWS_VERSION=ltsc2019 + windows2019ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) - @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2019ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . + + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageName }}:$(windows2019ImageTag) + } +- job: build_windows_2022 + dependsOn: common + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + + steps: + - task: PowerShell@2 + inputs: + targetType: 'filePath' + filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 + displayName: 'install prereqs' + + - script: | + setlocal enabledelayedexpansion + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" + endlocal + exit /B %ERRORLEVEL% + displayName: 'build base' + + - task: AzureCLI@2 + displayName: "Docker windows build for base image ltsc2022" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + export WINDOWS_VERSION=ltsc2022 + windows2022ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2022ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windowsImageTag) + docker push ${{ variables.repoImageName }}:$(windows2022ImageTag) } +- job: build_windows_multi-arc + dependsOn: build_windows_2019, build_windows_2022 + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + steps: + - task: AzureCLI@2 + displayName: "Docker windows build for multi-arc image" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + windows2019ImageTag=$(windowsImageTag)-ltsc2019 + windows2022ImageTag=$(windowsImageTag)-ltsc2022 + + @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + + if ("$(Build.Reason)" -ne "PullRequest") { + docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windows2019ImageTag) ${{ variables.repoImageName }}:$(windows2022ImageTag) + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019' - + DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022' - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, false) inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, ${{ variables.repoImageName }}:$(windowsImageTag)' + DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022, ${{ variables.repoImageName }}:$(windowsImageTag)' - task: PublishBuildArtifacts@1 inputs: diff --git a/kubernetes/windows/Dockerfile b/kubernetes/windows/Dockerfile index 7c514a777..36f950159 100644 --- a/kubernetes/windows/Dockerfile +++ b/kubernetes/windows/Dockerfile @@ -1,4 +1,6 @@ -FROM mcr.microsoft.com/windows/servercore:ltsc2019 +# Supported values of windows version is ltsc2019 or ltsc2022 which are being passed by the build script or build pipeline +ARG WINDOWS_VERSION= +FROM mcr.microsoft.com/windows/servercore:${WINDOWS_VERSION} MAINTAINER OMSContainers@microsoft.com LABEL vendor=Microsoft\ Corp \ com.microsoft.product="Azure Monitor for containers" From 5e52436e212a35da50c5e3d77a71e8a2940922c7 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 12:14:54 -0700 Subject: [PATCH 03/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index e1e7a56ae..7fd60e3ce 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -227,7 +227,7 @@ jobs: if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageName }}:$(windows2022ImageTag) } -- job: build_windows_multi-arc +- job: build_windows_multi_arc dependsOn: build_windows_2019, build_windows_2022 pool: name: Azure-Pipelines-Windows-CI-Test-EO @@ -271,7 +271,6 @@ jobs: inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022, ${{ variables.repoImageName }}:$(windowsImageTag)' - - task: PublishBuildArtifacts@1 inputs: pathToPublish: '$(Build.ArtifactStagingDirectory)' From 24f99272521e0454032014892059719e55649105 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 12:18:36 -0700 Subject: [PATCH 04/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 7fd60e3ce..1312dc3f4 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -228,7 +228,9 @@ jobs: docker push ${{ variables.repoImageName }}:$(windows2022ImageTag) } - job: build_windows_multi_arc - dependsOn: build_windows_2019, build_windows_2022 + dependsOn: + - build_windows_2019 + - build_windows_2022 pool: name: Azure-Pipelines-Windows-CI-Test-EO variables: From 5f685bde05f3fdf0a91045daf0ad2ee32fd1dbd9 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 12:36:51 -0700 Subject: [PATCH 05/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 4 ++-- .../build-and-publish-docker-image.ps1 | 16 ++++++++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 1312dc3f4..8de356050 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -176,7 +176,7 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - export WINDOWS_VERSION=ltsc2019 + WINDOWS_VERSION=ltsc2019 windows2019ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2019ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . @@ -219,7 +219,7 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - export WINDOWS_VERSION=ltsc2022 + WINDOWS_VERSION=ltsc2022 windows2022ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2022ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . diff --git a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 index c1f655882..f63cf0cb6 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 @@ -55,8 +55,20 @@ Write-Host "changing directory to DockerFile dir: $dockerFileDir" Set-Location -Path $dockerFileDir $updateImage = ${imagerepo} + ":" + ${imageTag} -Write-Host "STAT:Triggering docker image build: $image" -docker build -t $updateImage --build-arg IMAGE_TAG=$imageTag . +Write-Host "START:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" + +Write-Host "START:Triggering docker image build for ltsc2019: $image" +$WINDOWS_VERSION="ltsc2019" +$updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} +docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . +Write-Host "END:Triggering docker image build for ltsc2019: $image" + +Write-Host "START:Triggering docker image build for ltsc2022: $image" +$WINDOWS_VERSION="ltsc2022" +$updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} +docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . +Write-Host "END:Triggering docker image build for ltsc2022: $image" + Write-Host "END:Triggering docker image build: $updateImage" Write-Host "STAT:pushing docker image : $updateImage" From c9db63a667aa5b83f624f466268ffed51c1f9628 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 13:06:07 -0700 Subject: [PATCH 06/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 13 ++-- .../build-and-publish-docker-image.ps1 | 60 +++++++++++++------ 2 files changed, 47 insertions(+), 26 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 8de356050..828e41319 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -147,7 +147,7 @@ jobs: name: Azure-Pipelines-Windows-CI-Test-EO variables: windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - + windowsBaseImageVersion: ltsc2019 steps: - task: PowerShell@2 inputs: @@ -176,10 +176,9 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - WINDOWS_VERSION=ltsc2019 - windows2019ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) + windows2019ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2019ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2019ImageTag) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageName }}:$(windows2019ImageTag) @@ -190,6 +189,7 @@ jobs: name: Azure-Pipelines-Windows-CI-Test-EO variables: windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windowsBaseImageVersion: ltsc2022 steps: - task: PowerShell@2 @@ -219,10 +219,9 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - WINDOWS_VERSION=ltsc2022 - windows2022ImageTag=$(windowsImageTag)-$(WINDOWS_VERSION) + windows2022ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2022ImageTag) --build-arg WINDOWS_VERSION=$(WINDOWS_VERSION) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2022ImageTag) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageName }}:$(windows2022ImageTag) diff --git a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 index f63cf0cb6..5c3b82039 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 @@ -7,7 +7,9 @@ #> param( [Parameter(mandatory = $true)] - [string]$image + [string]$image, + [Parameter(mandatory = $true)] + [bool]$multiArc= $true ) $currentdir = $PSScriptRoot @@ -55,22 +57,42 @@ Write-Host "changing directory to DockerFile dir: $dockerFileDir" Set-Location -Path $dockerFileDir $updateImage = ${imagerepo} + ":" + ${imageTag} -Write-Host "START:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" - -Write-Host "START:Triggering docker image build for ltsc2019: $image" -$WINDOWS_VERSION="ltsc2019" -$updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} -docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . -Write-Host "END:Triggering docker image build for ltsc2019: $image" - -Write-Host "START:Triggering docker image build for ltsc2022: $image" -$WINDOWS_VERSION="ltsc2022" -$updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} -docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . -Write-Host "END:Triggering docker image build for ltsc2022: $image" - -Write-Host "END:Triggering docker image build: $updateImage" +if ($multiArc) { + Write-Host "START:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" + Write-Host "START:Triggering docker image build for ltsc2019: $image" + $WINDOWS_VERSION="ltsc2019" + $updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . + Write-Host "END:Triggering docker image build for ltsc2019: $image" + + Write-Host "START:Triggering docker image build for ltsc2022: $image" + $WINDOWS_VERSION="ltsc2022" + $updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . + Write-Host "END:Triggering docker image build for ltsc2022: $image" + + Write-Host "START:pushing docker image with base image ltsc2019 : $updateImageLTSC2019" + docker push $updateImageLTSC2019 + Write-Host "END:pushing docker image : $updateImageLTSC2019" + + Write-Host "START:pushing docker image with base image ltsc2022 : $updateImageLTSC2022" + docker push $updateImageLTSC2022 + Write-Host "END:pushing docker image : $updateImageLTSC2022" + + Write-Host "START:Triggering manigest for multi-arc docker image: $updateImage" + docker manifest create $updateImage $updateImageLTSC2019 $updateImageLTSC2022 + docker manifest push $updateImage + Write-Host "END:Triggering manifest for multi-arc docker image: $updateImage" + + Write-Host "END:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" +} else { + + Write-Host "START:Triggering docker image build: $image" + docker build -t $updateImage --build-arg IMAGE_TAG=$imageTag . + Write-Host "END:Triggering docker image build: $updateImage" + + Write-Host "START:pushing docker image : $updateImage" + docker push $updateImage + Write-Host "END:pushing docker image : $updateImage" +} -Write-Host "STAT:pushing docker image : $updateImage" -docker push $updateImage -Write-Host "EnD:pushing docker image : $updateImage" From 65522b5315b00a22f89eacaae20de85eca9609df Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 13:50:13 -0700 Subject: [PATCH 07/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 828e41319..91a0d7425 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -178,11 +178,9 @@ jobs: az acr login -n ${{ variables.containerRegistry }} windows2019ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2019ImageTag) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . - if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windows2019ImageTag) - } + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) - job: build_windows_2022 dependsOn: common pool: @@ -221,11 +219,10 @@ jobs: az acr login -n ${{ variables.containerRegistry }} windows2022ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windows2022ImageTag) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . + + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) - if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windows2022ImageTag) - } - job: build_windows_multi_arc dependsOn: - build_windows_2019 @@ -234,6 +231,8 @@ jobs: name: Azure-Pipelines-Windows-CI-Test-EO variables: windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2019BaseImageVersion: ltsc2019 + windows2022BaseImageVersion: ltsc2022 steps: - task: AzureCLI@2 @@ -251,15 +250,14 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - windows2019ImageTag=$(windowsImageTag)-ltsc2019 - windows2022ImageTag=$(windowsImageTag)-ltsc2022 - @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - if ("$(Build.Reason)" -ne "PullRequest") { - docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windows2019ImageTag) ${{ variables.repoImageName }}:$(windows2022ImageTag) - docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - } + docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2019BaseImageVersion} + docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2022BaseImageVersion} + + docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2019BaseImageVersion} ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2022BaseImageVersion} + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) From 65966dffae5ddb83952ff1dedcef24842f3b8609 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 14:23:51 -0700 Subject: [PATCH 08/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 91a0d7425..f90658faa 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -176,7 +176,6 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - windows2019ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . @@ -217,7 +216,6 @@ jobs: az account show az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - windows2022ImageTag=$(windowsImageTag)-$(windowsBaseImageVersion) docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . From b8db62ca5d021130ca0c0421234a7436f9cd88bc Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 14:57:50 -0700 Subject: [PATCH 09/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index f90658faa..530e3a495 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -177,7 +177,7 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) - job: build_windows_2022 @@ -217,7 +217,7 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) From 90d2e2b4923c5d27768f0114689ee451f317c44b Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 15:52:46 -0700 Subject: [PATCH 10/25] multi-arc image support --- .../windows/dockerbuild/build-and-publish-docker-image.ps1 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 index 5c3b82039..43505e1ef 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 @@ -62,13 +62,13 @@ if ($multiArc) { Write-Host "START:Triggering docker image build for ltsc2019: $image" $WINDOWS_VERSION="ltsc2019" $updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} - docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . + docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag . Write-Host "END:Triggering docker image build for ltsc2019: $image" Write-Host "START:Triggering docker image build for ltsc2022: $image" $WINDOWS_VERSION="ltsc2022" $updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} - docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION IMAGE_TAG=$imageTag . + docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag . Write-Host "END:Triggering docker image build for ltsc2022: $image" Write-Host "START:pushing docker image with base image ltsc2019 : $updateImageLTSC2019" From bbdccb514d9abae3af11ba7b67bf83adff320554 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 16:21:43 -0700 Subject: [PATCH 11/25] multi-arc image support --- .pipelines/azure_pipeline_dev.yaml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 530e3a495..6d5c38e23 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -250,10 +250,12 @@ jobs: @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2019BaseImageVersion} - docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2022BaseImageVersion} + docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + + docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + + docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) - docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2019BaseImageVersion} ${{ variables.repoImageName }}:$(windowsImageTag)-{windows2022BaseImageVersion} docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 From 43d41eb3c24cbd5bae7ee7eb7b35556839d888e8 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 17:13:37 -0700 Subject: [PATCH 12/25] doc and script updates --- README.md | 9 +++++++ kubernetes/windows/Dockerfile | 2 +- .../build-and-publish-docker-image.ps1 | 27 ++++++++++++------- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index e7206c492..33b7ebc0b 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,15 @@ powershell -ExecutionPolicy bypass # switch to powershell if you are not on pow And then run the script to build the image consisting of code and conf changes. ``` .\build-and-publish-dev-docker-image.ps1 -image /: # trigger build code and image and publish docker hub or acr +By default, multi-arc docker image will be built, but if you want generate test image either with ltsc2019 or ltsc2022 base image, then you can follow the instructions below + +For building image with base image version ltsc2019 +.\build-and-publish-dev-docker-image.ps1 -image /: -windowsBaseImageVersion ltsc2019 + +For building image with base image version ltsc2022 +.\build-and-publish-dev-docker-image.ps1 -image /: -windowsBaseImageVersion ltsc2022 + + ``` For the subsequent builds, you can just run - diff --git a/kubernetes/windows/Dockerfile b/kubernetes/windows/Dockerfile index 36f950159..672dfb1f7 100644 --- a/kubernetes/windows/Dockerfile +++ b/kubernetes/windows/Dockerfile @@ -1,4 +1,4 @@ -# Supported values of windows version is ltsc2019 or ltsc2022 which are being passed by the build script or build pipeline +# Supported values of windows version are ltsc2019 or ltsc2022 which are being passed by the build script or build pipeline ARG WINDOWS_VERSION= FROM mcr.microsoft.com/windows/servercore:${WINDOWS_VERSION} MAINTAINER OMSContainers@microsoft.com diff --git a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 index 43505e1ef..994fc0ec5 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 @@ -8,8 +8,7 @@ param( [Parameter(mandatory = $true)] [string]$image, - [Parameter(mandatory = $true)] - [bool]$multiArc= $true + [string]$windowsBaseImageVersion="" # Supported values are ltsc2019 or ltsc2022. Default is multi-arc image unless this value specified ) $currentdir = $PSScriptRoot @@ -57,19 +56,20 @@ Write-Host "changing directory to DockerFile dir: $dockerFileDir" Set-Location -Path $dockerFileDir $updateImage = ${imagerepo} + ":" + ${imageTag} -if ($multiArc) { +if ([string]::IsNullOrEmpty($windowsBaseImageVersion)) { Write-Host "START:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" - Write-Host "START:Triggering docker image build for ltsc2019: $image" + $WINDOWS_VERSION="ltsc2019" $updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + Write-Host "START:Triggering docker image build for ltsc2019: $updateImageLTSC2019" docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag . - Write-Host "END:Triggering docker image build for ltsc2019: $image" + Write-Host "END:Triggering docker image build for ltsc2019: $updateImageLTSC2019" - Write-Host "START:Triggering docker image build for ltsc2022: $image" $WINDOWS_VERSION="ltsc2022" $updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + Write-Host "START:Triggering docker image build for ltsc2022: $updateImageLTSC2022" docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag . - Write-Host "END:Triggering docker image build for ltsc2022: $image" + Write-Host "END:Triggering docker image build for ltsc2022: $updateImageLTSC2022" Write-Host "START:pushing docker image with base image ltsc2019 : $updateImageLTSC2019" docker push $updateImageLTSC2019 @@ -86,9 +86,16 @@ if ($multiArc) { Write-Host "END:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" } else { - - Write-Host "START:Triggering docker image build: $image" - docker build -t $updateImage --build-arg IMAGE_TAG=$imageTag . + if (($windowsBaseImageVersion -eq "ltsc2019") -or ($windowsBaseImageVersion -eq "ltsc2022")) { + Write-Host "Provided baseimage version valid and supported: ${windowsBaseImageVersion}" + } else { + Write-Host "Provided baseimage version neither valid nor supported: ${windowsBaseImageVersion}" -ForegroundColor Red + exit 1 + } + + $WINDOWS_VERSION=$windowsBaseImageVersion + Write-Host "START:Triggering docker image build: $image with baseImage version: ${windowsBaseImageVersion}" + docker build --isolation=hyperv -t $updateImage --build-arg WINDOWS_VERSION=$windowsBaseImageVersion --build-arg IMAGE_TAG=$imageTag . Write-Host "END:Triggering docker image build: $updateImage" Write-Host "START:pushing docker image : $updateImage" From d5cd1b16f1b55f1a75e6f37383fd7eb1f56d905a Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 17:34:35 -0700 Subject: [PATCH 13/25] add common as dependency for multi-arc job --- .pipelines/azure_pipeline_dev.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 6d5c38e23..13f2275d2 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -223,6 +223,7 @@ jobs: - job: build_windows_multi_arc dependsOn: + - common - build_windows_2019 - build_windows_2022 pool: From 889657c889b0061111e8da7fa13468b4863ef341 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Wed, 4 May 2022 21:45:02 -0700 Subject: [PATCH 14/25] merge into single job for perf evaluation --- .pipelines/azure_pipeline_dev.yaml | 98 +++--------------------------- 1 file changed, 8 insertions(+), 90 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 13f2275d2..b524d948c 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -19,6 +19,8 @@ variables: subscription: '9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb' containerRegistry: 'containerinsightsprod' repoImageName: '${{ variables.containerRegistry }}.azurecr.io/public/azuremonitor/containerinsights/cidev' + windows2019BaseImageVersion: ltsc2019 + windows2022BaseImageVersion: ltsc2022 IS_PR: $[eq(variables['Build.Reason'], 'PullRequest')] jobs: @@ -141,98 +143,13 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: build_windows_2019 - dependsOn: common - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - variables: - windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - windowsBaseImageVersion: ltsc2019 - steps: - - task: PowerShell@2 - inputs: - targetType: 'filePath' - filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 - displayName: 'install prereqs' - - - script: | - setlocal enabledelayedexpansion - powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" - endlocal - exit /B %ERRORLEVEL% - displayName: 'build base' - - - task: AzureCLI@2 - displayName: "Docker windows build for base image ltsc2019" - inputs: - azureSubscription: ${{ variables.armServiceConnectionName }} - scriptType: ps - scriptLocation: inlineScript - inlineScript: | - mkdir -p $(Build.ArtifactStagingDirectory)/windows - cd kubernetes/windows - - az --version - az account show - az account set -s ${{ variables.subscription }} - az acr login -n ${{ variables.containerRegistry }} - - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) -- job: build_windows_2022 - dependsOn: common - pool: - name: Azure-Pipelines-Windows-CI-Test-EO - variables: - windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - windowsBaseImageVersion: ltsc2022 - - steps: - - task: PowerShell@2 - inputs: - targetType: 'filePath' - filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 - displayName: 'install prereqs' - - - script: | - setlocal enabledelayedexpansion - powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" - endlocal - exit /B %ERRORLEVEL% - displayName: 'build base' - - - task: AzureCLI@2 - displayName: "Docker windows build for base image ltsc2022" - inputs: - azureSubscription: ${{ variables.armServiceConnectionName }} - scriptType: ps - scriptLocation: inlineScript - inlineScript: | - mkdir -p $(Build.ArtifactStagingDirectory)/windows - cd kubernetes/windows - - az --version - az account show - az account set -s ${{ variables.subscription }} - az acr login -n ${{ variables.containerRegistry }} - - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) --build-arg WINDOWS_VERSION=$(windowsBaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windowsBaseImageVersion) - -- job: build_windows_multi_arc +- job: build_windows dependsOn: - common - - build_windows_2019 - - build_windows_2022 pool: name: Azure-Pipelines-Windows-CI-Test-EO variables: windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - windows2019BaseImageVersion: ltsc2019 - windows2022BaseImageVersion: ltsc2022 - steps: - task: AzureCLI@2 displayName: "Docker windows build for multi-arc image" @@ -251,14 +168,15 @@ jobs: @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - docker pull ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) - docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - + if ("$(Build.Reason)" -ne "PullRequest") { + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) From fefc4821458f02e6e19c06683d292bcb162c59d9 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 07:48:08 -0700 Subject: [PATCH 15/25] merge into single job for perf evaluation --- .pipelines/azure_pipeline_dev.yaml | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index b524d948c..80f6891ca 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -19,8 +19,6 @@ variables: subscription: '9b96ebbd-c57a-42d1-bbe9-b69296e4c7fb' containerRegistry: 'containerinsightsprod' repoImageName: '${{ variables.containerRegistry }}.azurecr.io/public/azuremonitor/containerinsights/cidev' - windows2019BaseImageVersion: ltsc2019 - windows2022BaseImageVersion: ltsc2022 IS_PR: $[eq(variables['Build.Reason'], 'PullRequest')] jobs: @@ -150,7 +148,22 @@ jobs: name: Azure-Pipelines-Windows-CI-Test-EO variables: windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2019BaseImageVersion: ltsc2019 + windows2022BaseImageVersion: ltsc2022 steps: + - task: PowerShell@2 + inputs: + targetType: 'filePath' + filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 + displayName: 'install prereqs' + + - script: | + setlocal enabledelayedexpansion + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" + endlocal + exit /B %ERRORLEVEL% + displayName: 'build base' + - task: AzureCLI@2 displayName: "Docker windows build for multi-arc image" inputs: @@ -169,20 +182,17 @@ jobs: @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - if ("$(Build.Reason)" -ne "PullRequest") { - docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022' + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, false) From a3dcb8af3c50bbb26697da15bf92d02d111b0691 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 14:18:59 -0700 Subject: [PATCH 16/25] merge into single job for perf evaluation --- .pipelines/azure_pipeline_dev.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 80f6891ca..6ccd17f7f 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -183,9 +183,12 @@ jobs: docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) - docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) - + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) From 446eee720dbca7092724e1bf512f8150623c56ff Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 17:50:08 -0700 Subject: [PATCH 17/25] separate jobs for ltsc2019 & ltsc2022 --- .pipelines/azure_pipeline_dev.yaml | 92 ++++++++++++++++++++++++++++-- 1 file changed, 87 insertions(+), 5 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 6ccd17f7f..c66f2fd78 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -141,9 +141,95 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: build_windows +- job: build_windows_2019 dependsOn: - common + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2019BaseImageVersion: ltsc2019 + steps: + - task: PowerShell@2 + inputs: + targetType: 'filePath' + filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 + displayName: 'install prereqs' + + - script: | + setlocal enabledelayedexpansion + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" + endlocal + exit /B %ERRORLEVEL% + displayName: 'build base' + + - task: AzureCLI@2 + displayName: "Docker windows build for ltsc2019" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + } + +- job: build_windows_2022 + dependsOn: + - common + pool: + name: Azure-Pipelines-Windows-CI-Test-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2022BaseImageVersion: ltsc2022 + steps: + - task: PowerShell@2 + inputs: + targetType: 'filePath' + filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 + displayName: 'install prereqs' + + - script: | + setlocal enabledelayedexpansion + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" + endlocal + exit /B %ERRORLEVEL% + displayName: 'build base' + + - task: AzureCLI@2 + displayName: "Docker windows build for ltsc2022" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + } + +- job: build_windows + dependsOn: + - common + - build_windows_2019 + - build_windows_2022 pool: name: Azure-Pipelines-Windows-CI-Test-EO variables: @@ -181,11 +267,7 @@ jobs: @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) } From 86869f6690ddcb9542c215d54003dd544f611527 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 17:55:18 -0700 Subject: [PATCH 18/25] separate jobs for ltsc2019 & ltsc2022 --- .pipelines/azure_pipeline_dev.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index c66f2fd78..10ea715fe 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -225,7 +225,7 @@ jobs: docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) } -- job: build_windows +- job: build_windows_multi_arc dependsOn: - common - build_windows_2019 From e4b2fdbee1dc3e3bcd9c736f85c5d08fee7725cb Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 18:21:54 -0700 Subject: [PATCH 19/25] update dev image docker file & script --- kubernetes/windows/Dockerfile-dev-base-image | 3 +- .../build-and-publish-dev-docker-image.ps1 | 55 ++++++++++++++++--- .../build-and-publish-docker-image.ps1 | 1 - 3 files changed, 50 insertions(+), 9 deletions(-) diff --git a/kubernetes/windows/Dockerfile-dev-base-image b/kubernetes/windows/Dockerfile-dev-base-image index 6a758060a..3aca6ae20 100644 --- a/kubernetes/windows/Dockerfile-dev-base-image +++ b/kubernetes/windows/Dockerfile-dev-base-image @@ -1,4 +1,5 @@ -FROM mcr.microsoft.com/windows/servercore:ltsc2019 +ARG WINDOWS_VERSION= +FROM mcr.microsoft.com/windows/servercore:${WINDOWS_VERSION} MAINTAINER OMSContainers@microsoft.com LABEL vendor=Microsoft\ Corp \ com.microsoft.product="Azure Monitor for containers" diff --git a/kubernetes/windows/dockerbuild/build-and-publish-dev-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-dev-docker-image.ps1 index b87132218..f62851eac 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-dev-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-dev-docker-image.ps1 @@ -7,7 +7,8 @@ #> param( [Parameter(mandatory = $true)] - [string]$image + [string]$image, + [string]$windowsBaseImageVersion="" # Supported values are ltsc2019 or ltsc2022. Default is multi-arc image unless this value specified ) $currentdir = $PSScriptRoot @@ -55,10 +56,50 @@ Write-Host "changing directory to DockerFile dir: $dockerFileDir" Set-Location -Path $dockerFileDir $updateImage = ${imagerepo} + ":" + ${imageTag} -Write-Host "STAT:Triggering docker image build: $image" -docker build -t $updateImage --build-arg IMAGE_TAG=$imageTag -f Dockerfile-dev-image . -Write-Host "END:Triggering docker image build: $updateImage" +if ([string]::IsNullOrEmpty($windowsBaseImageVersion)) { + Write-Host "START:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" -Write-Host "STAT:pushing docker image : $updateImage" -docker push $updateImage -Write-Host "EnD:pushing docker image : $updateImage" + $WINDOWS_VERSION="ltsc2019" + $updateImageLTSC2019 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + Write-Host "START:Triggering docker image build for ltsc2019: $updateImageLTSC2019" + docker build --isolation=hyperv -t $updateImageLTSC2019 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag -f Dockerfile-dev-image . + Write-Host "END:Triggering docker image build for ltsc2019: $updateImageLTSC2019" + + $WINDOWS_VERSION="ltsc2022" + $updateImageLTSC2022 = ${imagerepo} + ":" + ${imageTag} + "-" + ${WINDOWS_VERSION} + Write-Host "START:Triggering docker image build for ltsc2022: $updateImageLTSC2022" + docker build --isolation=hyperv -t $updateImageLTSC2022 --build-arg WINDOWS_VERSION=$WINDOWS_VERSION --build-arg IMAGE_TAG=$imageTag -f Dockerfile-dev-image . + Write-Host "END:Triggering docker image build for ltsc2022: $updateImageLTSC2022" + + Write-Host "START:pushing docker image with base image ltsc2019 : $updateImageLTSC2019" + docker push $updateImageLTSC2019 + Write-Host "END:pushing docker image : $updateImageLTSC2019" + + Write-Host "START:pushing docker image with base image ltsc2022 : $updateImageLTSC2022" + docker push $updateImageLTSC2022 + Write-Host "END:pushing docker image : $updateImageLTSC2022" + + Write-Host "START:Triggering manigest for multi-arc docker image: $updateImage" + docker manifest create $updateImage $updateImageLTSC2019 $updateImageLTSC2022 + docker manifest push $updateImage + Write-Host "END:Triggering manifest for multi-arc docker image: $updateImage" + + Write-Host "END:Triggering multi-arc docker image build for ltsc2019 & ltsc2022: $image" + +} else { + + if (($windowsBaseImageVersion -eq "ltsc2019") -or ($windowsBaseImageVersion -eq "ltsc2022")) { + Write-Host "Provided baseimage version valid and supported: ${windowsBaseImageVersion}" + } else { + Write-Host "Provided baseimage version neither valid nor supported: ${windowsBaseImageVersion}" -ForegroundColor Red + exit 1 + } + + Write-Host "STAT:Triggering docker image build: $image with base image version: $windowsBaseImageVersion" + docker build -t $updateImage --build-arg WINDOWS_VERSION=$windowsBaseImageVersion --build-arg IMAGE_TAG=$imageTag -f Dockerfile-dev-image . + Write-Host "END:Triggering docker image build: $updateImage" + + Write-Host "STAT:pushing docker image : $updateImage" + docker push $updateImage + Write-Host "EnD:pushing docker image : $updateImage" +} diff --git a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 index 994fc0ec5..a5c78cc72 100644 --- a/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 +++ b/kubernetes/windows/dockerbuild/build-and-publish-docker-image.ps1 @@ -93,7 +93,6 @@ if ([string]::IsNullOrEmpty($windowsBaseImageVersion)) { exit 1 } - $WINDOWS_VERSION=$windowsBaseImageVersion Write-Host "START:Triggering docker image build: $image with baseImage version: ${windowsBaseImageVersion}" docker build --isolation=hyperv -t $updateImage --build-arg WINDOWS_VERSION=$windowsBaseImageVersion --build-arg IMAGE_TAG=$imageTag . Write-Host "END:Triggering docker image build: $updateImage" From f9b04799b07777ad165e30007a42392c12f9b60c Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Thu, 5 May 2022 18:37:21 -0700 Subject: [PATCH 20/25] remove unnecessary task --- .pipelines/azure_pipeline_dev.yaml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.pipelines/azure_pipeline_dev.yaml b/.pipelines/azure_pipeline_dev.yaml index 10ea715fe..c4723e8e1 100644 --- a/.pipelines/azure_pipeline_dev.yaml +++ b/.pipelines/azure_pipeline_dev.yaml @@ -237,19 +237,6 @@ jobs: windows2019BaseImageVersion: ltsc2019 windows2022BaseImageVersion: ltsc2022 steps: - - task: PowerShell@2 - inputs: - targetType: 'filePath' - filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 - displayName: 'install prereqs' - - - script: | - setlocal enabledelayedexpansion - powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" - endlocal - exit /B %ERRORLEVEL% - displayName: 'build base' - - task: AzureCLI@2 displayName: "Docker windows build for multi-arc image" inputs: From 342253ff01fd7ccdf5050c4c527035c35b61977a Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Fri, 6 May 2022 00:09:09 -0700 Subject: [PATCH 21/25] update prod pipeline yaml for windows multi-arc image --- .pipelines/azure_pipeline_prod.yaml | 96 +++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 12 deletions(-) diff --git a/.pipelines/azure_pipeline_prod.yaml b/.pipelines/azure_pipeline_prod.yaml index 28071786d..a4a0aff97 100644 --- a/.pipelines/azure_pipeline_prod.yaml +++ b/.pipelines/azure_pipeline_prod.yaml @@ -95,7 +95,7 @@ jobs: pool: name: Azure-Pipelines-CI-Prod-EO variables: - linuxImagetag: $[ dependencies.common.outputs['setup.linuxImagetag'] ] + linuxImagetag: $[ dependencies.common.outputs['setup.linuxImagetag'] ] steps: - task: AzureCLI@2 @@ -146,13 +146,14 @@ jobs: pathToPublish: '$(Build.ArtifactStagingDirectory)' artifactName: drop -- job: build_windows - dependsOn: common +- job: build_windows_2019 + dependsOn: + - common pool: name: Azure-Pipelines-Windows-CI-Prod-EO variables: - windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] - + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2019BaseImageVersion: ltsc2019 steps: - task: PowerShell@2 inputs: @@ -168,7 +169,7 @@ jobs: displayName: 'build base' - task: AzureCLI@2 - displayName: "Docker windows build" + displayName: "Docker windows build for ltsc2019" inputs: azureSubscription: ${{ variables.armServiceConnectionName }} scriptType: ps @@ -182,28 +183,99 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - @{"image.name"="${{ variables.repoImageNameWindows }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + } + +- job: build_windows_2022 + dependsOn: + - common + pool: + name: Azure-Pipelines-Windows-CI-Prod-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2022BaseImageVersion: ltsc2022 + steps: + - task: PowerShell@2 + inputs: + targetType: 'filePath' + filePath: $(System.DefaultWorkingDirectory)/scripts/build/windows/install-build-pre-requisites.ps1 + displayName: 'install prereqs' + + - script: | + setlocal enabledelayedexpansion + powershell.exe -ExecutionPolicy Unrestricted -NoProfile -WindowStyle Hidden -File "build\windows\Makefile.ps1" + endlocal + exit /B %ERRORLEVEL% + displayName: 'build base' - docker build --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag) . + - task: AzureCLI@2 + displayName: "Docker windows build for ltsc2022" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageNameWindows }}:$(windowsImageTag) + docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) } +- job: build_windows_multi_arc + dependsOn: + - common + - build_windows_2019 + - build_windows_2022 + pool: + name: Azure-Pipelines-Windows-CI-Prod-EO + variables: + windowsImageTag: $[ dependencies.common.outputs['setup.windowsImageTag'] ] + windows2019BaseImageVersion: ltsc2019 + windows2022BaseImageVersion: ltsc2022 + steps: + - task: AzureCLI@2 + displayName: "Docker windows build for multi-arc image" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: ps + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/windows + cd kubernetes/windows + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + + if ("$(Build.Reason)" -ne "PullRequest") { + docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, true) inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019' + DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022' - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' condition: eq(variables.IS_PR, false) inputs: BuildDropPath: '$(Build.ArtifactStagingDirectory)/windows' - DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, ${{ variables.repoImageNameWindows }}:$(windowsImageTag)' - + DockerImagesToScan: 'mcr.microsoft.com/windows/servercore:ltsc2019, mcr.microsoft.com/windows/servercore:ltsc2022, ${{ variables.repoImageName }}:$(windowsImageTag)' - task: PublishBuildArtifacts@1 inputs: pathToPublish: '$(Build.ArtifactStagingDirectory)' From 2ab089c1a19a969b5ab9e185850c73826b0f149d Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Fri, 6 May 2022 13:01:47 -0700 Subject: [PATCH 22/25] test yamls for ltsc2019 & ltsc2022 --- README.md | 7 +++ .../win-prometheus-ref-app-ltsc2019.yml | 50 +++++++++++++++++++ .../win-prometheus-ref-app-ltsc2022.yml | 50 +++++++++++++++++++ test/scenario/log-app-win-ltsc2019.yml | 50 +++++++++++++++++++ test/scenario/log-app-win-ltsc2022.yml | 50 +++++++++++++++++++ 5 files changed, 207 insertions(+) create mode 100644 test/prometheus-scraping/win-prometheus-ref-app-ltsc2019.yml create mode 100644 test/prometheus-scraping/win-prometheus-ref-app-ltsc2022.yml create mode 100644 test/scenario/log-app-win-ltsc2019.yml create mode 100644 test/scenario/log-app-win-ltsc2022.yml diff --git a/README.md b/README.md index 33b7ebc0b..6e51d256b 100644 --- a/README.md +++ b/README.md @@ -261,6 +261,13 @@ For the subsequent builds, you can just run - ``` .\build-and-publish-dev-docker-image.ps1 -image /: # trigger build code and image and publish docker hub or acr +By default, multi-arc docker image will be built, but if you want generate test image either with ltsc2019 or ltsc2022 base image, then you can follow the instructions below + +For building image with base image version ltsc2019 +.\build-and-publish-dev-docker-image.ps1 -image /: -windowsBaseImageVersion ltsc2019 + +For building image with base image version ltsc2022 +.\build-and-publish-dev-docker-image.ps1 -image /: -windowsBaseImageVersion ltsc2022 ``` ###### Note - If you have changes in setup.ps1 and want to test those changes, uncomment the section consisting of setup.ps1 in the Dockerfile-dev-image file. diff --git a/test/prometheus-scraping/win-prometheus-ref-app-ltsc2019.yml b/test/prometheus-scraping/win-prometheus-ref-app-ltsc2019.yml new file mode 100644 index 000000000..6dde6346c --- /dev/null +++ b/test/prometheus-scraping/win-prometheus-ref-app-ltsc2019.yml @@ -0,0 +1,50 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: win-prometheus-reference-app-ltsc2019 +spec: + selector: + matchLabels: + app: win-prometheus-reference-app-ltsc2019 + replicas: 1 + template: + metadata: + annotations: + prometheus.io/port: '2112' + prometheus.io/scrape: 'true' + labels: + app: win-prometheus-reference-app-ltsc2019 + spec: + containers: + - name: win-prometheus-reference-app-golang + image: mcr.microsoft.com/azuremonitor/containerinsights/cidev:win-prometheus-reference-app-golang + env: + - name: RUN_PERF_TEST + value: "false" + - name: SCRAPE_INTERVAL + value: "60" + - name: METRIC_COUNT + value: "125000" + ports: + - containerPort: 2112 + protocol: TCP + - containerPort: 2113 + protocol: TCP + - name: win-prometheus-reference-app-python + image: mcr.microsoft.com/azuremonitor/containerinsights/cidev:win-prometheus-reference-app-python + ports: + - containerPort: 2114 + protocol: TCP + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - windows + - key: kubernetes.azure.com/os-sku + operator: NotIn + values: + - Windows2022 \ No newline at end of file diff --git a/test/prometheus-scraping/win-prometheus-ref-app-ltsc2022.yml b/test/prometheus-scraping/win-prometheus-ref-app-ltsc2022.yml new file mode 100644 index 000000000..259a959ff --- /dev/null +++ b/test/prometheus-scraping/win-prometheus-ref-app-ltsc2022.yml @@ -0,0 +1,50 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: win-prometheus-reference-app-ltsc2022 +spec: + selector: + matchLabels: + app: win-prometheus-reference-app-ltsc2022 + replicas: 1 + template: + metadata: + annotations: + prometheus.io/port: '2112' + prometheus.io/scrape: 'true' + labels: + app: win-prometheus-reference-app-ltsc2022 + spec: + containers: + - name: win-prometheus-reference-app-golang + image: mcr.microsoft.com/azuremonitor/containerinsights/cidev:win-prometheus-reference-app-golang + env: + - name: RUN_PERF_TEST + value: "false" + - name: SCRAPE_INTERVAL + value: "60" + - name: METRIC_COUNT + value: "125000" + ports: + - containerPort: 2112 + protocol: TCP + - containerPort: 2113 + protocol: TCP + - name: win-prometheus-reference-app-python + image: mcr.microsoft.com/azuremonitor/containerinsights/cidev:win-prometheus-reference-app-python + ports: + - containerPort: 2114 + protocol: TCP + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - windows + - key: kubernetes.azure.com/os-sku + operator: In + values: + - Windows2022 \ No newline at end of file diff --git a/test/scenario/log-app-win-ltsc2019.yml b/test/scenario/log-app-win-ltsc2019.yml new file mode 100644 index 000000000..67381fa35 --- /dev/null +++ b/test/scenario/log-app-win-ltsc2019.yml @@ -0,0 +1,50 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: windows-log-ltsc2019 + labels: + name: windows-log-ltsc2019 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: second-log-app + namespace: windows-log-ltsc2019 +spec: + replicas: 1 + selector: + matchLabels: + app: second-log-app + template: + metadata: + labels: + app: second-log-app + spec: + volumes: + - name: html + emptyDir: {} + containers: + - name: second-log-app + image: mcr.microsoft.com/windows/servercore:ltsc2019 + command: ["powershell", "-c"] + args: + - "$counter = 1; For(;;) { echo $counter; $counter++; Start-Sleep -Seconds 1; }" + env: + - name: RANOMD_ENV_VAR_1 + value: "#123312'@$98" + - name: RANOMD_ENV_VAR_2 + value: "test" + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - windows + - key: kubernetes.azure.com/os-sku + operator: NotIn + values: + - Windows2022 \ No newline at end of file diff --git a/test/scenario/log-app-win-ltsc2022.yml b/test/scenario/log-app-win-ltsc2022.yml new file mode 100644 index 000000000..bdbddbaa4 --- /dev/null +++ b/test/scenario/log-app-win-ltsc2022.yml @@ -0,0 +1,50 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: windows-log-ltsc2022 + labels: + name: windows-log-ltsc2022 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: second-log-app + namespace: windows-log-ltsc2022 +spec: + replicas: 1 + selector: + matchLabels: + app: second-log-app + template: + metadata: + labels: + app: second-log-app + spec: + volumes: + - name: html + emptyDir: {} + containers: + - name: second-log-app + image: mcr.microsoft.com/windows/servercore:ltsc2022 + command: ["powershell", "-c"] + args: + - "$counter = 1; For(;;) { echo $counter; $counter++; Start-Sleep -Seconds 1; }" + env: + - name: RANOMD_ENV_VAR_1 + value: "#123312'@$98" + - name: RANOMD_ENV_VAR_2 + value: "test" + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: kubernetes.io/os + operator: In + values: + - windows + - key: kubernetes.azure.com/os-sku + operator: In + values: + - Windows2022 From 32939633fddeb40c68eca998251f47e35cbd5757 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Fri, 6 May 2022 14:01:27 -0700 Subject: [PATCH 23/25] fix pr checker fail --- .github/workflows/pr-checker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-checker.yml b/.github/workflows/pr-checker.yml index 91e81dc16..036c7edd3 100644 --- a/.github/workflows/pr-checker.yml +++ b/.github/workflows/pr-checker.yml @@ -91,7 +91,7 @@ jobs: run: cd ./build/windows/ && & .\Makefile.ps1 - name: Create-docker-image run: | - cd ./kubernetes/windows/ && docker build . --file Dockerfile -t $env:IMAGETAG --build-arg IMAGE_TAG=$env:IMAGETAG_TELEMETRY + cd ./kubernetes/windows/ && docker build . --file Dockerfile -t $env:IMAGETAG --build-arg WINDOWS_VERSION=ltsc2019 --build-arg IMAGE_TAG=$env:IMAGETAG_TELEMETRY - name: List-docker-images run: docker images --digests --all - + From 74e7710601646f84d45acd5c84ff5f4c7e84fa51 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Mon, 9 May 2022 11:35:42 -0700 Subject: [PATCH 24/25] fix repoImageWindows path in windows pipeline --- .pipelines/azure_pipeline_prod.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.pipelines/azure_pipeline_prod.yaml b/.pipelines/azure_pipeline_prod.yaml index a4a0aff97..bdf32e348 100644 --- a/.pipelines/azure_pipeline_prod.yaml +++ b/.pipelines/azure_pipeline_prod.yaml @@ -183,9 +183,9 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) + docker push ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) } - job: build_windows_2022 @@ -225,9 +225,9 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . if ("$(Build.Reason)" -ne "PullRequest") { - docker push ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker push ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) } - job: build_windows_multi_arc @@ -257,11 +257,11 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - @{"image.name"="${{ variables.repoImageName }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + @{"image.name"="${{ variables.repoImageNameWindows }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json if ("$(Build.Reason)" -ne "PullRequest") { - docker manifest create ${{ variables.repoImageName }}:$(windowsImageTag) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageName }}:$(windowsImageTag)-$(windows2022BaseImageVersion) - docker manifest push ${{ variables.repoImageName }}:$(windowsImageTag) + docker manifest create ${{ variables.repoImageNameWindows }}:$(windowsImageTag) ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) + docker manifest push ${{ variables.repoImageNameWindows }}:$(windowsImageTag) } - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 displayName: 'Generation Task' From f628e6abe8134529f9aa698c1871827453bbd092 Mon Sep 17 00:00:00 2001 From: Ganga Mahesh Siddem Date: Mon, 9 May 2022 13:06:59 -0700 Subject: [PATCH 25/25] remove passing imagetag for prod --- .pipelines/azure_pipeline_prod.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.pipelines/azure_pipeline_prod.yaml b/.pipelines/azure_pipeline_prod.yaml index bdf32e348..8239a7058 100644 --- a/.pipelines/azure_pipeline_prod.yaml +++ b/.pipelines/azure_pipeline_prod.yaml @@ -183,7 +183,7 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2019BaseImageVersion) . if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2019BaseImageVersion) } @@ -225,7 +225,7 @@ jobs: az account set -s ${{ variables.subscription }} az acr login -n ${{ variables.containerRegistry }} - docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) --build-arg IMAGE_TAG=$(windowsImageTag) . + docker build --isolation=hyperv --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) --build-arg WINDOWS_VERSION=$(windows2022BaseImageVersion) . if ("$(Build.Reason)" -ne "PullRequest") { docker push ${{ variables.repoImageNameWindows }}:$(windowsImageTag)-$(windows2022BaseImageVersion) }