Create generic jenkins job to build and push a docker image 89/3489/10
authorjose.lausuch <jose.lausuch@ericsson.com>
Fri, 20 Nov 2015 15:36:21 +0000 (16:36 +0100)
committerjose.lausuch <jose.lausuch@ericsson.com>
Thu, 26 Nov 2015 12:36:06 +0000 (13:36 +0100)
This is a proposal so that we use the same methodology when it comes
to building and pushing docker images. With this approach, yardstick
Makefile is not needed for automation.
For now, it is usable by Yardstick and Functest docker images.

JIRA: RELENG-55

Change-Id: I58cfb4740cdfca82f69c102caefe9f29c92f099e
Signed-off-by: jose.lausuch <jose.lausuch@ericsson.com>
jjb/functest/functest-docker.sh [deleted file]
jjb/opnfv/opnfv-docker.sh [new file with mode: 0644]
jjb/opnfv/opnfv-docker.yml [moved from jjb/functest/functest-docker.yml with 66% similarity]

diff --git a/jjb/functest/functest-docker.sh b/jjb/functest/functest-docker.sh
deleted file mode 100644 (file)
index c73bcf9..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/bash
-set -o errexit
-set -o nounset
-set -o pipefail
-
-
-echo "Starting the build of Functest Docker."
-echo "--------------------------------------------------------"
-echo
-
-DOCKER_IMAGE_NAME="opnfv/functest"
-
-
-# Get tag version
-cd $WORKSPACE
-git clone https://gerrit.opnfv.org/gerrit/releng
-
-DOCKER_TAG=$($WORKSPACE/releng/utils/calculate_version.sh -t docker \
-    -n $DOCKER_IMAGE_NAME)
-
-ret_val=$?
-if [ $ret_val -ne 0 ]; then
-    echo "Error retrieving the version tag."
-    exit 1
-else
-    echo "Tag version to be build and pushed: $DOCKER_TAG"
-fi
-
-
-# Remove previous running containers if exist
-if [[ ! -z $(docker ps -a | grep $DOCKER_IMAGE_NAME) ]]; then
-    echo "Removing existing $DOCKER_IMAGE_NAME containers..."
-    docker ps | grep $DOCKER_IMAGE_NAME | awk '{{print $1}}' | xargs docker stop
-    docker ps -a | grep $DOCKER_IMAGE_NAME | awk '{{print $1}}' | xargs docker rm
-fi
-
-
-# Remove existing images if exist
-if [[ ! -z $(docker images | grep $DOCKER_IMAGE_NAME) ]]; then
-    echo "Docker images to remove:"
-    docker images | head -1 && docker images | grep $DOCKER_IMAGE_NAME
-    image_tags=($(docker images | grep $DOCKER_IMAGE_NAME | awk '{{print $2}}'))
-    for tag in "${{image_tags[@]}}"; do
-        echo "Removing docker image $DOCKER_IMAGE_NAME:$tag..."
-        docker rmi $DOCKER_IMAGE_NAME:$tag
-    done
-fi
-
-
-# Start the build
-echo "Building docker image: $DOCKER_IMAGE_NAME:$DOCKER_TAG..."
-cd $WORKSPACE/docker
-docker build -t $DOCKER_IMAGE_NAME:$DOCKER_TAG .
-echo "Creating tag 'latest'..."
-docker tag $DOCKER_IMAGE_NAME:$DOCKER_TAG $DOCKER_IMAGE_NAME:latest
-
-# list the images
-echo "Available images are:"
-docker images
-
-
-if [ "$PUSH_IMAGE" == "true" ]; then
-    echo "Pushing $DOCKER_IMAGE_NAME:$DOCKER_TAG to the docker registry..."
-    echo "--------------------------------------------------------"
-    echo
-    # Push to the Dockerhub repository
-    docker push $DOCKER_IMAGE_NAME:$DOCKER_TAG
-
-    echo "Updating $DOCKER_IMAGE_NAME:latest to the docker registry..."
-    docker push $DOCKER_IMAGE_NAME:latest
-fi
diff --git a/jjb/opnfv/opnfv-docker.sh b/jjb/opnfv/opnfv-docker.sh
new file mode 100644 (file)
index 0000000..0301444
--- /dev/null
@@ -0,0 +1,93 @@
+#!/bin/bash
+set -o errexit
+set -o nounset
+set -o pipefail
+
+
+echo "Starting opnfv-docker for $DOCKER_REPO_NAME ..."
+echo "--------------------------------------------------------"
+echo
+
+
+# Remove previous running containers if exist
+if [[ ! -z $(docker ps -a | grep $DOCKER_REPO_NAME) ]]; then
+    echo "Removing existing $DOCKER_REPO_NAME containers..."
+    docker ps | grep $DOCKER_REPO_NAME | awk '{{print $1}}' | xargs docker stop
+    docker ps -a | grep $DOCKER_REPO_NAME | awk '{{print $1}}' | xargs docker rm
+fi
+
+
+# Remove existing images if exist
+if [[ ! -z $(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
+        echo "Removing docker image $DOCKER_REPO_NAME:$tag..."
+        docker rmi $DOCKER_REPO_NAME:$tag
+    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 $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
+
+
+# Get tag version
+cd $WORKSPACE
+git clone https://gerrit.opnfv.org/gerrit/releng
+
+DOCKER_TAG=$($WORKSPACE/releng/utils/calculate_version.sh -t docker \
+    -n $DOCKER_REPO_NAME)
+
+ret_val=$?
+if [ $ret_val -ne 0 ]; then
+    echo "Error retrieving the version tag."
+    exit 1
+else
+    echo "Tag version to be build and pushed: $DOCKER_TAG"
+fi
+
+
+# cd to directory where Dockerfile is located
+if [[ "$DOCKER_REPO_NAME" == "opnfv/functest" ]]; then
+    cd $WORKSPACE/docker
+elif [[ "$DOCKER_REPO_NAME" == "opnfv/yardstick" ]]; then
+    cd $WORKSPACE/ci/docker/yardstick-ci
+else
+    echo "ERROR: DOCKER_REPO_NAME parameter not valid: $DOCKER_REPO_NAME"
+    exit 1
+fi
+
+# Start the build
+echo "Building docker image: $DOCKER_REPO_NAME:$DOCKER_TAG..."
+
+docker build -t $DOCKER_REPO_NAME:$DOCKER_TAG .
+echo "Creating tag 'latest'..."
+docker tag $DOCKER_REPO_NAME:$DOCKER_TAG $DOCKER_REPO_NAME:latest
+
+# 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
+    docker push $DOCKER_REPO_NAME:$DOCKER_TAG
+
+    echo "Updating $DOCKER_REPO_NAME:latest to the docker registry..."
+    docker push $DOCKER_REPO_NAME:latest
+fi
\ No newline at end of file
similarity index 66%
rename from jjb/functest/functest-docker.yml
rename to jjb/opnfv/opnfv-docker.yml
index ee5adc6..dfff050 100644 (file)
@@ -1,15 +1,17 @@
 ##############################################
-# job configuration for functest docker build
+# job configuration for docker build and push
 ##############################################
 
 - project:
 
-    name: functest-docker
+    name: opnfv-docker
 
-    project: 'functest'
+    project:
+        - 'functest'
+        - 'yardstick'
 
     jobs:
-        - 'functest-docker-build-push-{stream}'
+        - '{project}-docker-build-push-{stream}'
 
     stream:
         - master:
@@ -18,9 +20,8 @@
 ########################
 # job templates
 ########################
-
 - job-template:
-    name: 'functest-docker-build-push-{stream}'
+    name: '{project}-docker-build-push-{stream}'
 
     project-type: freestyle
 
     parameters:
         - project-parameter:
             project: '{project}'
-        - functest-docker-parameter
-
+        - string:
+            name: GIT_BASE
+            default: "https://gerrit.opnfv.org/gerrit/$PROJECT"
+            description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
+        - string:
+            name: PUSH_IMAGE
+            default: "true"
+            description: "To enable/disable pushing the image to Dockerhub."
+        - string:
+            name: BASE_VERSION
+            default: "brahmaputra.0"
+            description: "Base version to be used."
+        - string:
+            name: DOCKER_REPO_NAME
+            default: "opnfv/{project}"
+            description: "Dockerhub repo to be pushed to."
+        - string:
+            name: UPDATE_LATEST_STABLE
+            default: "false"
+            description: "This will update the latest_stable image only."
+        - string:
+            name: STABLE_TAG
+            description: "If above option is true, this is the tag to be pulled."
 
     scm:
         - git-scm:
 
     builders:
         - shell:
-            !include-raw ./functest-docker.sh
+            !include-raw ./opnfv-docker.sh
 
     triggers:
         - pollscm: "*/30 * * * *"
-
-
-########################
-# parameter macros
-########################
-- parameter:
-    name: functest-docker-parameter
-    parameters:
-        - string:
-            name: GIT_BASE
-            default: "https://gerrit.opnfv.org/gerrit/$PROJECT"
-            description: "Used for overriding the GIT URL coming from Global Jenkins configuration in case if the stuff is done on none-LF HW."
-        - string:
-            name: PUSH_IMAGE
-            default: "true"
-            description: "To enable/disable pushing the image to Dockerhub."
-        - string:
-            name: BASE_VERSION
-            default: "brahmaputra.0"
-            description: "Base version to be used."