Skip to content

Commit

Permalink
build: setup docker buildx
Browse files Browse the repository at this point in the history
Signed-off-by: Morlay <morlay.null@gmail.com>
  • Loading branch information
morlay committed Oct 12, 2020
1 parent 0f88343 commit 63ead09
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 8 deletions.
60 changes: 52 additions & 8 deletions scripts/travis/build-all-in-one-image.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#!/bin/bash

bash ./scripts/travis/setup-docker-buildx.sh

set -exu

BRANCH=${BRANCH:?'missing BRANCH env var'}
Expand All @@ -26,6 +28,12 @@ run_integration_test() {
docker kill $CID
}

docker_buildx() {
CMD_ROOT=${1}
FLAGS=${@:2}
docker buildx build -f ${CMD_ROOT}/Dockerfile ${FLAGS} ${CMD_ROOT}
}

upload_to_docker() {
# Only push the docker container to Docker Hub for master branch
if [[ ("$BRANCH" == "master" || $BRANCH =~ ^v[0-9]+\.[0-9]+\.[0-9]+$) && "$TRAVIS_SECURE_ENV_VARS" == "true" ]]; then
Expand All @@ -34,18 +42,54 @@ upload_to_docker() {
echo 'skip docker upload for PR'
exit 0
fi
export REPO=$1
bash ./scripts/travis/upload-to-docker.sh

REPO=${1}
CMD_ROOT=${2}

unset major minor patch

if [[ "$BRANCH" == "master" ]]; then
TAG="latest"
elif [[ $BRANCH =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
major="${BASH_REMATCH[1]}"
minor="${BASH_REMATCH[2]}"
patch="${BASH_REMATCH[3]}"
TAG=${major}.${minor}.${patch}
echo "BRANCH is a release tag: major=$major, minor=$minor, patch=$patch"
else
TAG="${BRANCH///}"
fi

echo "TRAVIS_BRANCH=$TRAVIS_BRANCH, REPO=$REPO, BRANCH=$BRANCH, TAG=$TAG, IMAGE=$IMAGE"

IMAGE_TAGS="-t ${REPO}:${TAG}"

# add major, major.minor and major.minor.patch tags
if [[ -n $major ]]; then
IMAGE_TAGS="${IMAGE_TAGS} -t ${REPO}:${major}"
if [[ -n $minor ]]; then
IMAGE_TAGS="${IMAGE_TAGS} -t ${REPO}:${major}.${minor}"
if [[ -n $patch ]]; then
IMAGE_TAGS="${IMAGE_TAGS} -t ${REPO}:${major}.${minor}.${patch}"
fi
fi
fi

docker_buildx ${CMD_ROOT} ${IMAGE_TAGS} --platform=linux/amd64,linux/arm64 --push
}

make build-all-in-one GOOS=linux GOARCH=$GOARCH
make build-all-in-one GOOS=linux GOARCH=amd64
make build-all-in-one GOOS=linux GOARCH=arm64
repo=jaegertracing/all-in-one
docker build -f cmd/all-in-one/Dockerfile -t $repo:latest cmd/all-in-one --build-arg TARGETARCH=$GOARCH
docker_buildx cmd/all-in-one --load --platform=linux/amd64 -t $repo:latest
run_integration_test $repo
upload_to_docker $repo
upload_to_docker $repo cmd/all-in-one


make build-otel-all-in-one GOOS=linux GOARCH=$GOARCH
make build-otel-all-in-one GOOS=linux GOARCH=amd64
make build-otel-all-in-one GOOS=linux GOARCH=arm64
repo=jaegertracing/opentelemetry-all-in-one
docker build -f cmd/opentelemetry/cmd/all-in-one/Dockerfile -t $repo:latest cmd/opentelemetry/cmd/all-in-one --build-arg TARGETARCH=$GOARCH
docker_buildx cmd/opentelemetry/cmd/all-in-one --load --platform=linux/amd64 -t $repo:latest
run_integration_test $repo
upload_to_docker $repo
upload_to_docker $repo cmd/opentelemetry/cmd/all-in-one

61 changes: 61 additions & 0 deletions scripts/travis/setup-docker-buildx.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/bash

set -eux

# update docker
# for setup buildx https://travis-ci.community/t/installing-docker-19-03/8077/2
sudo apt update

sudo systemctl stop docker
sudo apt install -y docker.io

sudo systemctl unmask docker.service
sudo systemctl unmask docker.socket
sudo systemctl start docker
sudo systemctl status docker.socket

docker version

DOCKER_BUILDX_VERSION=v0.4.1

LOCAL_OS=$(uname -s | tr '[A-Z]' '[a-z]')

case $(uname -m) in
x86_64)
LOCAL_ARCH=amd64
;;
aarch64)
LOCAL_ARCH=arm64
;;
*)
echo "unsupported architecture"
exit 1
;;
esac

if [[ ! -f ~/.docker/cli-plugins/docker-buildx ]]; then
DOCKER_BUILDX_DOWNLOAD_URL=https://github.com/docker/buildx/releases/download/${DOCKER_BUILDX_VERSION}/buildx-${DOCKER_BUILDX_VERSION}.${LOCAL_OS}-${LOCAL_ARCH}
mkdir -p ~/.docker/cli-plugins
echo "downloading from ${DOCKER_BUILDX_DOWNLOAD_URL}"
curl -sL --output ~/.docker/cli-plugins/docker-buildx "${DOCKER_BUILDX_DOWNLOAD_URL}"
chmod a+x ~/.docker/cli-plugins/docker-buildx
fi

# enable buildx
export DOCKER_CLI_EXPERIMENTAL=enabled

# checkout buildx available
docker buildx version

# enabled qemu if needed
if [[ ! $(docker buildx inspect default | grep Platforms) == *arm64* ]]; then
docker run --rm --privileged multiarch/qemu-user-static --reset -p
fi

# setup builder if need
if [[ $(docker buildx inspect builder) == *"no builder"* ]]; then
docker buildx create --use --name=builder --platform=linux/amd64,linux/arm64 --driver-opt=image=moby/buildkit:master,network=host
fi

# log buildx detail
docker buildx inspect builder

0 comments on commit 63ead09

Please sign in to comment.