From dae0eb385a7e8312e59ce18b7f2f8306be6d77fc Mon Sep 17 00:00:00 2001 From: Amol Agrawal Date: Wed, 6 Apr 2022 13:37:40 -0700 Subject: [PATCH 1/2] build prod --- .pipelines/azure_pipeline_prod.yaml | 286 +++++++++++------- .../ContainerInsights.Windows.Parameters.json | 68 +++++ .../RolloutSpecs/RolloutSpecs.json | 13 +- .../ServiceModels/Public.ServiceModel.json | 15 +- 4 files changed, 273 insertions(+), 109 deletions(-) create mode 100644 deployment/multiarch-agent-deployment/ServiceGroupRoot/Parameters/ContainerInsights.Windows.Parameters.json diff --git a/.pipelines/azure_pipeline_prod.yaml b/.pipelines/azure_pipeline_prod.yaml index e1c3a9db2..f536ba55b 100644 --- a/.pipelines/azure_pipeline_prod.yaml +++ b/.pipelines/azure_pipeline_prod.yaml @@ -21,106 +21,190 @@ variables: armServiceConnectionName: 'ci-1es-acr-connection-prod' subscription: '30c56c3a-54da-46ea-b004-06eb33432687' containerRegistry: 'containerinsightsbuild' - repoImageName: '${{ variables.containerRegistry }}.azurecr.io/official/linux' + repoImageNameLinux: '${{ variables.containerRegistry }}.azurecr.io/official/linux' + repoImageNameWindows: '${{ variables.containerRegistry }}.azurecr.io/official/windows' IS_PR: $[eq(variables['Build.Reason'], 'PullRequest')] -steps: -- bash: | - commit=$(git rev-parse --short HEAD) - echo "##vso[task.setvariable variable=commit;]$commit" - - datetime=$(date +'%m%d%Y') - echo "##vso[task.setvariable variable=datetime;]$datetime" - - cd $(Build.SourcesDirectory)/deployment/multiarch-agent-deployment/ServiceGroupRoot/Scripts - tar -czvf ../artifacts.tar.gz pushAgentToAcr.sh - - cd $(Build.SourcesDirectory)/deployment/arc-k8s-extension/ServiceGroupRoot/Scripts - tar -czvf ../artifacts.tar.gz ../../../../charts/azuremonitor-containers/ pushChartToAcr.sh - -- task: CopyFiles@2 - displayName: "Copy ev2 deployment artifacts" - inputs: - SourceFolder: "$(Build.SourcesDirectory)/deployment" - Contents: | - **/* - TargetFolder: '$(Build.ArtifactStagingDirectory)/build' - -- task: CopyFiles@2 - displayName: "Copy ev2 deployment scripts" - inputs: - SourceFolder: "$(Build.SourcesDirectory)/.pipelines" - Contents: | - **/*.sh - TargetFolder: '$(Build.ArtifactStagingDirectory)/build' - -- task: CopyFiles@2 - displayName: "Copy ev2 deployment scripts" - inputs: - SourceFolder: "$(Build.SourcesDirectory)/kubernetes" - Contents: | - *.yaml - TargetFolder: '$(Build.ArtifactStagingDirectory)/build' - -- task: CopyFiles@2 - displayName: "Copy ev2 deployment scripts" - inputs: - SourceFolder: "$(Build.SourcesDirectory)/charts" - Contents: | - **/* - TargetFolder: '$(Build.ArtifactStagingDirectory)/build' - -- task: CopyFiles@2 - displayName: "Copy ev2 deployment scripts" - inputs: - SourceFolder: "$(Build.SourcesDirectory)/test/e2e" - Contents: | - *.yaml - TargetFolder: '$(Build.ArtifactStagingDirectory)/build' - -- task: AzureCLI@2 - displayName: "Docker multi-arch linux build" - inputs: - azureSubscription: ${{ variables.armServiceConnectionName }} - scriptType: bash - scriptLocation: inlineScript - inlineScript: | - - sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - - docker buildx create --name testbuilder - docker buildx use testbuilder - - az --version - az account show - az account set -s ${{ variables.subscription }} - az acr login -n ${{ variables.containerRegistry }} - - if [ "$(Build.Reason)" != "PullRequest" ]; then - docker buildx build --platform linux/amd64,linux/arm64 --tag ${{ variables.repoImageName }}:ciprod-$(datetime)-$(commit) -f kubernetes/linux/Dockerfile.multiarch --metadata-file $(Build.ArtifactStagingDirectory)/metadata.json --push . - - docker pull ${{ variables.repoImageName }}:ciprod-$(datetime)-$(commit) - else - docker buildx build --platform linux/amd64,linux/arm64 --tag ${{ variables.repoImageName }}:ciprod-$(datetime)-$(commit) -f kubernetes/linux/Dockerfile.multiarch --metadata-file $(Build.ArtifactStagingDirectory)/metadata.json . - fi - - -- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'Generation Task' - condition: eq(variables.IS_PR, true) - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)' - DockerImagesToScan: 'golang:1.15.14, ubuntu:18.04' - -- task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'Generation Task' - condition: eq(variables.IS_PR, false) - inputs: - BuildDropPath: '$(Build.ArtifactStagingDirectory)' - DockerImagesToScan: 'golang:1.15.14, ubuntu:18.04, ${{ variables.repoImageName }}:ciprod-$(datetime)-$(commit)' - -- task: PublishBuildArtifacts@1 - inputs: - pathToPublish: '$(Build.ArtifactStagingDirectory)' - artifactName: drop \ No newline at end of file +jobs: +- job: common + pool: + name: Azure-Pipelines-CI-Prod-EO + steps: + - bash: | + commit=$(git rev-parse --short HEAD) + datetime=$(date +'%m%d%Y') + linuxImagetag="ciprod-$datetime"-"$commit" + windowsImageTag=ciprod-win-"$datetime"-"$commit" + echo "##vso[task.setvariable variable=linuxImagetag;isOutput=true]$linuxImagetag" + echo "##vso[task.setvariable variable=windowsImageTag;isOutput=true]$windowsImageTag" + + cd $(Build.SourcesDirectory)/deployment/multiarch-agent-deployment/ServiceGroupRoot/Scripts + tar -czvf ../artifacts.tar.gz pushAgentToAcr.sh + + cd $(Build.SourcesDirectory)/deployment/arc-k8s-extension/ServiceGroupRoot/Scripts + tar -czvf ../artifacts.tar.gz ../../../../charts/azuremonitor-containers/ pushChartToAcr.sh + name: setup + + - task: CopyFiles@2 + displayName: "Copy ev2 deployment artifacts" + inputs: + SourceFolder: "$(Build.SourcesDirectory)/deployment" + Contents: | + **/* + TargetFolder: '$(Build.ArtifactStagingDirectory)/build' + + - task: CopyFiles@2 + displayName: "Copy ev2 deployment scripts" + inputs: + SourceFolder: "$(Build.SourcesDirectory)/.pipelines" + Contents: | + **/*.sh + TargetFolder: '$(Build.ArtifactStagingDirectory)/build' + + - task: CopyFiles@2 + displayName: "Copy ev2 deployment scripts" + inputs: + SourceFolder: "$(Build.SourcesDirectory)/kubernetes" + Contents: | + *.yaml + TargetFolder: '$(Build.ArtifactStagingDirectory)/build' + + - task: CopyFiles@2 + displayName: "Copy ev2 deployment scripts" + inputs: + SourceFolder: "$(Build.SourcesDirectory)/charts" + Contents: | + **/* + TargetFolder: '$(Build.ArtifactStagingDirectory)/build' + + - task: CopyFiles@2 + displayName: "Copy ev2 deployment scripts" + inputs: + SourceFolder: "$(Build.SourcesDirectory)/test/e2e" + Contents: | + *.yaml + TargetFolder: '$(Build.ArtifactStagingDirectory)/build' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: build_linux + dependsOn: common + pool: + name: Azure-Pipelines-CI-Prod-EO + variables: + linuxImagetag: $[ dependencies.common.outputs['setup.linuxImagetag'] ] + + steps: + - task: AzureCLI@2 + displayName: "Docker multi-arch linux build" + inputs: + azureSubscription: ${{ variables.armServiceConnectionName }} + scriptType: bash + scriptLocation: inlineScript + inlineScript: | + mkdir -p $(Build.ArtifactStagingDirectory)/linux + + sudo apt-get update && sudo apt-get -y install qemu binfmt-support qemu-user-static + docker run --rm --privileged multiarch/qemu-user-static --reset -p yes + + docker buildx create --name testbuilder + docker buildx use testbuilder + + az --version + az account show + az account set -s ${{ variables.subscription }} + az acr login -n ${{ variables.containerRegistry }} + + if [ "$(Build.Reason)" != "PullRequest" ]; then + docker buildx build --platform linux/amd64,linux/arm64 --tag ${{ variables.repoImageNameLinux }}:$(linuxImagetag) -f kubernetes/linux/Dockerfile.multiarch --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json --push . + + docker pull ${{ variables.repoImageNameLinux }}:$(linuxImagetag) + else + docker buildx build --platform linux/amd64,linux/arm64 --tag ${{ variables.repoImageNameLinux }}:$(linuxImagetag) -f kubernetes/linux/Dockerfile.multiarch --metadata-file $(Build.ArtifactStagingDirectory)/linux/metadata.json . + fi + + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generation Task' + condition: eq(variables.IS_PR, true) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: 'golang:1.15.14, ubuntu:18.04' + + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generation Task' + condition: eq(variables.IS_PR, false) + inputs: + BuildDropPath: '$(Build.ArtifactStagingDirectory)/linux' + DockerImagesToScan: 'golang:1.15.14, ubuntu:18.04, ${{ variables.repoImageNameLinux }}:$(linuxImagetag)' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop + +- job: build_windows + dependsOn: common + pool: + name: Azure-Pipelines-Windows-CI-Prod-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" + 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.repoImageNameWindows }}:$(windowsImageTag)"} | ConvertTo-Json -Compress | Out-File -Encoding ascii $(Build.ArtifactStagingDirectory)/windows/metadata.json + + docker build --tag ${{ variables.repoImageNameWindows }}:$(windowsImageTag) . + + if ("$(Build.Reason)" -ne "PullRequest") { + docker push ${{ variables.repoImageNameWindows }}:$(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' + + - 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)' + + - task: PublishBuildArtifacts@1 + inputs: + pathToPublish: '$(Build.ArtifactStagingDirectory)' + artifactName: drop \ No newline at end of file diff --git a/deployment/multiarch-agent-deployment/ServiceGroupRoot/Parameters/ContainerInsights.Windows.Parameters.json b/deployment/multiarch-agent-deployment/ServiceGroupRoot/Parameters/ContainerInsights.Windows.Parameters.json new file mode 100644 index 000000000..cfa945e5d --- /dev/null +++ b/deployment/multiarch-agent-deployment/ServiceGroupRoot/Parameters/ContainerInsights.Windows.Parameters.json @@ -0,0 +1,68 @@ +{ + "$schema": "http://schema.express.azure.com/schemas/2015-01-01-alpha/RolloutParameters.json", + "contentVersion": "1.0.0.0", + "wait": [ + { + "name": "waitSdpBakeTime", + "properties": { + "duration": "PT24H" + } + } + ], + "shellExtensions": [ + { + "name": "PushAgentToACR", + "type": "ShellExtensionType", + "properties": { + "maxexecutiontime": "PT1H" + }, + "package": { + "reference": { + "path": "artifacts.tar.gz" + } + }, + "launch": { + "command": [ + "/bin/bash", + "pushAgentToAcr.sh" + ], + "environmentVariables": [ + { + "name": "ACR_NAME", + "value": "__ACR_NAME__" + }, + { + "name": "AGENT_RELEASE", + "value": "__AGENT_RELEASE__" + }, + { + "name": "AGENT_IMAGE_TAG_SUFFIX", + "value": "__AGENT_IMAGE_TAG_SUFFIX__" + }, + { + "name": "AGENT_IMAGE_FULL_PATH", + "value": "public/azuremonitor/containerinsights/__AGENT_RELEASE__:win-__AGENT_RELEASE____AGENT_IMAGE_TAG_SUFFIX__" + }, + { + "name": "CDPX_REGISTRY", + "value": "__CDPX_WINDOWS_REGISTRY__" + }, + { + "name": "CDPX_REPO_NAME", + "value": "__CDPX_WINDOWS_REPO_NAME__" + }, + { + "name": "CDPX_TAG", + "value": "__CDPX_WINDOWS_TAG__" + } + ], + "identity": { + "type": "userAssigned", + "userAssignedIdentities": [ + "__MANAGED_IDENTITY__" + ] + } + } + } + ] + } \ No newline at end of file diff --git a/deployment/multiarch-agent-deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json b/deployment/multiarch-agent-deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json index 250878590..91bc42ba1 100644 --- a/deployment/multiarch-agent-deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json +++ b/deployment/multiarch-agent-deployment/ServiceGroupRoot/RolloutSpecs/RolloutSpecs.json @@ -2,8 +2,8 @@ "$schema": "https://ev2schema.azure.net/schemas/2020-01-01/rolloutSpecification.json", "ContentVersion": "1.0.0.0", "RolloutMetadata": { - "ServiceModelPath": "ServiceModels//Public.ServiceModel.json", - "ScopeBindingsPath": "ScopeBindings//Public.ScopeBindings.json", + "ServiceModelPath": "ServiceModels//Public.ServiceModel.json", + "ScopeBindingsPath": "ScopeBindings//Public.ScopeBindings.json", "Name": "ContainerInsightsAgent", "RolloutType": "Major", "BuildSource": { @@ -15,7 +15,7 @@ "Email": { "To": "omscontainers@microsoft.com" } - } + } }, "OrchestratedSteps": [ { @@ -24,6 +24,13 @@ "targetName": "PushLinuxAgent", "actions": [ "Shell/PushAgentToACR" ], "dependsOn": [ ] + }, + { + "name": "PushWindowsAgent", + "targetType": "ServiceResource", + "targetName": "PushWindowsAgent", + "actions": [ "Shell/PushAgentToACR" ], + "dependsOn": [ ] } ] } \ No newline at end of file diff --git a/deployment/multiarch-agent-deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json b/deployment/multiarch-agent-deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json index c3b00340a..cc632446c 100644 --- a/deployment/multiarch-agent-deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json +++ b/deployment/multiarch-agent-deployment/ServiceGroupRoot/ServiceModels/Public.ServiceModel.json @@ -28,24 +28,29 @@ ] } ], - "ServiceResourceGroups": [ + "ServiceResourceGroups": [ { "AzureResourceGroupName": "ContainerInsights-MultiArch-Agent-Release", "Location": "eastus2", "InstanceOf": "CI-Agent-ServiceResourceGroupDefinition", - "AzureSubscriptionId": "30c56c3a-54da-46ea-b004-06eb33432687", + "AzureSubscriptionId": "30c56c3a-54da-46ea-b004-06eb33432687", "ScopeTags": [ { "Name": "Global" } - ], + ], "ServiceResources": [ { "Name": "PushLinuxAgent", "InstanceOf": "ShellExtension", "RolloutParametersPath": "Parameters\\ContainerInsights.Linux.Parameters.json" + }, + { + "Name": "PushWindowsAgent", + "InstanceOf": "ShellExtension", + "RolloutParametersPath": "Parameters\\ContainerInsights.Windows.Parameters.json" } ] - } + } ] - } \ No newline at end of file + } \ No newline at end of file From 56aa9b89d5ce5736009058c27cfeee9c5c31b0d2 Mon Sep 17 00:00:00 2001 From: Amol Agrawal Date: Thu, 7 Apr 2022 15:25:53 -0700 Subject: [PATCH 2/2] update tag --- .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 f536ba55b..28071786d 100644 --- a/.pipelines/azure_pipeline_prod.yaml +++ b/.pipelines/azure_pipeline_prod.yaml @@ -33,8 +33,8 @@ jobs: - bash: | commit=$(git rev-parse --short HEAD) datetime=$(date +'%m%d%Y') - linuxImagetag="ciprod-$datetime"-"$commit" - windowsImageTag=ciprod-win-"$datetime"-"$commit" + linuxImagetag=ciprod-"$datetime"-"$commit" + windowsImageTag=win-ciprod-"$datetime"-"$commit" echo "##vso[task.setvariable variable=linuxImagetag;isOutput=true]$linuxImagetag" echo "##vso[task.setvariable variable=windowsImageTag;isOutput=true]$windowsImageTag"