summaryrefslogtreecommitdiffstats
path: root/jjb/opnfv/opnfv-docker.sh
blob: 860eee05d74513b712be7fe0eebddf7778f5b165 (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
#!/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


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 colide 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
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_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

# If we just want to update the latest_stable image
if [[ "$UPDATE_LATEST_STABLE" == "true" ]]; then
    echo "Pulling $DOCKER_REPO_NAME:$STABLE_TAG ..."
    docker pull $DOCKER_REPO_NAME:$STABLE_TAG
    if [[ $? -ne 0 ]]; then
        echo "ERROR: The image $DOCKER_REPO_NAME with tag $STABLE_TAG does not exist."
        exit 1
    fi
    docker tag -f $DOCKER_REPO_NAME:$STABLE_TAG $DOCKER_REPO_NAME:latest_stable
    echo "Pushing $DOCKER_REPO_NAME:latest_stable ..."
    docker push $DOCKER_REPO_NAME:latest_stable
    exit 0
fi


# cd to directory where Dockerfile is located
if [[ "$DOCKER_REPO_NAME" == "opnfv/bottlenecks" ]]; then
    cd $WORKSPACE/ci/docker
elif [[ "$DOCKER_REPO_NAME" == "opnfv/cperf" ]]; then
    cd $WORKSPACE/docker
elif [[ "$DOCKER_REPO_NAME" == "opnfv/functest" ]]; then
    cd $WORKSPACE/docker
elif [[ "$DOCKER_REPO_NAME" == "opnfv/qtip" ]]; then
    cd $WORKSPACE/docker
elif [[ "$DOCKER_REPO_NAME" == "opnfv/storperf" ]]; then
    cd $WORKSPACE/docker
elif [[ "$DOCKER_REPO_NAME" == "opnfv/yardstick" ]]; then
    cd $WORKSPACE/tests/ci/docker/yardstick-ci
else
    echo "ERROR: DOCKER_REPO_NAME parameter not valid: $DOCKER_REPO_NAME"
    exit 1
fi

# Get tag version
branch="${GIT_BRANCH##origin/}"
echo "Current branch: $branch"

if [[ "$branch" == "master" ]]; then
    DOCKER_TAG="master"
    DOCKER_BRANCH_TAG="latest"
else
    git clone https://gerrit.opnfv.org/gerrit/releng $WORKSPACE/releng

    DOCKER_TAG=$($WORKSPACE/releng/utils/calculate_version.sh -t docker \
        -n $DOCKER_REPO_NAME)
    DOCKER_BRANCH_TAG="stable"

    ret_val=$?
    if [[ $ret_val -ne 0 ]]; then
        echo "Error retrieving the version tag."
        exit 1
    fi
fi
echo "Tag version to be build and pushed: $DOCKER_TAG"


# Start the build
echo "Building docker image: $DOCKER_REPO_NAME:$DOCKER_BRANCH_TAG"

docker build --no-cache -t $DOCKER_REPO_NAME:$DOCKER_BRANCH_TAG --build-arg BRANCH=$branch .
echo "Creating tag '$DOCKER_TAG'..."
docker tag -f $DOCKER_REPO_NAME:$DOCKER_BRANCH_TAG $DOCKER_REPO_NAME:$DOCKER_TAG

# 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
    # Push to the Dockerhub repository
    echo "Pushing $DOCKER_REPO_NAME:$DOCKER_BRANCH_TAG ..."
    docker push $DOCKER_REPO_NAME:$DOCKER_BRANCH_TAG

    echo "Pushing $DOCKER_REPO_NAME:$DOCKER_TAG ..."
    docker push $DOCKER_REPO_NAME:$DOCKER_TAG
fi