123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- def String PATCH_VERSION = new Date().format('yyMMddHHmm')
- def String INTERN_PORT = Math.abs( new Random().nextInt() % (22000 - 21000) ) + 21000
- def 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()
- }
- }
- }
|