mirror of
https://github.com/NVIDIA/nvidia-container-toolkit
synced 2024-11-22 00:08:11 +00:00
Enable multi-arch builds in CI
Signed-off-by: Evan Lezar <elezar@nvidia.com>
This commit is contained in:
parent
a0d2b22a54
commit
b05db2befe
@ -20,6 +20,7 @@ default:
|
|||||||
variables:
|
variables:
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
GIT_SUBMODULE_STRATEGY: recursive
|
||||||
BUILDIMAGE: "${CI_REGISTRY_IMAGE}/build:${CI_COMMIT_SHORT_SHA}"
|
BUILDIMAGE: "${CI_REGISTRY_IMAGE}/build:${CI_COMMIT_SHORT_SHA}"
|
||||||
|
BUILD_MULTI_ARCH_IMAGES: "true"
|
||||||
|
|
||||||
stages:
|
stages:
|
||||||
- image
|
- image
|
||||||
@ -117,20 +118,30 @@ test-packaging:
|
|||||||
needs:
|
needs:
|
||||||
- image-packaging
|
- image-packaging
|
||||||
|
|
||||||
|
# Download the regctl binary for use in the release steps
|
||||||
|
.regctl-setup:
|
||||||
|
before_script:
|
||||||
|
- export REGCTL_VERSION=v0.3.10
|
||||||
|
- apk add --no-cache curl
|
||||||
|
- mkdir -p bin
|
||||||
|
- curl -sSLo bin/regctl https://github.com/regclient/regclient/releases/download/${REGCTL_VERSION}/regctl-linux-amd64
|
||||||
|
- chmod a+x bin/regctl
|
||||||
|
- export PATH=$(pwd)/bin:${PATH}
|
||||||
|
|
||||||
# .release forms the base of the deployment jobs which push images to the CI registry.
|
# .release forms the base of the deployment jobs which push images to the CI registry.
|
||||||
# This is extended with the version to be deployed (e.g. the SHA or TAG) and the
|
# This is extended with the version to be deployed (e.g. the SHA or TAG) and the
|
||||||
# target os.
|
# target os.
|
||||||
.release:
|
.release:
|
||||||
stage:
|
stage: release
|
||||||
release
|
|
||||||
variables:
|
variables:
|
||||||
# Define the source image for the release
|
# Define the source image for the release
|
||||||
IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
|
IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
|
||||||
VERSION: "${CI_COMMIT_SHORT_SHA}"
|
VERSION: "${CI_COMMIT_SHORT_SHA}"
|
||||||
# OUT_IMAGE_VERSION is overridden for external releases
|
# OUT_IMAGE_VERSION is overridden for external releases
|
||||||
OUT_IMAGE_VERSION: "${CI_COMMIT_SHORT_SHA}"
|
OUT_IMAGE_VERSION: "${CI_COMMIT_SHORT_SHA}"
|
||||||
stage: release
|
|
||||||
before_script:
|
before_script:
|
||||||
|
- !reference [.regctl-setup, before_script]
|
||||||
|
|
||||||
# We ensure that the OUT_IMAGE_VERSION is set
|
# We ensure that the OUT_IMAGE_VERSION is set
|
||||||
- 'echo Version: ${OUT_IMAGE_VERSION} ; [[ -n "${OUT_IMAGE_VERSION}" ]] || exit 1'
|
- 'echo Version: ${OUT_IMAGE_VERSION} ; [[ -n "${OUT_IMAGE_VERSION}" ]] || exit 1'
|
||||||
|
|
||||||
@ -138,16 +149,16 @@ test-packaging:
|
|||||||
# need to tag the image.
|
# need to tag the image.
|
||||||
# Note: a leading 'v' is stripped from the version if present
|
# Note: a leading 'v' is stripped from the version if present
|
||||||
- apk add --no-cache make bash
|
- apk add --no-cache make bash
|
||||||
- 'echo "Logging in to CI registry ${CI_REGISTRY}"'
|
|
||||||
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
|
|
||||||
- docker pull "${IMAGE_NAME}:${VERSION}-${DIST}"
|
|
||||||
script:
|
script:
|
||||||
- docker tag "${IMAGE_NAME}:${VERSION}-${DIST}" "${OUT_IMAGE_NAME}:${OUT_IMAGE_VERSION}-${DIST}"
|
|
||||||
# Log in to the "output" registry, tag the image and push the image
|
# Log in to the "output" registry, tag the image and push the image
|
||||||
- 'echo "Logging in to output registry ${OUT_REGISTRY}"'
|
- 'echo "Logging in to CI registry ${CI_REGISTRY}"'
|
||||||
- docker logout
|
- regctl registry login "${CI_REGISTRY}" -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}"
|
||||||
- docker login -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}" "${OUT_REGISTRY}"
|
- '[ ${CI_REGISTRY} = ${OUT_REGISTRY} ] || echo "Logging in to output registry ${OUT_REGISTRY}"'
|
||||||
- make IMAGE_NAME=${OUT_IMAGE_NAME} VERSION=${OUT_IMAGE_VERSION} -f build/container/Makefile push-${DIST}
|
- '[ ${CI_REGISTRY} = ${OUT_REGISTRY} ] || regctl registry login "${OUT_REGISTRY}" -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}"'
|
||||||
|
|
||||||
|
# Since OUT_IMAGE_NAME and OUT_IMAGE_VERSION are set, this will push the CI image to the
|
||||||
|
# Target
|
||||||
|
- make -f build/container/Makefile push-${DIST}
|
||||||
|
|
||||||
# Define a staging release step that pushes an image to an internal "staging" repository
|
# Define a staging release step that pushes an image to an internal "staging" repository
|
||||||
# This is triggered for all pipelines (i.e. not only tags) to test the pipeline steps
|
# This is triggered for all pipelines (i.e. not only tags) to test the pipeline steps
|
||||||
|
@ -194,19 +194,33 @@ package-ubuntu18.04-ppc64le:
|
|||||||
- .dist-ubuntu18.04
|
- .dist-ubuntu18.04
|
||||||
- .arch-ppc64le
|
- .arch-ppc64le
|
||||||
|
|
||||||
|
.buildx-setup:
|
||||||
|
before_script:
|
||||||
|
- export BUILDX_VERSION=v0.6.3
|
||||||
|
- apk add --no-cache curl
|
||||||
|
- mkdir -p ~/.docker/cli-plugins
|
||||||
|
- curl -sSLo ~/.docker/cli-plugins/docker-buildx "https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64"
|
||||||
|
- chmod a+x ~/.docker/cli-plugins/docker-buildx
|
||||||
|
|
||||||
|
- docker buildx create --use --platform=linux/amd64,linux/arm64
|
||||||
|
|
||||||
|
- '[[ -n "${SKIP_QEMU_SETUP}" ]] || docker run --rm --privileged multiarch/qemu-user-static --reset -p yes'
|
||||||
|
|
||||||
# Define the image build targets
|
# Define the image build targets
|
||||||
.image-build:
|
.image-build:
|
||||||
stage: image-build
|
stage: image-build
|
||||||
variables:
|
variables:
|
||||||
IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
|
IMAGE_NAME: "${CI_REGISTRY_IMAGE}/container-toolkit"
|
||||||
VERSION: "${CI_COMMIT_SHORT_SHA}"
|
VERSION: "${CI_COMMIT_SHORT_SHA}"
|
||||||
|
PUSH_ON_BUILD: "true"
|
||||||
before_script:
|
before_script:
|
||||||
|
- !reference [.buildx-setup, before_script]
|
||||||
|
|
||||||
- apk add --no-cache bash make
|
- apk add --no-cache bash make
|
||||||
- 'echo "Logging in to CI registry ${CI_REGISTRY}"'
|
- 'echo "Logging in to CI registry ${CI_REGISTRY}"'
|
||||||
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
|
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
|
||||||
script:
|
script:
|
||||||
- make -f build/container/Makefile build-${DIST}
|
- make -f build/container/Makefile build-${DIST}
|
||||||
- make -f build/container/Makefile push-${DIST}
|
|
||||||
|
|
||||||
image-centos7:
|
image-centos7:
|
||||||
extends:
|
extends:
|
||||||
|
@ -56,13 +56,13 @@ variables:
|
|||||||
- job_execution_timeout
|
- job_execution_timeout
|
||||||
- stuck_or_timeout_failure
|
- stuck_or_timeout_failure
|
||||||
before_script:
|
before_script:
|
||||||
|
- !reference [.regctl-setup, before_script]
|
||||||
|
- apk add --no-cache make bash
|
||||||
- >
|
- >
|
||||||
docker pull ${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} > /dev/null && echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST}" || ( echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} does not exist" && sleep infinity )
|
regctl manifest get ${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} --list > /dev/null && echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST}" || ( echo "${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} does not exist" && sleep infinity )
|
||||||
script:
|
script:
|
||||||
- docker pull ${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST}
|
- regctl registry login "${OUT_REGISTRY}" -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}"
|
||||||
- docker tag ${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} ${OUT_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}-${DIST}
|
- make -f build/container/Makefile IMAGE=${IN_REGISTRY}/${IN_IMAGE_NAME}:${IN_VERSION}-${DIST} OUT_IMAGE=${OUT_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}-${DIST} push-${DIST}
|
||||||
- docker login -u "${OUT_REGISTRY_USER}" -p "${OUT_REGISTRY_TOKEN}" "${OUT_REGISTRY}"
|
|
||||||
- docker push ${OUT_IMAGE_NAME}:${CI_COMMIT_SHORT_SHA}-${DIST}
|
|
||||||
|
|
||||||
image-centos7:
|
image-centos7:
|
||||||
extends:
|
extends:
|
||||||
|
Loading…
Reference in New Issue
Block a user