set -o pipefail
-echo "Starting opnfv-docker for $DOCKER_REPO_NAME ..."
+echo "Using Docker $(docker --version) on $NODE_NAME"
+echo "Starting Docker build for $DOCKER_REPO_NAME ..."
echo "--------------------------------------------------------"
echo
-
-if [[ -n $(ps -ef|grep 'docker build'|grep -v grep) ]]; then
- echo "There is already another build process in progress:"
- echo $(ps -ef|grep 'docker build'|grep -v grep)
- # Abort this job since it will collide and might mess up the current one.
- echo "Aborting..."
- exit 1
-fi
-
-# 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
+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"
-# 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_tags=($(docker images | grep $DOCKER_REPO_NAME | awk '{print $2}'))
- for tag in "${image_tags[@]}"; do
- if [[ -n "$(docker images|grep $DOCKER_REPO_NAME|grep $tag)" ]]; then
- echo "Removing docker image $DOCKER_REPO_NAME:$tag..."
- docker rmi -f $DOCKER_REPO_NAME:$tag
- fi
- done
-fi
-
-
-# cd to directory where Dockerfile is located
-cd $WORKSPACE/docker
-if [ ! -f ./Dockerfile ]; then
- echo "ERROR: Dockerfile not found."
- exit 1
-fi
+BUILD_BRANCH=$BRANCH
-# Get tag version
-branch="${GIT_BRANCH##origin/}"
-echo "Current branch: $branch"
+GERRIT_REFNAME=${GERRIT_REFNAME:-''}
+RELEASE_VERSION=${GERRIT_REFNAME/refs\/tags//}
-if [[ "$branch" == "master" ]]; then
+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=$branch ."
+cmd="docker build --pull=true --no-cache -t $DOCKER_REPO_NAME:$DOCKER_TAG --build-arg BRANCH=$BUILD_BRANCH
+ $ARCH_BUILD_ARG
+ -f $DOCKERFILE $DOCKER_PATH"
echo ${cmd}
${cmd}
echo
docker push $DOCKER_REPO_NAME:$DOCKER_TAG
fi
+
+# Remove the existing containers and images after building
+remove_containers_images