11parameters :
22- name : arch
33 type : string
4+ default : " "
5+ values :
6+ - amd64
7+ - arm64
48
59- name : os
610 type : string
11+ default : " "
12+ values :
13+ - windows
14+ - linux
715
816- name : images
917 type : object
1927 templateContext :
2028 authenticatedContainerRegistries :
2129 - serviceConnection : $(ACR_SERVICECONNECTION)
30+ ${{ if eq(variables.Agent.OSArchitecture, 'ARM' }} :
31+ buildArch : arm64
32+ ${{ else }} :
33+ buildArch : amd64
34+ ${{ if eq(variables.Agent.OS, 'Linux') }} :
35+ buildOs : linux
36+ ${{ else }} :
37+ buildOs : windows
2238
2339 steps :
2440 - checkout : self
3046 - bash : |
3147 set -e
3248
49+ echo >&2 "##vso[task.setvariable variable=${VAR_ID};]$VAR_ID"
50+ displayName: "Get Image ID"
51+ env:
52+ VAR_ID: ${{ image }}_${{ parameters.os }}_${{ parameters.arch }}
53+
54+ - bash : |
55+ set -e
56+
57+ VAR_ID="${IMAGE}_${OS}_${ARCH}"
58+
3359 BUILD_CONTEXT=$(make "$MAKE_BUILD_CONTEXT")
3460 echo >&2 "##vso[task.setvariable variable=BUILD_CONTEXT_${VAR_ID};]$BUILD_CONTEXT"
3561
@@ -46,16 +72,34 @@ jobs:
4672 echo >&2 "##vso[task.setvariable variable=EXTRA_BUILD_ARGS_${VAR_ID};]$EXTRA_BUILD_ARGS"
4773 displayName: "Get Image Build Data"
4874 env:
49- VAR_ID: ${{ image }}
75+ IMAGE: ${{ image }}
76+ OS: ${{ parameters.os }}
77+ ARCH: ${{ parameters.arch }}
78+ PLATFORM: ${{ parameters.os }}/${{ parameters.arch }}
5079 MAKE_IMAGE_TAG: ${{ image }}-image-tag
5180 MAKE_BUILD_CONTEXT: ${{ image }}-image-build-context
5281 MAKE_IMAGE_NAME_AND_TAG: ${{ image }}-image-name-and-tag
5382 MAKE_DOCKERFILE_PATH: ${{ image }}-dockerfile-path
5483 MAKE_EXTRA_BUILD_ARGS: ${{ image }}-docker-build-args
5584
56- - template : container-template.steps.yaml
57- parameters :
58- name : ${{ image }}
59- os : ${{ parameters.os }}
60- arch : ${{ parameters.arch }}
61- platform : ${{ parameters.os }}/${{ parameters.arch }}
85+ - task : 1ES.BuildContainerImage@1
86+ retryCountOnTaskFailure : 3
87+ inputs :
88+ image : $(IMAGE_NAME_AND_TAG_${{ image }}_${{ parameters.os }}_${{ parameters.arch }})
89+ dockerfile : $(DOCKERFILE_PATH_${{ image }}_${{ parameters.os }}_${{ parameters.arch }})
90+ path : $(Build.SourcesDirectory)
91+ buildArguments : |
92+ --platform "${{ templateContext.targetOs }}/${{ templateContext.targetArch }}" \
93+ --build-arg ARCH="${{ templateContext.buildArch }}" \
94+ --build-arg OS="${{ templateContext.buildOs }}" \
95+ --build-arg VERSION="$(IMAGE_PLATFORM_TAG_${{ image }}_${{ parameters.os }}_${{ parameters.arch }})" \
96+ --target "${{ parameters.os }}" $(EXTRA_BUILD_ARGS_${{ image }}_${{ parameters.os }}_${{ parameters.arch }})
97+ enableNetwork : true
98+ enablePull : false
99+ enableCache : true
100+ useBuildKit : true
101+
102+ - task : 1ES.PushContainerImage@1
103+ condition : ${{ eq(parameters.os, 'windows') }}
104+ inputs :
105+ image : $(IMAGE_NAME_AND_TAG_${{ image }}_${{ parameters.os }}_${{ parameters.arch }})
0 commit comments