From 0f1b757e402331341802052ad108f24c823ae7bc Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Wed, 11 Oct 2017 05:29:11 +0200 Subject: Allow building aarch64 images MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It must be noted that Docker automated build cannot create these images as the prerequisites are unmet to cross-compile [1]. It also publishes a travis config file [2]. [1] https://www.kernel.org/doc/html/v4.11/admin-guide/binfmt-misc.html [2] https://travis-ci.org/collivier/functest/builds/286932633 Conflicts: build.sh Change-Id: I11fdef410cc40989132205a098410175f789fdef Signed-off-by: Cédric Ollivier (cherry picked from commit ed777b643b05fbb71851df0b883483e0bcaa4ac1) --- .travis.yml | 133 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ build.sh | 23 +++++++---- 2 files changed, 149 insertions(+), 7 deletions(-) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..4472885cc --- /dev/null +++ b/.travis.yml @@ -0,0 +1,133 @@ +sudo: required +language: bash +services: docker +language: generic + +before_script: + - sudo apt-get -y install qemu-user-static + - sudo -E docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}" + - (cd .. && git clone https://github.com/estesp/manifest-tool) + - (cd ../manifest-tool && sudo -E make && sudo -E make install) + +jobs: + include: + - stage: build functest-core images + script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="" + - aarch64_dirs="docker/core" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/core" + - aarch64_dirs="" + - stage: publish functest-core manifests + script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-core:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-core:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-core:euphrates + - stage: build all functest images + script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="" + - aarch64_dirs="docker/healthcheck" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="" + - aarch64_dirs="docker/smoke" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="" + - aarch64_dirs="docker/features" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="" + - aarch64_dirs="docker/components" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/healthcheck" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/smoke" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/features" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/components" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/vnf" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/restapi" + - aarch64_dirs="" + - script: sudo -E bash build.sh + env: + - repo="${DOCKER_USERNAME}" + - x86_64_dirs="docker/parser" + - aarch64_dirs="" + - stage: publish all manifests + script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-healthcheck:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-healthcheck:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-healthcheck:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-healthcheck:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-healthcheck:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-healthcheck:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-smoke:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-smoke:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-smoke:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-features:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-features:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-features:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64,linux/arm64 \ + --template ${DOCKER_USERNAME}/functest-components:x86_64-euphrates \ + --template ${DOCKER_USERNAME}/functest-components:aarch64-euphrates \ + --target ${DOCKER_USERNAME}/functest-components:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64 \ + --template ${DOCKER_USERNAME}/functest-vnf:x86_64-euphrates \ + --target ${DOCKER_USERNAME}/functest-vnf:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64 \ + --template ${DOCKER_USERNAME}/functest-restapi:x86_64-euphrates \ + --target ${DOCKER_USERNAME}/functest-restapi:euphrates + - script: > + sudo manifest-tool push from-args \ + --platforms linux/amd64 \ + --template ${DOCKER_USERNAME}/functest-parser:x86_64-euphrates \ + --target ${DOCKER_USERNAME}/functest-parser:euphrates diff --git a/build.sh b/build.sh index e4d9b6af4..f16fa299f 100644 --- a/build.sh +++ b/build.sh @@ -3,7 +3,7 @@ set -e repo=${repo:-opnfv} -dirs="\ +x86_64_dirs=${x86_64_dirs-"\ docker/core \ docker/healthcheck \ docker/smoke \ @@ -11,14 +11,23 @@ docker/features \ docker/components \ docker/vnf \ docker/parser \ -docker/restapi" +docker/restapi"} +aarch64_dirs=${aarch64_dirs-$(echo "${x86_64_dirs}" | sed -e "s|docker/vnf||" \ + -e "s|docker/restapi||")} -(cd docker && docker build -t "${repo}/functest" .) -docker push "${repo}/functest:euphrates" +find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:x86_64-euphrates|g" {} + +for dir in ${x86_64_dirs}; do + (cd "${dir}" && docker build -t "${repo}/functest-${dir##**/}:x86_64-euphrates" .) + docker push "${repo}/functest-${dir##**/}:x86_64-euphrates" +done +find . -name Dockerfile -exec git checkout {} + -for dir in ${dirs}; do - (cd ${dir} && docker build -t "${repo}/functest-${dir##**/}:euphrates" .) - docker push "${repo}/functest-${dir##**/}:euphrates" +find . -name Dockerfile -exec sed -i -e "s|alpine:3.6|multiarch/alpine:aarch64-v3.6|g" {} + +find . -name Dockerfile -exec sed -i -e "s|opnfv/functest-core|${repo}/functest-core:aarch64-euphrates|g" {} + +for dir in ${aarch64_dirs}; do + (cd "${dir}" && docker build -t "${repo}/functest-${dir##**/}:aarch64-euphrates" .) + docker push "${repo}/functest-${dir##**/}:aarch64-euphrates" done +find . -name Dockerfile -exec git checkout {} + exit $? -- cgit 1.2.3-korg