From 3c4543a8ef6f84a5f25483a6dfe50e0075a9cd0e Mon Sep 17 00:00:00 2001 From: Cédric Ollivier Date: Mon, 10 Aug 2020 21:40:11 +0200 Subject: Compile all Functest K8s containers for arm v7 and v8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It removes sudo when useless and turns debug on when compiling K8s binaries. It avoids TravisCI timeouts (No output has been received)[1] [1] https://travis-ci.org/github/collivier/functest-kubernetes/jobs/716819529 Change-Id: I4719257596bf9a6510e2f772271b336847d1ccb5 Signed-off-by: Cédric Ollivier --- .travis.yml | 100 ++++++++++++++++++++++++++++++++++-------- build.sh | 22 ++++++++++ docker/healthcheck/Dockerfile | 4 +- 3 files changed, 106 insertions(+), 20 deletions(-) diff --git a/.travis.yml b/.travis.yml index 46ea017d..aa8a2b67 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,76 +9,140 @@ addons: - libssl1.0.0 before_script: + - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes - sudo add-apt-repository -y ppa:deadsnakes/ppa - sudo apt-get update - sudo apt-get install python3.8 python3.8-dev python3.8-distutils - sudo pip install tox - - sudo -E docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}" + - docker login -u="${DOCKER_USERNAME}" -p="${DOCKER_PASSWORD}" - (cd .. && git clone https://github.com/estesp/manifest-tool) - (cd ../manifest-tool && git checkout v0.9.0) - - (cd ../manifest-tool && sudo -E make && sudo -E make install) + - (cd ../manifest-tool && make && sudo make install) jobs: include: - stage: run unit tests script: tox -e pep8,pylint,yamllint,ansiblelint,bashate,py38,bandit - - stage: build functest-kubernetes-core image - script: sudo -E bash build.sh + - stage: build functest-kubernetes-core images + script: bash build.sh env: - REPO="${DOCKER_USERNAME}" - amd64_dirs="docker/core" + - arm_dirs="" - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="docker/core" + - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="" + - arm64_dirs="docker/core" - stage: publish functest-kubernetes-core manifests script: > - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ + manifest-tool push from-args \ + --platforms linux/amd64,linux/arm,linux/arm64 \ --template ${DOCKER_USERNAME}/functest-kubernetes-core:ARCH-latest \ --target ${DOCKER_USERNAME}/functest-kubernetes-core:latest - stage: build functest-kubernetes-[healthcheck,cnf,security] images - script: sudo -E bash build.sh + script: bash build.sh env: - REPO="${DOCKER_USERNAME}" - amd64_dirs="docker/healthcheck" + - arm_dirs="" - arm64_dirs="" - - script: sudo -E bash build.sh + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="docker/healthcheck" + - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="" + - arm64_dirs="docker/healthcheck" + - script: bash build.sh env: - REPO="${DOCKER_USERNAME}" - amd64_dirs="docker/cnf" + - arm_dirs="" - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="docker/cnf" + - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" - arm_dirs="" - - script: sudo -E bash build.sh + - arm64_dirs="docker/cnf" + - script: bash build.sh env: - REPO="${DOCKER_USERNAME}" - amd64_dirs="docker/security" + - arm_dirs="" - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="docker/security" + - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" - arm_dirs="" + - arm64_dirs="docker/security" - stage: publish functest-kubernetes-[healthcheck,cnf,security] manifests script: > - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ + manifest-tool push from-args \ + --platforms linux/amd64,linux/arm,linux/arm64 \ --template \ ${DOCKER_USERNAME}/functest-kubernetes-healthcheck:ARCH-latest \ --target ${DOCKER_USERNAME}/functest-kubernetes-healthcheck:latest - script: > - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ + manifest-tool push from-args \ + --platforms linux/amd64,linux/arm,linux/arm64 \ --template ${DOCKER_USERNAME}/functest-kubernetes-cnf:ARCH-latest \ --target ${DOCKER_USERNAME}/functest-kubernetes-cnf:latest - script: > - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ + manifest-tool push from-args \ + --platforms linux/amd64,linux/arm,linux/arm64 \ --template \ ${DOCKER_USERNAME}/functest-kubernetes-security:ARCH-latest \ --target ${DOCKER_USERNAME}/functest-kubernetes-security:latest - stage: build functest-kubernetes-smoke image - script: sudo -E bash build.sh + script: bash build.sh env: - REPO="${DOCKER_USERNAME}" - amd64_dirs="docker/smoke" + - arm_dirs="" + - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="docker/smoke" - arm64_dirs="" + - script: bash build.sh + env: + - REPO="${DOCKER_USERNAME}" + - amd64_dirs="" + - arm_dirs="" + - arm64_dirs="docker/smoke" - stage: publish functest-kubernetes-smoke manifests script: > - sudo manifest-tool push from-args \ - --platforms linux/amd64 \ + manifest-tool push from-args \ + --platforms linux/amd64,linux/arm,linux/arm64 \ --template ${DOCKER_USERNAME}/functest-kubernetes-smoke:ARCH-latest \ --target ${DOCKER_USERNAME}/functest-kubernetes-smoke:latest diff --git a/build.sh b/build.sh index c5f8eeb5..ac5acfce 100644 --- a/build.sh +++ b/build.sh @@ -9,6 +9,7 @@ docker/healthcheck \ docker/smoke \ docker/cnf \ docker/security"} +arm_dirs=${arm_dirs-${amd64_dirs}} arm64_dirs=${arm64_dirs-${amd64_dirs}} build_opts=(--pull=true --no-cache --force-rm=true) @@ -54,4 +55,25 @@ done arm64v8/golang:1.14-alpine3.12 || true) find . -name Dockerfile -exec git checkout {} + +find . -name Dockerfile -exec sed -i \ + -e "s|golang:1.14-alpine3.12|arm32v7/golang:1.14-alpine3.12|g" {} + +find . -name Dockerfile -exec sed -i \ + -e "s|opnfv/functest-kubernetes-core|\ +${repo}/functest-kubernetes-core:arm-latest|g" {} + +find . -name Dockerfile -exec sed -i \ + -e "s|opnfv/functest-kubernetes-healthcheck|\ +${repo}/functest-kubernetes-healthcheck:arm-latest|g" {} + +for dir in ${arm_dirs}; do + (cd "${dir}" && docker build "${build_opts[@]}" \ + -t "${repo}/functest-kubernetes-${dir##**/}:arm-latest" .) + docker push "${repo}/functest-kubernetes-${dir##**/}:arm-latest" + [ "${dir}" != "docker/core" ] && + (docker rmi \ + "${repo}/functest-kubernetes-${dir##**/}:arm-latest" || true) +done +[ ! -z "${arm_dirs}" ] && + (docker rmi "${repo}/functest-kubernetes-core:arm-latest" \ + arm32v7/golang:1.14-alpine3.12 || true) +find . -name Dockerfile -exec git checkout {} + + exit $? diff --git a/docker/healthcheck/Dockerfile b/docker/healthcheck/Dockerfile index 1467f857..1413aa61 100644 --- a/docker/healthcheck/Dockerfile +++ b/docker/healthcheck/Dockerfile @@ -11,8 +11,8 @@ RUN apk --no-cache add --update make bash git \ (cd /src/k8s.io/kubernetes && \ git fetch --tags https://github.com/kubernetes/kubernetes $K8S_TAG && \ git checkout FETCH_HEAD && \ - make kubectl ginkgo && \ - make WHAT=test/e2e/e2e.test && \ + make kubectl ginkgo GOFLAGS=-v && \ + make WHAT=test/e2e/e2e.test GOFLAGS=-v && \ mv _output/bin/* /usr/local/bin) && \ rm -r /src/k8s.io && \ apk del .build-deps -- cgit 1.2.3-korg