forked from kubevirt/kubevirt
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdockerized
executable file
·151 lines (123 loc) · 5.03 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
141
142
143
144
145
146
147
148
149
150
151
#!/usr/bin/env bash
set -e
source $(dirname "$0")/common.sh
if [ "${KUBEVIRT_RUN_UNNESTED}" == "true" ]; then
/bin/bash -c "$@"
exit $?
fi
KUBEVIRT_BUILDER_IMAGE="kubevirt/builder@sha256:e6a76ec71f2de87c3bc648bae87ab43a113540bf57da69f07f76bd0edfd500ab"
SYNC_OUT=${SYNC_OUT:-true}
BUILDER=${job_prefix}
SYNC_VENDOR=${SYNC_VENDOR:-false}
TEMPFILE=".rsynctemp"
# Be less verbose with bazel
# For ppc64le the bazel server seems to be running out of memory in the Travis CI, so forcing no concurrent jobs to be run
if [ -n "${TRAVIS_JOB_ID}" ]; then
cat >ci.bazelrc <<EOF
common --noshow_progress --noshow_loading_progress
build:ppc64le --jobs=1
run:ppc64le --jobs=1
EOF
fi
# 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 ${KUBEVIRT_BUILDER_IMAGE} 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 ${KUBEVIRT_BUILDER_IMAGE} /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 "$@"
}
# 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-up/cluster/**/.kubectl' \
--exclude 'cluster-up/cluster/**/.oc' \
--exclude 'cluster-up/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"
# add custom docker certs, if needed
if [ -n "$DOCKER_CA_CERT_FILE" ] && [ -f "$DOCKER_CA_CERT_FILE" ]; then
volumes="$volumes -v ${DOCKER_CA_CERT_FILE}:${DOCKERIZED_CUSTOM_CA_PATH}:ro,z"
fi
# Ensure that a bazel server which is running is the correct one
if [ -n "$(docker ps --format '{{.Names}}' | grep ${BUILDER}-bazel-server)" ]; then
# check if the image is correct
builder_id=$(docker inspect ${KUBEVIRT_BUILDER_IMAGE} | docker run --rm -i imega/jq:1.6 ".[0].Id")
bazel_server_id=$(docker inspect ${BUILDER}-bazel-server | docker run --rm -i imega/jq:1.6 ".[0].Image")
if [ "${builder_id}" != "${bazel_server_id}" ]; then
echo "Bazel server is outdated, restarting ..."
docker stop ${BUILDER}-bazel-server
fi
fi
# 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 ${KUBEVIRT_BUILDER_IMAGE} hack/bazel-server.sh
fi
# Update cert trust, if custom is provided
if [ -n "$DOCKER_CA_CERT_FILE" ] && [ -f "$DOCKER_CA_CERT_FILE" ]; then
docker exec ${BUILDER}-bazel-server /entrypoint.sh "/usr/bin/update-ca-trust"
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 'cluster-up/cluster/**/.kubectl' \
--exclude 'cluster-up/cluster/**/.oc' \
--exclude 'cluster-up/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/examples/" "${KUBEVIRT_DIR}/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