forked from metabase/metabase
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild_image.sh
executable file
·103 lines (71 loc) · 2.65 KB
/
build_image.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#! /usr/bin/env bash
set -e
BASEDIR=$(dirname $0)
PROJECT_ROOT="$BASEDIR/../.."
DOCKERHUB_NAMESPACE=metabase
BUILD_TYPE=$1
if [ -z $BUILD_TYPE ]; then
echo "usage: $0 <source|release> <release-name> [--publish]"
exit 1
fi
MB_TAG=$2
if [ -z $MB_TAG ]; then
echo "usage: $0 <source|release> <release-name> [--publish] [--latest]"
exit 1
fi
if [ "$3" == "--publish" ]; then
PUBLISH="YES"
fi
if [ "$4" == "--latest" ]; then
LATEST="YES"
fi
if [ "$PUBLISH" == "YES" ] && [ -z "$DOCKERHUB_USERNAME" -o -z "$DOCKERHUB_PASSWORD" ]; then
echo "In order to publish an image to Dockerhub you must set \$DOCKERHUB_USERNAME and \$DOCKERHUB_PASSWORD before running."
exit 1
fi
# TODO: verify we have access to docker cmd and minimum version?
if [ "$BUILD_TYPE" == "release" ]; then
DOCKERHUB_REPOSITORY=metabase
DOCKER_IMAGE="${DOCKERHUB_NAMESPACE}/${DOCKERHUB_REPOSITORY}:${MB_TAG}"
echo "Building Docker image ${DOCKER_IMAGE} from official Metabase release ${MB_TAG}"
# download the official version of Metabase which matches our tag
curl -f -o ${BASEDIR}/metabase.jar http://downloads.metabase.com/${MB_TAG}/metabase.jar
if [[ $? -ne 0 ]]; then
echo "Download failed!"
exit 1
fi
else
DOCKERHUB_REPOSITORY=metabase-head
DOCKER_IMAGE="${DOCKERHUB_NAMESPACE}/${DOCKERHUB_REPOSITORY}:${MB_TAG}"
echo "Building Docker image ${DOCKER_IMAGE} from local source"
# trigger a full build
${PROJECT_ROOT}/bin/build
if [ $? -eq 1 ]; then
echo "Build failed!"
exit 1
fi
# copy our built uberjar so that we can add it to our image
cp ${PROJECT_ROOT}/target/uberjar/metabase.jar ${BASEDIR}/metabase.jar
fi
# now tell docker to build our image
# TODO: —-no-cache=true
docker build -t ${DOCKER_IMAGE} $BASEDIR
# TODO: validate our built docker image
if [ "$PUBLISH" == "YES" ]; then
echo "Publishing image ${DOCKER_IMAGE} to Dockerhub"
# make sure that we are logged into dockerhub
docker login --username="${DOCKERHUB_USERNAME}" --password="${DOCKERHUB_PASSWORD}"
# push the built image to dockerhub
docker push ${DOCKER_IMAGE}
# TODO: quick check against dockerhub to see that our new image made it
if [ "$LATEST" == "YES" ]; then
# tag our recent versioned image as "latest"
docker tag -f ${DOCKER_IMAGE} ${DOCKERHUB_NAMESPACE}/${DOCKERHUB_REPOSITORY}:latest
# then push it as well
docker push ${DOCKERHUB_NAMESPACE}/${DOCKERHUB_REPOSITORY}:latest
# TODO: validate push succeeded
fi
fi
# TODO: cleanup after ourselves and remove the Metabase binary we downloaded
rm -f ${BASEDIR}/metabase.jar
echo "Done"