4747# │ ├── acrRepoV2.json
4848# ├── scripts
4949# │ ├── BuildGoldenContainer.sh
50+ # │ ├── BuildContainerCommonSteps.sh
5051# ├── Dockerfile-Initial
5152# ├── azurelinuxlocal.repo
5253
@@ -189,28 +190,6 @@ function validate_inputs {
189190 fi
190191}
191192
192- function initialization {
193- echo " +++ Initialization"
194- if [ " $PUBLISHING_LEVEL " = " preview" ]; then
195- GOLDEN_IMAGE_NAME=${ACR} .azurecr.io/${REPO_PREFIX} /${REPOSITORY}
196- elif [ " $PUBLISHING_LEVEL " = " development" ]; then
197- GOLDEN_IMAGE_NAME=${ACR} .azurecr.io/${REPOSITORY}
198- fi
199-
200- BASE_IMAGE_NAME=${BASE_IMAGE_NAME_FULL%:* } # mcr.microsoft.com/azurelinux/base/core
201- BASE_IMAGE_TAG=${BASE_IMAGE_NAME_FULL#*: } # 3.0
202- AZURE_LINUX_VERSION=${BASE_IMAGE_TAG% .* } # 3.0
203- DISTRO_IDENTIFIER=" azl"
204- END_OF_LIFE_1_YEAR=$( date -d " +1 year" " +%Y-%m-%dT%H:%M:%SZ" )
205-
206- echo " Golden Image Name -> $GOLDEN_IMAGE_NAME "
207- echo " Base ACR Container Name -> $BASE_IMAGE_NAME "
208- echo " Base ACR Container Tag -> $BASE_IMAGE_TAG "
209- echo " Azure Linux Version -> $AZURE_LINUX_VERSION "
210- echo " Distro Identifier -> $DISTRO_IDENTIFIER "
211- echo " End of Life -> $END_OF_LIFE_1_YEAR "
212- }
213-
214193function get_packages_to_install {
215194 echo " +++ Get packages to install"
216195 packagesFilePath=" $CONTAINER_SRC_DIR /$IMAGE /$PACKAGE_FILE "
@@ -269,14 +248,14 @@ function docker_build {
269248 echo " docker buildx build $DOCKER_BUILD_ARGS " \
270249 " --build-arg BASE_IMAGE=$BASE_IMAGE_NAME_FULL " \
271250 " --build-arg RPMS_TO_INSTALL=$PACKAGES_TO_INSTALL " \
272- " -t $GOLDEN_IMAGE_NAME --no-cache --progress=plain" \
251+ " -t $CONTAINER_IMAGE_NAME --no-cache --progress=plain" \
273252 " -f $WORK_DIR /Dockerfile ."
274253
275254 echo " "
276255 docker buildx build $DOCKER_BUILD_ARGS \
277256 --build-arg BASE_IMAGE=" $BASE_IMAGE_NAME_FULL " \
278257 --build-arg RPMS_TO_INSTALL=" $PACKAGES_TO_INSTALL " \
279- -t " $GOLDEN_IMAGE_NAME " --no-cache --progress=plain \
258+ -t " $CONTAINER_IMAGE_NAME " --no-cache --progress=plain \
280259 -f " $WORK_DIR /Dockerfile" .
281260 popd > /dev/null
282261}
@@ -286,7 +265,7 @@ function set_image_tag {
286265 local containerId
287266 local installedPackage
288267
289- containerId=$( docker run --entrypoint /bin/sh -dt " $GOLDEN_IMAGE_NAME " )
268+ containerId=$( docker run --entrypoint /bin/sh -dt " $CONTAINER_IMAGE_NAME " )
290269
291270 echo " Container ID -> $containerId "
292271
@@ -312,77 +291,14 @@ function set_image_tag {
312291 # Rename the image to include package version
313292 # For HCI Images, do not include "-$DISTRO_IDENTIFIER" in the image tag; Instead use a "."
314293 if [ " $IS_HCI_IMAGE " = true ]; then
315- # Example: acrafoimages.azurecr.io/base/kubevirt/virt-operator:0.59.0-2.3 .0.20240101 -amd64
316- GOLDEN_IMAGE_NAME_FINAL =" $GOLDEN_IMAGE_NAME :$COMPONENT_VERSION .$BASE_IMAGE_TAG "
294+ # Example: acrafoimages.azurecr.io/base/kubevirt/virt-operator:0.59.0-2.2 .0.20230607 -amd64
295+ CONTAINER_IMAGE_NAME_FINAL =" $CONTAINER_IMAGE_NAME :$COMPONENT_VERSION .$BASE_IMAGE_TAG "
317296 else
318- # Example: azurelinuxpreview.azurecr.io/base/nodejs:18.18.2 -2-$DISTRO_IDENTIFIER3 .0.20240101 -amd64
319- GOLDEN_IMAGE_NAME_FINAL =" $GOLDEN_IMAGE_NAME :$COMPONENT_VERSION -$DISTRO_IDENTIFIER$BASE_IMAGE_TAG "
297+ # Example: azurelinuxpreview.azurecr.io/base/nodejs:16.19.1 -2-$DISTRO_IDENTIFIER2 .0.20230607 -amd64
298+ CONTAINER_IMAGE_NAME_FINAL =" $CONTAINER_IMAGE_NAME :$COMPONENT_VERSION -$DISTRO_IDENTIFIER$BASE_IMAGE_TAG "
320299 fi
321300}
322301
323- function finalize {
324- echo " +++ Finalize"
325- docker image tag " $GOLDEN_IMAGE_NAME " " $GOLDEN_IMAGE_NAME_FINAL "
326- docker rmi -f " $GOLDEN_IMAGE_NAME "
327- echo " +++ Save container image name to file PublishedContainers-$IMAGE .txt"
328- echo " $GOLDEN_IMAGE_NAME_FINAL " >> " $OUTPUT_DIR /PublishedContainers-$IMAGE .txt"
329- }
330-
331- function oras_attach {
332- local image_name=$1
333- oras attach \
334- --artifact-type " application/vnd.microsoft.artifact.lifecycle" \
335- --annotation " vnd.microsoft.artifact.lifecycle.end-of-life.date=$END_OF_LIFE_1_YEAR " \
336- " $image_name "
337- }
338-
339- function publish_to_acr {
340- CONTAINER_IMAGE=$1
341- if [[ ! " $PUBLISH_TO_ACR " =~ [Tt]rue ]]; then
342- echo " +++ Skip publishing to ACR"
343- return
344- fi
345- local oras_access_token
346-
347- echo " +++ az login into Azure ACR $ACR "
348- oras_access_token=$( az acr login --name " $ACR " --expose-token --output tsv --query accessToken)
349- oras login " $ACR .azurecr.io" \
350- --username " 00000000-0000-0000-0000-000000000000" \
351- --password " $oras_access_token "
352-
353- echo " +++ Publish container $CONTAINER_IMAGE "
354- docker image push " $CONTAINER_IMAGE "
355- oras_attach " $CONTAINER_IMAGE "
356- }
357-
358- function generate_image_sbom {
359- if [[ ! " $CREATE_SBOM " =~ [Tt]rue ]]; then
360- echo " +++ Skip creating SBOM"
361- return
362- fi
363-
364- echo " +++ Generate SBOM for the container image"
365- echo " Sanitized image name has '/' replaced with '-' and ':' replaced with '_'."
366- GOLDEN_IMAGE_NAME_SANITIZED=$( echo " $GOLDEN_IMAGE_NAME_FINAL " | tr ' /' ' -' | tr ' :' ' _' )
367- echo " GOLDEN_IMAGE_NAME_SANITIZED -> $GOLDEN_IMAGE_NAME_SANITIZED "
368-
369- DOCKER_BUILD_DIR=$( mktemp -d)
370- # SBOM script will create the SBOM at the following path.
371- IMAGE_SBOM_MANIFEST_PATH=" $DOCKER_BUILD_DIR /_manifest/spdx_2.2/manifest.spdx.json"
372- /bin/bash " $SBOM_SCRIPT " \
373- " $DOCKER_BUILD_DIR " \
374- " $GOLDEN_IMAGE_NAME_FINAL " \
375- " $SBOM_TOOL_PATH " \
376- " $BASE_IMAGE_NAME -$COMPONENT " \
377- " $COMPONENT_VERSION -$DISTRO_IDENTIFIER$BASE_IMAGE_TAG "
378-
379- SBOM_IMAGES_DIR=" $OUTPUT_DIR /SBOM_IMAGES"
380- mkdir -p " $SBOM_IMAGES_DIR "
381- cp -v " $IMAGE_SBOM_MANIFEST_PATH " " $SBOM_IMAGES_DIR /$GOLDEN_IMAGE_NAME_SANITIZED .spdx.json"
382- echo " Generated SBOM:'$SBOM_IMAGES_DIR /$GOLDEN_IMAGE_NAME_SANITIZED .spdx.json'"
383- sudo rm -rf " $DOCKER_BUILD_DIR "
384- }
385-
386302function distroless_container {
387303 if [[ ! " $DISTROLESS " =~ [Tt]rue ]]; then
388304 echo " +++ Skip creating distroless container"
@@ -394,6 +310,7 @@ function distroless_container {
394310 create_distroless_container
395311}
396312
313+ source " $CONTAINER_SRC_DIR /scripts/BuildContainerCommonSteps.sh"
397314print_inputs
398315validate_inputs
399316initialization
@@ -404,6 +321,4 @@ prepare_docker_directory
404321docker_build
405322set_image_tag
406323finalize
407- publish_to_acr " $GOLDEN_IMAGE_NAME_FINAL "
408- generate_image_sbom
409324distroless_container
0 commit comments