From 35d6f24fc8d9e35c1dd2f1853c6796d57c7faf8e Mon Sep 17 00:00:00 2001 From: Jeremy Mordkoff Date: Thu, 6 Oct 2016 16:17:05 -0700 Subject: [PATCH] refactored the git checkout code Signed-off-by: Jeremy Mordkoff --- jenkins/RO/start_build | 29 +------------------------- jenkins/SETTINGS | 9 ++++++++ jenkins/SO/start_build | 27 ++---------------------- jenkins/UI/start_build | 32 +++-------------------------- jenkins/common/all_funcs | 10 ++++----- jenkins/common/git_functions | 40 ++++++++++++++++++++++++++++++++++++ jenkins/common/logging | 12 +++++++++-- jenkins/template/start_build | 23 +-------------------- 8 files changed, 70 insertions(+), 112 deletions(-) create mode 100644 jenkins/common/git_functions diff --git a/jenkins/RO/start_build b/jenkins/RO/start_build index 4c9adfce..c711cd7b 100755 --- a/jenkins/RO/start_build +++ b/jenkins/RO/start_build @@ -25,36 +25,9 @@ OSM_JENKINS=$(dirname $HERE) # SET YOU MDG repository name here export OSM_MDG=RO OSM_load_config +OSM_git_checkout "$@" -# Updates all the branches in the local repo (clones if it does not exist) -if [ -d $OSM_MDG ]; then - INFO "reusing existing workspace" - cd $OSM_MDG - git pull --all - #git checkout master #to make sure that we are in the right branch before pulling the code - #git pull -else - INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG" - git clone $OSM_GIT_URL/$OSM_MDG - cd $OSM_MDG - for remote in `git branch -r`; do git branch --track ${remote#origin/} $remote; done -fi - -if [ $# -gt 0 ]; then - if [ "$1" = "checkout" ]; then - INFO "Code to compile: '$2'" - git checkout $2 - else - INFO "Code to compile: gerrit refspec '$1', commit-id: '$2'" - git fetch origin $1 || FATAL "git fetch origin '$1' didn't work" - git checkout -f $2 || FATAL "git checkout -f '$2' didn't work" - fi -else - INFO "Code to compile: master" - git checkout master -fi - INFO "starting build" INFO " cleaning .pyc" diff --git a/jenkins/SETTINGS b/jenkins/SETTINGS index 50bef014..c0a2c1ff 100644 --- a/jenkins/SETTINGS +++ b/jenkins/SETTINGS @@ -19,3 +19,12 @@ # # base url for all repositories OSM_GIT_URL=https://osm.etsi.org/gerrit/osm +# +# OSM_USE_LOCAL_DEVOPS +# +# this option disables the clone inside the +# the container and instead copies this directory tree +# into the container. Very useful for testing +# default is false +# +# OSM_USE_LOCAL_DEVOPS=true diff --git a/jenkins/SO/start_build b/jenkins/SO/start_build index 8094a39d..a672e149 100755 --- a/jenkins/SO/start_build +++ b/jenkins/SO/start_build @@ -25,32 +25,9 @@ OSM_JENKINS=$(dirname $HERE) # SET YOU MDG repository name here export OSM_MDG=SO OSM_load_config +OSM_git_checkout "$@" - -# Here is an example for how to handle an incremental build -if [ -d $OSM_MDG ]; then - INFO "reusing existing workspace" - cd $OSM_MDG - git pull -else - INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG" - git clone $OSM_GIT_URL/$OSM_MDG - cd $OSM_MDG -fi - -if [ $# -gt 0 ]; then - if [ "$1" = "checkout" ]; then - INFO "Code to compile: '$2'" - git checkout $2 - else - INFO "Code to compile: gerrit refspec '$1', commit-id: '$2'" - git fetch origin $1 || FATAL "git fetch origin '$1' didn't work" - git checkout -f $2 || FATAL "git checkout -f '$2' didn't work" - fi -else - INFO "Code to compile: master" - git checkout master -fi +trap 'WARNING "INTERRUPT"; exit 1' INT INFO "starting build" make clean || FATAL "make clean failed" diff --git a/jenkins/UI/start_build b/jenkins/UI/start_build index af495e96..50b2e06d 100755 --- a/jenkins/UI/start_build +++ b/jenkins/UI/start_build @@ -25,41 +25,15 @@ OSM_JENKINS=$(dirname $HERE) # SET YOU MDG repository name here export OSM_MDG=UI OSM_load_config +OSM_git_checkout "$@" -# Here is an example for how to handle an incremental build -if [ -d $OSM_MDG ]; then - INFO "reusing existing workspace" - cd $OSM_MDG - git pull -else - INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG" - git clone $OSM_GIT_URL/$OSM_MDG - cd $OSM_MDG -fi - -if [ $# -gt 0 ]; then - if [ "$1" = "checkout" ]; then - INFO "Code to compile: '$2'" - git checkout $2 - else - INFO "Code to compile: gerrit refspec '$1', commit-id: '$2'" - git fetch origin $1 || FATAL "git fetch origin '$1' didn't work" - git checkout -f $2 || FATAL "git checkout -f '$2' didn't work" - fi -else - INFO "Code to compile: master" - git checkout master -fi - INFO "starting build" make clean || FATAL "Make clean failed" make -j16 || FATAL "Make failed" sudo make install || FATAL "Make install Failed" -RC=0 - -INFO "done, RC=$RC" -exit $RC +INFO "build done" +exit 0 diff --git a/jenkins/common/all_funcs b/jenkins/common/all_funcs index 10b7650b..a8471087 100644 --- a/jenkins/common/all_funcs +++ b/jenkins/common/all_funcs @@ -22,9 +22,7 @@ if [ -z "$OSM_JENKINS" ]; then export OSM_JENKINS=$(realpath $(dirname ${BASH_SOURCE[0]} )) fi -. ${OSM_JENKINS}/common/logging -INFO "logging sourced" -. ${OSM_JENKINS}/common/config -INFO "config sourced" -. ${OSM_JENKINS}/common/container -INFO "container sourced" +for file in logging config container git_functions; do + . ${OSM_JENKINS}/common/$file + INFO "$file sourced" +done diff --git a/jenkins/common/git_functions b/jenkins/common/git_functions new file mode 100644 index 00000000..7856623b --- /dev/null +++ b/jenkins/common/git_functions @@ -0,0 +1,40 @@ +#!/bin/bash + + +GIT() { + + CMD git "$@" +} + + +OSM_git_checkout() { + + # Updates all the branches in the local repo (clones if it does not exist) + if [ -d $OSM_MDG ]; then + INFO "reusing existing workspace" + cd $OSM_MDG + GIT pull --all + #git checkout master #to make sure that we are in the right branch before pulling the code + #git pull + else + INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG" + GIT clone $OSM_GIT_URL/$OSM_MDG + cd $OSM_MDG + for remote in `git branch -r`; do GIT branch --track ${remote#origin/} $remote; done + fi + + if [ $# -gt 0 ]; then + if [ "$1" = "checkout" ]; then + INFO "Code to compile: '$2'" + GIT checkout $2 + else + INFO "Code to compile: gerrit refspec '$1', commit-id: '$2'" + GIT fetch origin $1 || FATAL "git fetch origin '$1' didn't work" + GIT checkout -f $2 || FATAL "git checkout -f '$2' didn't work" + fi + else + INFO "Code to compile: master" + GIT checkout master + fi + +} diff --git a/jenkins/common/logging b/jenkins/common/logging index 3eb4a0d2..a95b5633 100644 --- a/jenkins/common/logging +++ b/jenkins/common/logging @@ -35,13 +35,13 @@ print_stack() { FATAL() { - echo "### $(date) ${FUNCNAME[1]}: FATAL error: $*" >&2 + echo -e "\n### $(date) ${FUNCNAME[1]}: FATAL error: $*" >&2 print_stack exit 1 } WARNING() { - echo "### $(date) ${FUNCNAME[1]}: WARNING error: $*" >&2 + echo -e "\n### $(date) ${FUNCNAME[1]}: WARNING error: $*" >&2 } INFO() { @@ -51,3 +51,11 @@ INFO() { DEBUG() { echo "# $(date) ${FUNCNAME[1]}: $*" >&2 } + +CMD() { + echo "# executing '$*' ..." + "$@" + rc=$? + echo "# .... '$*' done RC was $rc" + return $rc +} diff --git a/jenkins/template/start_build b/jenkins/template/start_build index 2bd9074b..43ef1610 100755 --- a/jenkins/template/start_build +++ b/jenkins/template/start_build @@ -25,28 +25,7 @@ OSM_JENKINS=$(dirname $HERE) # SET YOU MDG repository name here export OSM_MDG=XXXX OSM_load_config - - -# Here is an example for how to handle an incremental build -if [ -d $OSM_MDG ]; then - INFO "reusing existing workspace" - cd $OSM_MDG - git pull -else - INFO "cloning MDG $OSM_MDG from $OSM_GIT_URL/$OSM_MDG" - git clone $OSM_GIT_URL/$OSM_MDG - cd $OSM_MDG -fi - -# Gerrit arranges to call this script with two parameters -- the refspec and commit ID that needs to be built -if [ $# -gt 0 ]; then - INFO "Code to compile: gerrit refspec '$1', commit-id: '$2'" - git fetch origin $1 || FATAL "git fetch origin '$1' didn't work" - git checkout -f $2 || FATAL "git checkout -f '$2' didn't work" -else - INFO "Code to compile: master" - git checkout master -fi +OSM_git_checkout "$@" INFO "starting build" ### for start_build -- 2.25.1