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