######################## # Job configuration for genesis/fuel ######################## - project: name: genesis-fuel project: 'genesis' installer: 'fuel' jobs: - 'genesis-fuel-verify-build-{stream}' - 'genesis-fuel-merge-{stream}' - 'genesis-fuel-daily-{stream}' - 'genesis-fuel-build-{stream}' - 'genesis-fuel-deploy-{stream}' - 'genesis-fuel-deploy-runner-{stream}' - 'genesis-fuel-lab-reconfig-{stream}' - 'genesis-fuel-verify-deploy-virtual-{stream}' # stream: branch with - in place of / (eg. stable-arno) # branch: branch (eg. stable/arno) stream: - master: branch: 'master' gs-pathname: '' - stable-arno: branch: 'stable/arno' gs-pathname: '/arno' ######################## # job templates ######################## - job-template: name: 'genesis-fuel-verify-build-{stream}' project-type: freestyle node: ericsson-build concurrent: true properties: - throttle: enabled: true max-total: 3 logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - fuel-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' scm: - gerrit-trigger-scm: credentials-id: '{ssh-credentials}' refspec: '$GERRIT_REFSPEC' choosing-strategy: 'gerrit' wrappers: - ssh-agent-credentials: user: '{ssh-credentials}' triggers: - gerrit: trigger-on: - patchset-created-event: exclude-drafts: 'false' exclude-trivial-rebase: 'false' exclude-no-code-change: 'false' - draft-published-event - comment-added-contains-event: comment-contains-value: 'recheck' - comment-added-contains-event: comment-contains-value: 'reverify' projects: - project-compare-type: 'ANT' project-pattern: 'genesis' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' file-paths: - compare-type: ANT pattern: 'common/ci/**' - compare-type: ANT pattern: 'common/manifests/**' - compare-type: ANT pattern: 'common/puppet-opnfv/**' - compare-type: ANT pattern: 'common/tools/**' - compare-type: ANT pattern: '{installer}/build/**' - compare-type: ANT pattern: '{installer}/ci/**' - compare-type: ANT pattern: '{installer}/deploy/**' - compare-type: ANT pattern: '{installer}/include/**' - compare-type: ANT pattern: '{installer}/prototypes/**' forbidden-file-paths: - compare-type: ANT pattern: 'common/docs/**' - compare-type: ANT pattern: '{installer}/docs/**' builders: - 'fuel-build' - 'fuel-workspace-cleanup' - job-template: name: 'genesis-fuel-merge-{stream}' project-type: freestyle node: ericsson-build concurrent: true properties: - throttle: enabled: true max-total: 2 logrotate: daysToKeep: 30 numToKeep: 40 artifactDaysToKeep: -1 artifactNumToKeep: 5 parameters: - project-parameter: project: '{project}' - gerrit-parameter: branch: '{branch}' - fuel-parameter: installer: '{installer}' gs-pathname: '' scm: - gerrit-trigger-scm: credentials-id: '{ssh-credentials}' refspec: '' choosing-strategy: 'default' wrappers: - ssh-agent-credentials: user: '{ssh-credentials}' triggers: - gerrit: trigger-on: - change-merged-event - comment-added-contains-event: comment-contains-value: 'remerge' projects: - project-compare-type: 'ANT' project-pattern: 'genesis' branches: - branch-compare-type: 'ANT' branch-pattern: '**/{branch}' file-paths: - compare-type: ANT pattern: 'common/ci/**' - compare-type: ANT pattern: 'common/manifests/**' - compare-type: ANT pattern: 'common/puppet-opnfv/**' - compare-type: ANT pattern: 'common/tools/**' - compare-type: ANT pattern: '{installer}/build/**' - compare-type: ANT pattern: '{installer}/ci/**' - compare-type: ANT pattern: '{installer}/deploy/**' - compare-type: ANT pattern: '{installer}/include/**' - compare-type: ANT pattern: '{installer}/prototypes/**' forbidden-file-paths: - compare-type: ANT pattern: 'common/docs/**' - compare-type: ANT pattern: '{installer}/docs/**' builders: - 'fuel-build' - 'fuel-workspace-cleanup' - job-template: name: 'genesis-fuel-daily-{stream}' project-type: freestyle node: ericsson-build disabled: false triggers: - 'fuel-{stream}' parameters: - project-parameter: project: '{project}' - fuel-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: '{branch}' logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 builders: - trigger-builds: - project: 'genesis-fuel-build-{stream}' git-revision: true block: true - trigger-builds: - project: 'genesis-fuel-lab-reconfig-{stream}' git-revision: true block: true - trigger-builds: - project: 'genesis-fuel-deploy-{stream}' git-revision: true block: true - trigger-builds: - project: 'functest-fuel-{stream}' block: true block-thresholds: build-step-failure-threshold: 'never' failure-threshold: 'never' unstable-threshold: 'FAILURE' # - trigger-builds: # - project: 'yardstick-fuel-{stream}' # block: true # block-thresholds: # build-step-failure-threshold: 'never' # failure-threshold: 'never' # unstable-threshold: 'FAILURE' - job-template: name: 'genesis-fuel-deploy-runner-{stream}' project-type: freestyle disabled: false node: master logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 parameters: - project-parameter: project: '{project}' - foreman-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' - string: name: GIT_BASE default: ssh://gerrit.opnfv.org:29418/$PROJECT description: "Used for overriding the GIT URL coming from parameters macro." scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: '{branch}' properties: - build-blocker: use-build-blocker: true blocking-jobs: - "genesis-foreman-daily.*" - "genesis-foreman-deploy-runner-{stream}" - "genesis-fuel-daily.*" builders: - 'fuel-lab-reconfig' - trigger-builds: - project: 'genesis-fuel-deploy-{stream}' git-revision: true block: true - job-template: name: 'genesis-fuel-build-{stream}' project-type: freestyle node: ericsson-build logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 parameters: - project-parameter: project: '{project}' - fuel-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: '{branch}' builders: - 'fuel-build' - 'fuel-upload-artifact' - 'fuel-workspace-cleanup' publishers: - email: recipients: jonas.bjurel@ericsson.com stefan.k.berg@ericsson.com - job-template: name: 'genesis-fuel-deploy-{stream}' project-type: freestyle disabled: false node: opnfv-jump-2 parameters: - project-parameter: project: '{project}' - fuel-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' - string: name: GIT_BASE default: ssh://gerrit.opnfv.org:29418/$PROJECT description: "POD2 has some issues with cloning using https so that's why GIT_BASE is overriden here again." scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: '{branch}' logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 builders: - 'fuel-download-artifact' - 'fuel-odl-plugin-build' - 'fuel-deploy' publishers: - email: recipients: jonas.bjurel@ericsson.com stefan.k.berg@ericsson.com - job-template: name: 'genesis-fuel-lab-reconfig-{stream}' project-type: freestyle disabled: false node: master logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 parameters: - project-parameter: project: '{project}' - fuel-parameter: installer: '{installer}' gs-pathname: '{gs-pathname}' - string: name: GIT_BASE default: ssh://gerrit.opnfv.org:29418/$PROJECT description: "Used for overriding the GIT URL coming from parameters macro." scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: '{branch}' properties: - build-blocker: use-build-blocker: true blocking-jobs: - "genesis-foreman-daily.*" builders: - 'fuel-lab-reconfig' - job-template: name: 'genesis-fuel-verify-deploy-virtual-{stream}' project-type: freestyle disabled: true node: ericsson-build parameters: - project-parameter: project: '{project}' - fuel-parameter: installer: '{installer}' gs-pathname: '' scm: - git-scm: credentials-id: '{ssh-credentials}' refspec: '' branch: 'master' logrotate: daysToKeep: 30 numToKeep: 10 artifactDaysToKeep: -1 artifactNumToKeep: -1 builders: - 'fuel-deploy-virtual' ######################## # parameter macros ######################## - parameter: name: fuel-parameter parameters: - string: name: INSTALLER default: '{installer}' description: "Installer to use." - string: name: BUILD_DIRECTORY default: $WORKSPACE/build_output description: "Directory where the build artifact will be located upon the completion of the build." - string: name: CACHE_DIRECTORY default: $HOME/opnfv/cache/genesis-$INSTALLER description: "Directory where the cache to be used during the build is located." - 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: GS_URL default: artifacts.opnfv.org/$PROJECT/$INSTALLER{gs-pathname} description: "URL to Google Storage." ######################## # builder macros ######################## - builder: name: 'fuel-build' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # log info to console echo "Starting the build of $INSTALLER. This could take some time..." echo "--------------------------------------------------------" echo # create the cache directory if it doesn't exist [[ -d $CACHE_DIRECTORY ]] || mkdir -p $CACHE_DIRECTORY # set OPNFV_ARTIFACT_VERSION export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S") # start the build cd $WORKSPACE/$INSTALLER/ci ./build.sh -v $OPNFV_ARTIFACT_VERSION -c file://$CACHE_DIRECTORY $BUILD_DIRECTORY # list the build artifacts ls -al $BUILD_DIRECTORY # save information regarding artifact into file ( echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION" echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)" echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)" echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso" echo "OPNFV_ARTIFACT_MD5SUM=$(md5sum $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso | cut -d' ' -f1)" echo "OPNFV_BUILD_URL=$BUILD_URL" ) > $WORKSPACE/opnfv.properties echo echo "--------------------------------------------------------" echo "Done!" - builder: name: 'fuel-odl-plugin-build' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # install dependencies if they are not available already if [[ ! $(rpm -qa | grep rubygems) ]]; then echo "Rubygems not found, but required for Fuel Plugin build ... attempting to install" sudo yum install -y rubygems ruby-devel fi if [[ ! $(gem list | grep fpm) ]]; then echo "fpm gem not found, but required for Fuel Plugin build ... attempting to install" sudo gem install fpm fi if [[ ! $(pip list | grep fuel-plugin-builder) ]]; then echo "fuel-plugin-builder not found, but required for Fuel Plugin build ... attempting to install" sudo pip install fuel-plugin-builder fi # log info to console echo "Starting the build of Fuel Opendaylight Plugin. This could take some time..." echo "--------------------------------------------------------" echo export ODL_PLUGIN_BRANCH="juno/lithium-sr1" cd $WORKSPACE git clone https://github.com/stackforge/fuel-plugin-opendaylight pushd $WORKSPACE/fuel-plugin-opendaylight git checkout $ODL_PLUGIN_BRANCH popd fpb --build fuel-plugin-opendaylight/ echo echo "--------------------------------------------------------" echo "Done!" - builder: name: 'fuel-deploy' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # source the file so we get OPNFV vars source latest.properties # echo the info about artifact that is used during the deployment echo "Using $(echo $OPNFV_ARTIFACT_URL | cut -d'/' -f4) for deployment" # create TMPDIR if it doesn't exist export TMPDIR=$HOME/tmpdir [[ -d $TMPDIR ]] || mkdir -p $TMPDIR # change permissions down to TMPDIR chmod a+x $HOME chmod a+x $TMPDIR # set CONFDIR, BRIDGE export CONFDIR=$WORKSPACE/fuel/deploy/templates/hardware_environment/conf/linux_foundation_lab/pod2 export BRIDGE=pxebr export PLUGIN=$WORKSPACE/fuel-plugin-opendaylight # cleanup first sudo $WORKSPACE/common/ci/clean.sh -base_config $WORKSPACE/foreman/ci/inventory/lf_pod2_ksgen_settings.yml # prepare for Fuel Deployment sudo $WORKSPACE/common/ci/setup.sh # log info to console echo "Starting the deployment using $INSTALLER. This could take some time..." echo "--------------------------------------------------------" echo # start the deployment echo "Issuing command" echo "sudo $WORKSPACE/fuel/ci/deploy.sh -iso $WORKSPACE/opnfv.iso -dea $CONFDIR/dea.yaml -dha $CONFDIR/dha.yaml -s $TMPDIR -b $BRIDGE -p $PLUGIN -nh" sudo $WORKSPACE/fuel/ci/deploy.sh -iso $WORKSPACE/opnfv.iso -dea $CONFDIR/dea.yaml -dha $CONFDIR/dha.yaml -s $TMPDIR -b $BRIDGE -p $PLUGIN -nh echo echo "--------------------------------------------------------" echo "Done!" - builder: name: 'fuel-deploy-virtual' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # log info to console echo "Starting the deployment on virtual environment using $INSTALLER. This could take some time..." echo "--------------------------------------------------------" echo ssh -o BatchMode=yes -o TCPKeepAlive=yes cideploy@10.118.34.205 ./cideploy.sh echo echo "--------------------------------------------------------" echo "Done!" - builder: name: 'fuel-upload-artifact' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # log info to console echo "Uploading the $INSTALLER artifact. This could take some time..." echo "--------------------------------------------------------" echo # source the opnfv.properties to get ARTIFACT_VERSION source $WORKSPACE/opnfv.properties # upload artifact and additional files to google storage gsutil cp $BUILD_DIRECTORY/opnfv-$OPNFV_ARTIFACT_VERSION.iso gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso > gsutil.iso.log 2>&1 gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.properties > gsutil.properties.log 2>&1 gsutil cp $WORKSPACE/opnfv.properties gs://$GS_URL/latest.properties > gsutil.latest.log 2>&1 echo echo "--------------------------------------------------------" echo "Done!" echo "Artifact is available as http://$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso" - builder: name: 'fuel-download-artifact' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # get the latest.properties file in order to get info regarding latest artifact curl -s -o $WORKSPACE/latest.properties http://$GS_URL/latest.properties # check if we got the file [[ -f latest.properties ]] || exit 1 # source the file so we get OPNFV vars source latest.properties # log info to console echo "Downloading the $INSTALLER artifact using URL http://$OPNFV_ARTIFACT_URL" echo "This could take some time..." echo "--------------------------------------------------------" echo # download the file curl -s -o $WORKSPACE/opnfv.iso http://$OPNFV_ARTIFACT_URL > gsutil.iso.log 2>&1 # list the file ls -al $WORKSPACE/opnfv.iso echo echo "--------------------------------------------------------" echo "Done!" - builder: name: 'fuel-workspace-cleanup' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # delete everything that is in $WORKSPACE /bin/rm -rf $WORKSPACE - builder: name: 'fuel-lab-reconfig' builders: - shell: | #!/bin/bash set -o errexit set -o nounset set -o pipefail # check to see if ucs login info file exists if [ -e ~/.ssh/ucs_creds ];then source ~/.ssh/ucs_creds else echo "Unable to find UCS credentials for LF lab reconfiguration...Exiting" exit 1 fi # clone releng echo "Cloning releng repo..." if ! GIT_SSL_NO_VERIFY=true git clone https://gerrit.opnfv.org/gerrit/releng; then echo "Unable to clone releng repo...Exiting" exit 1 fi # log info to console echo "Starting the lab reconfiguration for $INSTALLER..." echo "--------------------------------------------------------" echo # create venv $WORKSPACE/releng/utils/lab-reconfiguration/create_venv.sh # disable nounset because 'activate' script contains unbound variable(s) set +o nounset # enter venv source $WORKSPACE/releng/utils/lab-reconfiguration/venv/bin/activate # set nounset back again set -o nounset # verify we are in venv if [[ ! $(which python | grep venv) ]]; then echo "Unable to activate venv...Exiting" exit 1 fi python $WORKSPACE/releng/utils/lab-reconfiguration/reconfigUcsNet.py -i $ucs_host -u $ucs_user -p $ucs_password -f $WORKSPACE/releng/utils/lab-reconfiguration/fuel.yaml # while undergoing reboot sleep 30 # check to see if slave is back up ping_counter=0 ping_flag=0 while [ "$ping_counter" -lt 20 ]; do if [[ $(ping -c 5 172.30.10.72) ]]; then ping_flag=1 break fi ((ping_counter++)) sleep 10 done if [ "$ping_flag" -eq 1 ]; then echo "Slave is pingable, now wait 180 seconds for services to start" sleep 180 else echo "Slave did not come back up after reboot: please check opnfv-jump-2" exit 1 fi set +o nounset deactivate echo echo "--------------------------------------------------------" echo "Done!" ######################## # trigger macros ######################## - trigger: name: 'fuel-master' triggers: - timed: '0 3 * * *' - trigger: name: 'fuel-stable-arno' triggers: - timed: '0 7 * * *'