From 8697de51a3e032eb63ccc2d778f1360630d2d330 Mon Sep 17 00:00:00 2001 From: eddyhub Date: Sun, 19 Aug 2018 08:43:30 +0200 Subject: [PATCH 1/3] Added multiarch build, because I need this image for mi Raspberry PI --- .travis.yml | 24 ++++++++++++++++++++++++ Dockerfile | 5 +++-- build.sh | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 .travis.yml create mode 100644 build.sh diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..cb0aa02 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +sudo: required +services: + - docker +language: bash + +env: + global: + - TRAVIS_SECURE_ENV_VARS=true + +before_install: + - sudo apt-get remove docker docker-engine docker.io + - curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - + - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" + - sudo apt-get update + - sudo apt-get -y install docker-ce + - echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json + - sudo service docker restart + - mkdir ~/.docker + - echo '{"experimental":"enabled"}' | tee ~/.docker/config.json + - ls -al ~/.docker/config.json + - cat ~/.docker/config.json + +script: + - bash build.sh $TRAVIS_REPO_SLUG $DOCKER_USERNAME $DOCKER_PASSWORD diff --git a/Dockerfile b/Dockerfile index 209ee3c..7fe3d40 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,5 @@ -FROM alpine:3.5 +ARG arch=amd64 +FROM multiarch/alpine:${arch}-latest-stable RUN apk add --no-cache curl jq @@ -7,4 +8,4 @@ ENTRYPOINT ["/docker-entrypoint"] HEALTHCHECK --interval=5s CMD exit 0 -CMD ["autoheal"] \ No newline at end of file +CMD ["autoheal"] diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..0d2af1f --- /dev/null +++ b/build.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +REPO=${1} +DOCKER_USERNAME=${2} +DOCKER_PASSWORD=${3} +declare -A ARCH_MAP +ARCH_MAP[amd64]=amd64 +ARCH_MAP[armhf]=arm +ARCH_MAP[arm64]=arm64 + +docker run --rm --privileged multiarch/qemu-user-static:register --reset +echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + +echo "Building docker images" +for i in "${!ARCH_MAP[@]}"; do + echo "################################################################################" + echo "Building and pushing: ${REPO}-${ARCH_MAP[$i]}:latest " + echo "################################################################################" + docker build --build-arg arch=${i} -t ${REPO}-${ARCH_MAP[$i]}:latest .; + docker push ${REPO}-${ARCH_MAP[$i]}:latest; +done; + +MANIFESTS="" +for arch in "${ARCH_MAP[@]}"; do MANIFESTS="${MANIFESTS} ${REPO}-${arch}:latest"; done + +echo "################################################################################" +echo "Building and pushing: ${REPO}-${ARCH_MAP[$i]}:latest " +echo "################################################################################" +docker manifest create ${REPO}:latest ${MANIFESTS}; + +for arch in "${ARCH_MAP[@]}"; do + docker manifest annotate --os linux --arch ${arch} ${REPO}:latest ${REPO}-${arch}:latest; +done; + +docker manifest push ${REPO}:latest From 825dbbc84db0879388095eccfcb325465f968691 Mon Sep 17 00:00:00 2001 From: eddyhub Date: Sun, 19 Aug 2018 11:30:28 +0200 Subject: [PATCH 2/3] Added gitlab-ci.yml to be able to build the containers in gitlab. --- .gitlab-ci.yml | 15 +++++++++++++++ .travis.yml | 2 +- build.sh | 3 ++- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 .gitlab-ci.yml diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..283b24d --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,15 @@ +image: docker:latest + +services: + - docker:dind +stages: + - build_and_deploy +job: + stage: build_and_deploy + script: + - mkdir ~/.docker + - echo '{"experimental":"enabled"}' | tee ~/.docker/config.json + - apk add --no-cache bash + - ls -al ~/.docker/config.json + - cat ~/.docker/config.json + - bash build.sh $DOCKER_ENV_CI_PROJECT_PATH $CI_REGISTRY_USER $CI_REGISTRY_PASSWORD $CI_REGISTRY diff --git a/.travis.yml b/.travis.yml index cb0aa02..b6d5c6f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,4 +21,4 @@ before_install: - cat ~/.docker/config.json script: - - bash build.sh $TRAVIS_REPO_SLUG $DOCKER_USERNAME $DOCKER_PASSWORD + - bash build.sh $TRAVIS_REPO_SLUG $DOCKER_USERNAME $DOCKER_PASSWORD index.docker.io diff --git a/build.sh b/build.sh index 0d2af1f..b2b59df 100644 --- a/build.sh +++ b/build.sh @@ -1,8 +1,9 @@ -#!/bin/bash +#!/bin/sh REPO=${1} DOCKER_USERNAME=${2} DOCKER_PASSWORD=${3} +DOCKER_REGESTRY=${4} declare -A ARCH_MAP ARCH_MAP[amd64]=amd64 ARCH_MAP[armhf]=arm From 5e816f9ff5c2a097851728eca796d7a34bbafd83 Mon Sep 17 00:00:00 2001 From: eddyhub Date: Tue, 21 Aug 2018 23:32:11 +0200 Subject: [PATCH 3/3] Use a specific version of alpine to get a reproducible build and set default arch to x86_64. --- Dockerfile | 4 ++-- build.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7fe3d40..ae825de 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -ARG arch=amd64 -FROM multiarch/alpine:${arch}-latest-stable +ARG arch=x86_64 +FROM multiarch/alpine:${arch}-v3.8 RUN apk add --no-cache curl jq diff --git a/build.sh b/build.sh index b2b59df..ea15696 100644 --- a/build.sh +++ b/build.sh @@ -5,7 +5,7 @@ DOCKER_USERNAME=${2} DOCKER_PASSWORD=${3} DOCKER_REGESTRY=${4} declare -A ARCH_MAP -ARCH_MAP[amd64]=amd64 +ARCH_MAP[x86_64]=x86_64 ARCH_MAP[armhf]=arm ARCH_MAP[arm64]=arm64