diff options
| author | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2020-01-03 10:48:07 +0100 |
|---|---|---|
| committer | Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> | 2020-01-10 12:50:34 +0100 |
| commit | f2801fabdd727fc72a28b056d79787af484424a7 (patch) | |
| tree | 4a9fdebf789ed1b6d76eceb3bc375187ac845705 | |
| parent | 8b7ec43536842dd500cc5ee1198a318070ac1046 (diff) | |
| download | kolla-f2801fabdd727fc72a28b056d79787af484424a7.tar.gz kolla-f2801fabdd727fc72a28b056d79787af484424a7.zip | |
Add AArch64 publisher for Debian/source
This time proper approach involves job dependencies.
First we build and publish x86-64 and aarch64 images with architecture
name in image tag. Then we create multiarch manifests to create 'master'
images.
Change-Id: I6b9505dc326636fc6df8798c62c3a5eb1f728a51
| -rw-r--r-- | .zuul.d/debian.yaml | 27 | ||||
| -rw-r--r-- | tests/playbooks/publish-multiarch.yml | 24 | ||||
| -rw-r--r-- | tests/test_build.py | 3 | ||||
| -rwxr-xr-x | tools/create-multiarch-images.sh | 32 |
4 files changed, 83 insertions, 3 deletions
diff --git a/.zuul.d/debian.yaml b/.zuul.d/debian.yaml index 42df7237c..9a3d92c01 100644 --- a/.zuul.d/debian.yaml +++ b/.zuul.d/debian.yaml @@ -10,11 +10,15 @@ - kolla-build-debian-source-aarch64 periodic: jobs: - - kolla-publish-debian-source + - kolla-publish-debian-source-multiarch-aarch64 + - kolla-publish-debian-source-multiarch-x86_64 + - kolla-publish-debian-source-multiarch release: jobs: - - kolla-publish-debian-source - kolla-publish-debian-binary + - kolla-publish-debian-source-multiarch-aarch64 + - kolla-publish-debian-source-multiarch-x86_64 + - kolla-publish-debian-source-multiarch - job: name: kolla-build-debian-source @@ -56,10 +60,27 @@ - kolla_dockerhub_creds - job: - name: kolla-publish-debian-source + name: kolla-publish-debian-source-multiarch-x86_64 parent: kolla-build-debian-source post-run: tests/playbooks/publish.yml vars: publisher: true secrets: - kolla_dockerhub_creds + +- job: + name: kolla-publish-debian-source-multiarch-aarch64 + parent: kolla-publish-debian-source-multiarch-x86_64 + nodeset: kolla-debian-buster-aarch64 + +- job: + name: kolla-publish-debian-source-multiarch + parent: base + run: tests/playbooks/publish-multiarch.yml + vars: + publisher: true + secrets: + - kolla_dockerhub_creds + dependencies: + - kolla-publish-debian-source-multiarch-aarch64 + - kolla-publish-debian-source-multiarch-x86_64 diff --git a/tests/playbooks/publish-multiarch.yml b/tests/playbooks/publish-multiarch.yml new file mode 100644 index 000000000..853235f6c --- /dev/null +++ b/tests/playbooks/publish-multiarch.yml @@ -0,0 +1,24 @@ +--- +- hosts: all + tasks: + - name: Login to Dockerhub + command: "docker login -u {{ kolla_dockerhub_creds.user }} -p {{ kolla_dockerhub_creds.password }}" + no_log: true + + - name: Ensure ~/.docker exists + file: + path: ~/.docker + state: directory + mode: 0777 + + - name: Enable experimental features in Docker so we can use 'docker manifest' + copy: + content: '{ "experimental": "enabled" }' + dest: ~/.docker/config.json + + - name: Define image tag + set_fact: + image_tag: zuul.branch | regex_replace('^stable/', '') + + - name: Create multiarch images + command: "TAG={{ image_tag }} NAMESPACE=kolla DISTRO={{ base_distro }} TYPE={{ install_type }} tools/create-multiarch-images.sh" diff --git a/tests/test_build.py b/tests/test_build.py index eac241265..3e0cce79a 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -23,6 +23,7 @@ import testtools sys.path.append( os.path.abspath(os.path.join(os.path.dirname(__file__), '../tools'))) +from kolla.common import config # noqa from kolla.image import build # noqa LOG = logging.getLogger(__name__) @@ -107,5 +108,7 @@ class BuildTestDebianSource(BuildTest, base.BaseTestCase): def setUp(self): super(BuildTestDebianSource, self).setUp() + tag = '%s-%s' % (config.OPENSTACK_RELEASE['debian'], os.uname()[4]) self.build_args.extend(["--base", "debian", + "--tag", tag, "--type", "source"]) diff --git a/tools/create-multiarch-images.sh b/tools/create-multiarch-images.sh new file mode 100755 index 000000000..11e0aa7c3 --- /dev/null +++ b/tools/create-multiarch-images.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# This script takes aarch64 and x86_64 images from our publish jobs and makes +# multiarch containers so users of any of those architectures can pull them. + +TARGET=${NAMESPACE}/${DISTRO}-${TYPE} +TMP=$(mktemp -d) + +for arch in aarch64 x86_64; do + tools/build.py --base ${DISTRO} --type ${TYPE} --base-arch $arch --list-images|sed -e 's/^.* : //g'|sort >${TMP}/images-$arch +done + +comm -12 ${TMP}/images-aarch64 ${TMP}/images-x86_64 >${TMP}/list-of-common-images +comm -13 ${TMP}/images-aarch64 ${TMP}/images-x86_64 >${TMP}/list-of-x86_64-only-images +comm -23 ${TMP}/images-aarch64 ${TMP}/images-x86_64 >${TMP}/list-of-aarch64-only-images + + +for image_name in $(cat ${TMP}/list-of-common-images); do + docker manifest create ${TARGET}-${image_name}:${TAG} ${TARGET}-${image_name}:${TAG}-aarch64 ${TARGET}-${image_name}:${TAG}-x86_64 +done + +for image_name in $(cat ${TMP}/list-of-x86_64-only-images); do + docker manifest create ${TARGET}-${image_name}:${TAG} ${TARGET}-${image_name}:${TAG}-x86_64 +done + +for image_name in $(cat ${TMP}/list-of-aarch64-only-images); do + docker manifest create ${TARGET}-${image_name}:${TAG} ${TARGET}-${image_name}:${TAG}-aarch64 +done + +for image_name in $(cat ${TMP}/list-of-*); do + docker manifest push ${TARGET}-${image_name}:${TAG} +done |
