| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 | def String PATCH_VERSION = new Date().format('yyMMddHHmm')def String INTERN_PORT = Math.abs( new Random().nextInt() % (22000 - 21000) ) + 21000def String SELENIUM_DOCKER_NAME = "selenium-" + System.currentTimeMillis()pipeline {	agent { label getPipelineSlaveLabel()  }	options {		buildDiscarder(logRotator(numToKeepStr:'10'))		timestamps()	}	environment {		RELEASE_NAME=asap("getBuildProperty releaseName")		RETRY_TIMES=asap("getBuildProperty retryTimes")		NPM_READ_REPOSITORY=asap("getBuildProperty NPM_READ_REPOSITORY")		NPM_WRITE_REPOSITORY=asap("getBuildProperty NPM_WRITE_REPOSITORY")		DOCKER_READ_REPOSITORY=asap("getBuildProperty DOCKER_READ_REPOSITORY")		MAJOR_VERSION=asap("getBuildProperty majorVersion")		MINOR_VERSION=asap("getBuildProperty minorVersion")		COMPONENT_VERSION="$MAJOR_VERSION.$MINOR_VERSION.$PATCH_VERSION"		COMPONENT_NAME=asap("getBuildProperty componentName")		IMAGE_TAG="$COMPONENT_NAME-image"		ASAP_PROPERTY_FILE=asap("getBuildProperty ASAP_PROPERTY_FILE")		DOCKER_OPTS="--rm --user \$(id -u):\$(id -g) -v \$(pwd):/usr/src -w /usr/src -v \$(pwd):/root --env-file ${ASAP_PROPERTY_FILE}"		NPM="docker run ${DOCKER_OPTS} ${IMAGE_TAG} npm"		SELENIUM_DOCKER_IMAGE = asap("getBuildProperty SELENIUM_DOCKER_IMAGE")		SELENIUM_DOCKER_VERSION = asap("getBuildProperty SELENIUM_DOCKER_VERSION")		SELENIUM_DOCKER_NAME="$SELENIUM_DOCKER_NAME"		SELENIUM_PORT=4444		INTERN_PORT="$INTERN_PORT"	}	stages {		stage('Pre-build') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					script {						Map scopeMap = [							'@watsonanalytics':"${NPM_READ_REPOSITORY}",							'@waca':"${NPM_READ_REPOSITORY}",							'@businessanalytics':"${NPM_READ_REPOSITORY}"						]						asapMakeNpmrc(registry: "${NPM_READ_REPOSITORY}", scopeMap: scopeMap)					}					sh "docker build \						--no-cache \						--tag ${IMAGE_TAG} \						--file ./Dockerfile \						."				}			}		}		stage('Build') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					sh "$NPM version $COMPONENT_VERSION"					sh "$NPM install"					sh "$NPM run build"				}			}		}		stage('Setup docker for Selenium') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					sh (						label: "Clean up old selenium containers",						script: "docker rm -f -v ${SELENIUM_DOCKER_NAME} || true"					)					sh (						label: "Run selenium for testing",						script: "docker run --detach --name ${SELENIUM_DOCKER_NAME} -v /dev/shm:/dev/shm selenium/${SELENIUM_DOCKER_IMAGE}:${SELENIUM_DOCKER_VERSION}" //Maps to port 4444					)				}			}		}		stage('Test') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			environment {				SELENIUM_SERVER = sh (						label: "Get selenium server ip",						script: "docker inspect --format=\'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}\' ${SELENIUM_DOCKER_NAME}",						returnStdout: true					).trim()			}			steps {				retry(RETRY_TIMES) {					sh "$NPM run jest-tests"				}			}		}		stage('Publish Artifact to NPM registry') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					script{						def scopeMap = [:]						scopeMap =[							'@waca':"${NPM_WRITE_REPOSITORY}",						]						asapMakeNpmrc(registry:"${NPM_READ_REPOSITORY}", scopeMap: scopeMap)						sh "$NPM publish --registry ${NPM_WRITE_REPOSITORY}"					}				}			}		}		stage('ASAP Integration testing') {			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					script {						DO_PROMOTE=env.BRANCH_NAME == asap("getBuildProperty releaseName") || env.BRANCH_NAME == 'master'						asap("setBuildProperty promote=$DO_PROMOTE")						asap("testAndPromote")					}				}			}		}		stage('Trigger Downstream') {			agent any			when { expression { return env.RELEASE_NAME == env.BRANCH_NAME } }			steps {				retry(RETRY_TIMES) {					build job: "BusinessAnalytics/glass-foundation/${BRANCH_NAME}", wait: false				}			}		}	}	post {		failure {			script {				if(env.RELEASE_NAME == env.BRANCH_NAME) {					pipelineSlackSendBuildInfo(currentBuild, "", '#ba-glass-builds')				}			}		}		always {			sh "docker rm -f -v ${SELENIUM_DOCKER_NAME} || true"			asapPipelineTeardown()		}	}}
 |