diff options
Diffstat (limited to 'ci')
-rw-r--r-- | ci/README | 106 | ||||
-rwxr-xr-x | ci/build.sh | 269 | ||||
-rwxr-xr-x | ci/deploy.sh | 8 |
3 files changed, 383 insertions, 0 deletions
diff --git a/ci/README b/ci/README new file mode 100644 index 000000000..aab823bc0 --- /dev/null +++ b/ci/README @@ -0,0 +1,106 @@ +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# stefan.k.berg@ericsson.com +# jonas.bjurel@ericsson.com +# 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 +############################################################################## + +The genesis/fuel/ci directory holds all Fuel@OPNFV abstractions for the OPNFV +community release and continous integration pipeline. +There are two Fuel@OPNF autonomous scripts fo this, complying to the OPNFV CI pipeline guideline: + - build.sh + - deploy.sh + +For more info on usage: +./build.sh -h +sudo ./deploy.sh -h +python deploy.py -h + +usage: python deploy.py [-h] [-nf] [-nh] [-fo] [-co] [-c] [-iso [ISO_FILE]] + [-dea [DEA_FILE]] [-dha [DHA_FILE]] [-s STORAGE_DIR] + [-b PXE_BRIDGE] [-p FUEL_PLUGINS_DIR] + +optional arguments: + -h, --help show this help message and exit + -nf Do not install Fuel Master (and Node VMs when using + libvirt) + -nh Don't run health check after deployment + -fo Install Fuel Master only (and Node VMs when using + libvirt) + -co Cleanup VMs and Virtual Networks according to what is + defined in DHA + -c Cleanup after deploy + -iso [ISO_FILE] ISO File [default: OPNFV.iso] + -dea [DEA_FILE] Deployment Environment Adapter: dea.yaml + -dha [DHA_FILE] Deployment Hardware Adapter: dha.yaml + -s STORAGE_DIR Storage Directory [default: images] + -b PXE_BRIDGE Linux Bridge for booting up the Fuel Master VM + [default: pxebr] + -p FUEL_PLUGINS_DIR Fuel Plugins directory + + + +* EXAMPLES: + +- Install Fuel Master and deploy OPNFV Cloud from scratch on Hardware Environment: + + sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr + + +- Install Fuel Master and deploy OPNFV Cloud from scratch on Virtual Environment: + + sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images + + +- Deploy OPNFV Cloud on an already active Environment where Fuel Master VM is running so no need to install Fuel again: + + sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml + + => with plugin installation + sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml + + => with cleanup after deployment is finished + sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -c + + => no healthcheck after deployment is completed + sudo ./deploy.sh -nf -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -nh + + +- Install Fuel Master only (and Node VMs when using virtual environment): + + => for virtual environment: + sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/virtual/dea.yaml -dha ~/CONF/virtual/dha.yaml -s /mnt/images + + => for hardware environment: + sudo ./deploy.sh -iso ~/ISO/opnfv.iso -dea ~/CONF/hardware/dea.yaml -dha ~/CONF/hardware/dha.yaml -s /mnt/images -b pxebr + + +- Cleanup a running OPNFV environment: + + sudo ./deploy.sh -co -dha ~/CONF/virtual/dha.yaml + + +* WARNINGS: + +=> If optional argument -s <storage_dir> is not specified, Autodeployment will use +"<current_working_dir>/images" as default, and it will create it, if it hasn't been created before + +=> If optional argument -b <pxe_bridge> is not specified, Autodeployment will use "pxebr" as default, +if the bridge does not exist, the application will terminate with an error message + +=> If argument -iso [ISO_FILE] is not specified, Autodeployment will use "<current_working_dir>/OPNFV.iso" +as default, if the iso file does not exist, the application will terminate with an error message + +=> If argument -dea [DEA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dea.yaml" +as default, if DEA file does not exist, the application will terminate with an error message + +=> If argument -dha [DHA_FILE] is not specified, Autodeployment will use "<current_working_dir>/dha.yaml" +as default, if DHA file does not exist, the application will terminate with an error message + +=> Optional argument -b PXE_BRIDGE is not required for Autodeployment in virtual environment, + even if it is specified it will not be used at all because virtual environment is using a different virtual network setup + +=> If optional argument -p FUEL_PLUGINS_DIR is not specified, no external plugins will be installed in Fuel
\ No newline at end of file diff --git a/ci/build.sh b/ci/build.sh new file mode 100755 index 000000000..62abba173 --- /dev/null +++ b/ci/build.sh @@ -0,0 +1,269 @@ +#!/bin/bash +############################################################################## +# Copyright (c) 2015 Ericsson AB and others. +# stefan.k.berg@ericsson.com +# jonas.bjurel@ericsson.com +# 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 +############################################################################## + +############################################################################ +# BEGIN of usage description +# +usage () +{ +cat | more << EOF +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +`basename $0`: Builds the Fuel@OPNFV stack + +usage: `basename $0` [-s spec-file] [-c cache-URI] [-l log-file] [-f flags] + [output-directory] + +OPTIONS: + -s spec-file (NOTE! DEPRECATED!) + define the build-spec file, default ../build/config.mk. The script only + verifies that the spec-file exists. + -c cache base URI + specifies the base URI to a build cache to be used/updated, supported + methods are http://, ftp:// and file:// + -l log-file + specifies the output log-file (stdout and stderr), if not specified + logs are output to console as normal + -v + version tag to be applied to the build result + -r + alternative remote access method script/program. curl is default. + -f flag[...] + build flags: + s: Do nothing, succeed + f: Do nothing, fail + D: Debug mode + P: Clear the local cache before building. This flag is only + valid if the "-c cache-URI" options has been specified and + and the method in the cache-URI is file:// (local cache). + + -h help, prints this help text + + output-directory, specifies the directory for the output artifacts + (.iso file). If no output-directory is specified, the current path + when calling the script is used. + + +Description: + +build.sh builds the opnfv .iso artifact. +To reduce build time it uses build caches on a local or remote location. A +cache is rebuilt and uploaded if either of the below conditions are met: +1) The P(opulate) flag is set and the -c cache-base-URI is provided and set + to the method file:// , if -c is + not provided the cache will stay local. +2) If a cache is invalidated by the make system - the exact logic is encoded + in the cache.mk of the different parts of the build. +3) A valid cache does not exist on the specified -c cache-base-URI. + +A cache has a blob (binary data) and a meta file in the format of: + <SHA1>.blob + <SHA1>.meta + +Logging is by default to console, but can be directed elsewhere with the -l +option in which case both stdout and stderr is redirected to that destination. + +Built in unit testing of components is enabled by adding the t(est) flag. + +Return codes: + - 0 Success! + - 1-99 Unspecified build error + - 100-199 Build system internal error (not build it self) + - 101 Build system instance busy + - 200 Build failure + +Examples: + build -c http://opnfv.org/artifactory/fuel/cache \ + -d ~/jenkins/genesis/fuel/ci/output -f ti + +NOTE: At current the build scope is set to the git root of the repository, -d + destination locations outside that scope will not work! +EOF +} +# +# END of usage description +############################################################################ + +############################################################################ +# BEGIN of function error_exit + +error_exit() { + echo "$@" >&2 + exit 1 +} + +# +# END of function error_exit +############################################################################ + + +############################################################################ +# BEGIN of shorthand variables for internal use +# +SCRIPT_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})) +BUILD_BASE=$(readlink -e ${SCRIPT_DIR}/../build/) +RESULT_DIR="${BUILD_BASE}/release" +BUILD_SPEC="${BUILD_BASE}/config.mk" +LOCAL_CACHE_ARCH_NAME="fuel-cache" + +# +# END of variables to customize +############################################################################ + +############################################################################ +# BEGIN of script assigned default variables +# +export CACHEBASE="file://$HOME/cache" +export CACHETRANSPORT="curl --silent" +CLEAR_CACHE=0 +MAKE_ARGS="" + +# +# END of script assigned variables +############################################################################ + +build() { + echo "CI build parameters:" + echo "SCRIPT_DIR = $SCRIPT_DIR" + echo "BUILD_BASE = $BUILD_BASE" + echo "RESULT_DIR = $RESULT_DIR" + echo "BUILD_SPEC = $BUILD_SPEC" + echo "LOCAL_CACHE_ARCH_NAME = $LOCAL_CACHE_ARCH_NAME" + echo "CLEAR_CACHE = $CLEAR_CACHE" + echo "DEBUG = $DEBUG" + echo "OUTPUT_DIR = $OUTPUT_DIR" + echo "BUILD_LOG = $BUILD_LOG" + echo "MAKE_ARGS = $MAKE_ARGS" + echo "CACHEBASE = $CACHEBASE" + echo "CACHETRANSPORT = $CACHETRANSPORT" + + + if [ "$CLEAR_CACHE" -eq 1 ]; then + echo $CACHEBASE | grep -q '^file://' $CACHE_BASE + if [ $? -ne 0 ]; then + error_exit "Can't clear a non-local cache!" + else + CACHEDIR=$(echo $CACHEBASE | sed 's;file://;;') + echo "Clearing local cache at $CACHEDIR..." + rm -rvf $CACHEDIR/* + fi + fi + + echo make ${MAKE_ARGS} cache + + cd ${BUILD_BASE} + if make ${MAKE_ARGS} cache; then + echo "Copying build result into $OUTPUT_DIR" + sort ${BUILD_BASE}/gitinfo*.txt > ${OUTPUT_DIR}/gitinfo.txt + cp ${RESULT_DIR}/*.iso ${OUTPUT_DIR} + cp ${RESULT_DIR}/*.iso.txt ${OUTPUT_DIR} + else + error_exit "Build failed" + fi +} + +############################################################################ +# BEGIN of main +# +while getopts "s:c:l:v:f:r:f:h" OPTION +do + case $OPTION in + s) + BUILD_SPEC=${OPTARG} + if [ ! -f ${BUILD_SPEC} ]; then + echo "spec file does not exist: $BUILD_SPEC - exiting ...." + exit 100 + fi + ;; + c) + # This value is used by cache.sh + export CACHEBASE=${OPTARG} + ;; + l) + BUILD_LOG=$(readlink -f ${OPTARG}) + ;; + v) + MAKE_ARGS+="REVSTATE=${OPTARG}" + ;; + r) + # This value is used by cache.sh + export CACHETRANSPORT=${OPTARG} + ;; + h) + usage + rc=0 + exit $rc + ;; + f) + BUILD_FLAGS=${OPTARG} + for ((i=0; i<${#BUILD_FLAGS};i++)); do + case ${BUILD_FLAGS:$i:1} in + s) + exit 0 + ;; + + f) + exit 1 + ;; + + P) + CLEAR_CACHE=1 + ;; + + D) + DEBUG=1 + ;; + + *) + error_exit "${BUILD_FLAGS:$i:1} is not a valid build flag - exiting ...." + ;; + esac + done + ;; + + *) + echo "${OPTION} is not a valid argument" + rc=100 + exit $rc + ;; + esac +done + +# Get output directory +shift $[$OPTIND - 1] +case $# in + 0) + # No directory on command line + OUTPUT_DIR=$(pwd) + ;; + 1) + # Directory on command line + OUTPUT_DIR=$(readlink -f $1) + ;; + *) + error_exit "Too many arguments" + ;; +esac +mkdir -p $OUTPUT_DIR || error_exit "Could not access output directory $OUTPUT_DIR" + + +if [ -n "${BUILD_LOG}" ]; then + touch ${BUILD_LOG} || error_exit "Could not write to log file ${BUILD_LOG}" + build 2>&1 | tee ${BUILD_LOG} +else + build +fi + +rc=$? +exit $rc + +# +# END of main +############################################################################ diff --git a/ci/deploy.sh b/ci/deploy.sh new file mode 100755 index 000000000..d5b70d0d6 --- /dev/null +++ b/ci/deploy.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -o errexit +topdir=$(dirname $(readlink -f $BASH_SOURCE)) +deploydir=$(cd ${topdir}/../deploy; pwd) +pushd ${deploydir} > /dev/null +echo -e "python deploy.py $@\n" +python deploy.py $@ +popd > /dev/null
\ No newline at end of file |