blob: 69a9f89c7fa3250b5a20052059348ca2db72f788 (
plain)
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
|
#!/bin/bash
# SPDX-license-identifier: Apache-2.0
##############################################################################
# Copyright (c) 2016 Ericsson AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -o errexit
set -o nounset
set -o pipefail
echo "Starting opnfv-docker for $DOCKER_REPO_NAME ..."
echo "--------------------------------------------------------"
echo
function remove_containers_images()
{
# Remove previous running containers if exist
if [[ -n "$(docker ps -a | grep $DOCKER_REPO_NAME)" ]]; then
echo "Removing existing $DOCKER_REPO_NAME containers..."
docker ps -a | grep $DOCKER_REPO_NAME | awk '{print $1}' | xargs docker rm -f
t=60
# Wait max 60 sec for containers to be removed
while [[ $t -gt 0 ]] && [[ -n "$(docker ps| grep $DOCKER_REPO_NAME)" ]]; do
sleep 1
let t=t-1
done
fi
# Remove existing images if exist
if [[ -n "$(docker images | grep $DOCKER_REPO_NAME)" ]]; then
echo "Docker images to remove:"
docker images | head -1 && docker images | grep $DOCKER_REPO_NAME
image_ids=($(docker images | grep $DOCKER_REPO_NAME | awk '{print $3}'))
for id in "${image_ids[@]}"; do
if [[ -n "$(docker images|grep $DOCKER_REPO_NAME|grep $id)" ]]; then
echo "Removing docker image $DOCKER_REPO_NAME:$id..."
docker rmi -f $id
fi
done
fi
}
count=30 # docker build jobs might take up to ~30 min
while [[ -n `ps -ef| grep 'docker build' | grep $DOCKER_REPO_NAME | grep -v grep` ]]; do
echo "Build or cleanup of $DOCKER_REPO_NAME in progress. Waiting..."
sleep 60
count=$(( $count - 1 ))
if [ $count -eq 0 ]; then
echo "Timeout. Aborting..."
exit 1
fi
done
# Remove the existing containers and images before building
remove_containers_images
DOCKER_PATH=$WORKSPACE/$DOCKER_DIR
cd $DOCKER_PATH || exit 1
HOST_ARCH="$(uname -m)"
#If there is a patch for other arch then x86, apply the patch and
#replace Dockerfile file
dockerfile_patch="Dockerfile.${HOST_ARCH}.patch"
if [[ -f "${dockerfile_patch}" ]]; then
patch -f Dockerfile -p1 < "${dockerfile_patch}"
fi
# Get tag version
echo "Current branch: $BRANCH"
BUILD_BRANCH=$BRANCH
GERRIT_REFNAME=${GERRIT_REFNAME:-''}
RELEASE_VERSION=${GERRIT_REFNAME/refs\/tags//}
if [[ "$BRANCH" == "master" ]]; then
DOCKER_TAG="latest"
elif [[ -n "${RELEASE_VERSION-}" ]]; then
DOCKER_TAG=${RELEASE_VERSION}
if git checkout ${RELEASE_VERSION}; then
echo "Successfully checked out the git tag ${RELEASE_VERSION}"
else
echo "The tag ${RELEASE_VERSION} doesn't exist in the repository. Existing tags are:"
git tag
exit 1
fi
else
DOCKER_TAG="stable"
fi
if [[ -n "${COMMIT_ID-}" && -n "${RELEASE_VERSION-}" ]]; then
DOCKER_TAG=$RELEASE_VERSION
BUILD_BRANCH=$COMMIT_ID
fi
ARCH_BUILD_ARG=""
ARCH_TAG=${ARCH_TAG:-}
if [[ -n "${ARCH_TAG}" ]]; then
DOCKER_TAG=${ARCH_TAG}-${DOCKER_TAG}
ARCH_BUILD_ARG="--build-arg ARCH=${ARCH_TAG}"
fi
# Start the build
echo "Building docker image: $DOCKER_REPO_NAME:$DOCKER_TAG"
echo "--------------------------------------------------------"
echo
cmd="docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG --build-arg BRANCH=$BUILD_BRANCH
$ARCH_BUILD_ARG
-f $DOCKERFILE $DOCKER_PATH"
echo ${cmd}
${cmd}
# list the images
echo "Available images are:"
docker images
# Push image to Dockerhub
if [[ "$PUSH_IMAGE" == "true" ]]; then
echo "Pushing $DOCKER_REPO_NAME:$DOCKER_TAG to the docker registry..."
echo "--------------------------------------------------------"
echo
docker push $DOCKER_REPO_NAME:$DOCKER_TAG
fi
# Remove the existing containers and images after building
remove_containers_images
|