forked from kubevirt/kubevirt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdockerized
executable file
·140 lines (111 loc) · 4.28 KB
/
dockerized
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#!/usr/bin/env bash
set -e
source $(dirname "$0")/common.sh
DOCKER_DIR=${KUBEVIRT_DIR}/hack/kubevirt-builder
SYNC_OUT=${SYNC_OUT:-true}
BUILDER=${job_prefix}
SYNC_VENDOR=${SYNC_VENDOR:-false}
TEMPFILE=".rsynctemp"
BUILDER_EXTRA_ARGS=""
if [ -n "${KUBEVIRT_CACHE_FROM}" ]; then
BUILDER_EXTRA_ARGS="${BUILDER_EXTRA_ARGS} --cache-from kubevirt/builder-cache:${KUBEVIRT_CACHE_FROM}"
fi
if [ -n "${KUBEVIRT_UPDATE_CACHE_FROM}" ]; then
BUILDER_EXTRA_ARGS="${BUILDER_EXTRA_ARGS} -t kubevirt/builder-cache:${KUBEVIRT_UPDATE_CACHE_FROM}"
fi
# Be less verbose with bazel
if [ -n "${TRAVIS_JOB_ID}" ]; then
cat >.bazelrc <<EOF
common --noshow_progress --noshow_loading_progress
EOF
fi
# Build the build container
(cd ${DOCKER_DIR} && docker build . ${BUILDER_EXTRA_ARGS} -t ${BUILDER})
# Create the persistent docker volume
if [ -z "$(docker volume list | grep ${BUILDER})" ]; then
docker volume create --name ${BUILDER}
fi
# Make sure that the output directory exists
docker run -v "${BUILDER}:/root:rw,z" --security-opt label:disable --rm ${BUILDER} mkdir -p /root/go/src/kubevirt.io/kubevirt/_out
# Start an rsyncd instance and make sure it gets stopped after the script exits
RSYNC_CID=$(docker run -d -v "${BUILDER}:/root:rw,z" --security-opt label:disable --expose 873 -P ${BUILDER} /usr/bin/rsync --no-detach --daemon --verbose)
function finish() {
docker stop ${RSYNC_CID} >/dev/null 2>&1 &
docker rm -f ${RSYNC_CID} >/dev/null 2>&1 &
}
trap finish EXIT
RSYNCD_PORT=$(docker port $RSYNC_CID 873 | cut -d':' -f2)
rsynch_fail_count=0
while ! rsync ${KUBEVIRT_DIR}/${RSYNCTEMP} "rsync://[email protected]:${RSYNCD_PORT}/build/${RSYNCTEMP}" &>/dev/null; do
if [[ "$rsynch_fail_count" -eq 0 ]]; then
printf "Waiting for rsyncd to be ready"
sleep .1
elif [[ "$rsynch_fail_count" -lt 30 ]]; then
printf "."
sleep 1
else
printf "failed"
break
fi
rsynch_fail_count=$((rsynch_fail_count + 1))
done
printf "\n"
rsynch_fail_count=0
_rsync() {
rsync -al "$@"
}
# For backward compatibility. If vendorless branches are used we need to make sure
# that they can sync again.
rm -f ${KUBEVIRT_DIR}/.glide*.hash
# Copy kubevirt into the persistent docker volume
_rsync \
--delete \
--exclude 'bazel-bin' \
--exclude 'bazel-genfiles' \
--exclude 'bazel-kubevirt' \
--exclude 'bazel-out' \
--exclude 'bazel-testlogs' \
--exclude 'cluster/**/.kubectl' \
--exclude 'cluster/**/.oc' \
--exclude 'cluster/**/.kubeconfig' \
--exclude "_out" \
--exclude ".vagrant" \
${KUBEVIRT_DIR}/ \
"rsync://[email protected]:${RSYNCD_PORT}/build"
volumes="-v ${BUILDER}:/root:rw,z"
# append .docker directory as volume
mkdir -p "${HOME}/.docker"
volumes="$volumes -v ${HOME}/.docker:/root/.docker:ro,z"
# Ensure that a bazel server is running
if [ -z "$(docker ps --format '{{.Names}}' | grep ${BUILDER}-bazel-server)" ]; then
docker run --network host -d ${volumes} --security-opt label:disable --name ${BUILDER}-bazel-server -w "/root/go/src/kubevirt.io/kubevirt" --rm ${BUILDER} hack/bazel-server.sh
fi
# Run the command
test -t 1 && USE_TTY="-it"
docker exec ${USE_TTY} ${BUILDER}-bazel-server /entrypoint.sh "$@"
# Copy the whole kubevirt data out to get generated sources and formatting changes
_rsync \
--exclude 'bazel-bin' \
--exclude 'bazel-genfiles' \
--exclude 'bazel-kubevirt' \
--exclude 'bazel-out' \
--exclude 'bazel-testlogs' \
--exclude '.glide*' \
--exclude 'cluster/**/.kubectl' \
--exclude 'cluster/**/.oc' \
--exclude 'cluster/**/.kubeconfig' \
--exclude "_out" \
--exclude "vendor" \
--exclude ".vagrant" \
--exclude ".git" \
"rsync://[email protected]:${RSYNCD_PORT}/build" \
${KUBEVIRT_DIR}/
_rsync --delete "rsync://[email protected]:${RSYNCD_PORT}/build/manifests/generated/" "${KUBEVIRT_DIR}/manifests/generated"
_rsync --delete "rsync://[email protected]:${RSYNCD_PORT}/build/cluster/examples/" "${KUBEVIRT_DIR}/cluster/examples"
if [ "$SYNC_VENDOR" = "true" ]; then
_rsync --delete "rsync://[email protected]:${RSYNCD_PORT}/vendor" "${VENDOR_DIR}/"
fi
# Copy the build output out of the container, make sure that _out exactly matches the build result
if [ "$SYNC_OUT" = "true" ]; then
_rsync --delete "rsync://[email protected]:${RSYNCD_PORT}/out" ${OUT_DIR}
fi