diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c0f4b71..9d51ea8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -30,7 +30,9 @@ before_script: stages: - build-rt-tests + - build-rt-tests-multiarch - deploy + - deploy-multiarch # Docker image builds # @@ -73,10 +75,46 @@ docker-build-rt-tests: DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} stage: build-rt-tests +docker-build-stress-tests: + extends: .docker-build + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm32v7-stress-tests + DOCKERFILE_FOLDER: "./stress-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests +docker-build-rt-tests-arm64: + extends: .docker-build + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_ARCH: linux/arm64 + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm64v8-rt-tests + DOCKERFILE_FOLDER: "./rt-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests - - +docker-build-stress-tests-arm64: + extends: .docker-build + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_ARCH: linux/arm64 + IMAGE_TAG: ${IMAGE_TAG_DEBIAN} + IMAGE_NAME: arm64v8-stress-tests + DOCKERFILE_FOLDER: "./stress-tests/" + DOCKER_NO_CACHE: ${DOCKER_NO_CACHE_FEEDS} + stage: build-rt-tests # Enable experimental features in Docker client (experimental feature are needed for manifest) .do_docker_experimental: &do_docker_experimental @@ -84,8 +122,35 @@ docker-build-rt-tests: - "echo -e '{\n \"experimental\": \"enabled\"\n}' | tee $HOME/.docker/config.json" - docker version +.docker-build-multiarch: + before_script: + - *do_docker_experimental + - rm -rf ~/.docker/manifests/* + script: + - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker manifest create ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} + - docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_32}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm + - docker manifest annotate ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} ${CI_REGISTRY_IMAGE}/${IMAGE_NAME_64}:${GITLAB_DOCKERREGISTRY_SUFFIX} --os linux --arch arm64 + - docker manifest inspect -v ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} + - docker manifest push ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX_LATEST} +docker-build-rt-tests-multiarch: + extends: .docker-build-multiarch + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: build-rt-tests-multiarch +docker-build-stress-tests-multiarch: + extends: .docker-build-multiarch + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: build-rt-tests-multiarch # Docker deploy jobs # @@ -103,7 +168,7 @@ docker-build-rt-tests: - export DOCKER_TAGS_CHECK="${MAJOR}.${MINOR}.${PATCH} ${MAJOR}.${MINOR}.${PATCH}-${DATE}" - export DOCKER_TAGS="${MAJOR} ${MAJOR}.${MINOR}" - docker pull ${CI_REGISTRY_IMAGE}/${IMAGE_NAME}:${GITLAB_DOCKERREGISTRY_SUFFIX} - - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_TOKEN; + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW; - for tag in ${DOCKER_TAGS_CHECK}; do docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} > /dev/null && true; RESULT=$?; @@ -125,6 +190,80 @@ docker-deploy-rt-tests: IMAGE_NAME: arm32v7-rt-tests stage: deploy +docker-deploy-stress-tests: + extends: .docker-deploy + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm32v7-stress-tests + stage: deploy +docker-deploy-rt-tests-arm64: + extends: .docker-deploy + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-rt-tests + stage: deploy +docker-deploy-stress-tests-arm64: + extends: .docker-deploy + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: arm64v8-stress-tests + stage: deploy +.docker-deploy-multiarch: + script: + - *do_docker_experimental + - export DATE=$(date +%Y%m%d) + - export DOCKER_TAGS_CHECK="${MAJOR}.${MINOR}.${PATCH} ${MAJOR}.${MINOR}.${PATCH}-${DATE}" + - export DOCKER_TAGS="${MAJOR} ${MAJOR}.${MINOR}" + - rm -rf ~/.docker/manifests/* + - docker login -u $DOCKER_HUB_USER -p $DOCKER_HUB_PW + - for tag in ${DOCKER_TAGS_CHECK}; + do + docker manifest inspect ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} > /dev/null && true; RESULT=$?; + (if [ $RESULT == 0 ] ; then echo "Image with ${tag} tag already exists." && exit 1 ; fi); + done + - for tag in ${DOCKER_TAGS} ${DOCKER_TAGS_CHECK}; + do + docker manifest create ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${tag}; + docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_32}:${tag} --os linux --arch arm; + docker manifest annotate ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag} ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME_64}:${tag} --os linux --arch arm64; + docker manifest inspect -v ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag}; + docker manifest push ${DOCKER_HUB_REPOSITORY}/${IMAGE_NAME}:${tag}; + done + +docker-deploy-rt-tests-multiarch: + extends: .docker-deploy-multiarch + needs: ["docker-deploy-rt-tests", "docker-deploy-rt-tests-arm64"] + before_script: + - export MAJOR="${RT_TESTS_MAJOR}" + - export MINOR="${RT_TESTS_MINOR}" + - export PATCH="${RT_TESTS_PATCH}" + variables: + IMAGE_NAME: rt-tests + IMAGE_NAME_32: arm32v7-rt-tests + IMAGE_NAME_64: arm64v8-rt-tests + stage: deploy-multiarch + +docker-deploy-stress-tests-multiarch: + extends: .docker-deploy-multiarch + needs: ["docker-deploy-stress-tests", "docker-deploy-stress-tests-arm64"] + before_script: + - export MAJOR="${STRESS_TESTS_MAJOR}" + - export MINOR="${STRESS_TESTS_MINOR}" + - export PATCH="${STRESS_TESTS_PATCH}" + variables: + IMAGE_NAME: stress-tests + IMAGE_NAME_32: arm32v7-stress-tests + IMAGE_NAME_64: arm64v8-stress-tests + stage: deploy-multiarch