diff options
Diffstat (limited to 'valetapi/Jenkinsfile')
-rw-r--r-- | valetapi/Jenkinsfile | 276 |
1 files changed, 276 insertions, 0 deletions
diff --git a/valetapi/Jenkinsfile b/valetapi/Jenkinsfile new file mode 100644 index 0000000..cc778d7 --- /dev/null +++ b/valetapi/Jenkinsfile @@ -0,0 +1,276 @@ +#!/usr/bin/env groovy + + +properties([[$class: 'ParametersDefinitionProperty', parameterDefinitions: [ +[$class: 'hudson.model.StringParameterDefinition', name: 'PHASE', defaultValue: "BUILD_DEPLOY"], +[$class: 'hudson.model.StringParameterDefinition', name: 'TARGET_ENV', defaultValue: "DEV"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_CLUSTER_URL',defaultValue: "https://k8s.onap.org"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_CONTEXT',defaultValue: "default"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_USERNAME',defaultValue: "root"], +[$class: 'hudson.model.PasswordParameterDefinition', name: 'K8S_PASSWORD',defaultValue: "k8s_password"], +[$class: 'hudson.model.PasswordParameterDefinition', name: 'K8S_TOKEN',defaultValue: "k8suser@fgps.onap.org:enc:dfxissWKLGRuldTwXuAuK-WAT-b-f-wS"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_NAME',defaultValue: "DEV"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_PODS_REPLICAS',defaultValue: "1"], +[$class: 'hudson.model.StringParameterDefinition', name: 'K8S_SERVICE_ACCOUNT',defaultValue: "default"], +[$class: 'hudson.model.BooleanParameterDefinition', name: 'USE_ROOT_NS',defaultValue: false], +[$class: 'hudson.model.StringParameterDefinition', name: 'BROKER_URL',defaultValue: "http://broker.onap.org:30120"], +[$class: 'hudson.model.StringParameterDefinition', name: 'PACT_USERNAME', defaultValue: "pactadmin"], +[$class: 'hudson.model.PasswordParameterDefinition', name: 'PACT_PASSWORD', defaultValue: "pactadmin"], +[$class: 'hudson.model.StringParameterDefinition', name: 'CONSUMER', defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'GIT_REPO_FOLDER',defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'DEV_TEST_GIT_APP',defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'DEV_TEST_SERVER_URL',defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'LISA_PATH', defaultValue: "/opt/app/workload/tools/itko/server/9.5.1/Projects/"], +[$class: 'hudson.model.StringParameterDefinition', name: 'TEST_CASE_PATH',defaultValue: "/Tests/HelloTest.tst"], +[$class: 'hudson.model.StringParameterDefinition', name: 'SUITE_CASE_PATH', defaultValue: "/Tests/Suites/AllTestsSuite.ste"], +[$class: 'hudson.model.StringParameterDefinition', name: 'CONFIG_PATH', defaultValue: "/Configs/project.config"], +[$class: 'hudson.model.StringParameterDefinition', name: 'STAGING_DOC_PATH',defaultValue: "/Tests/StagingDocs/Run1User1Cycle.stg"], + +[$class: 'hudson.model.StringParameterDefinition', name: 'ANS_ROLE',defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'ANS_INVENTORY',defaultValue: "inventory/dev/hosts"], +[$class: 'hudson.model.StringParameterDefinition', name: 'GITPlaybookPATH', defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'GITConfigRolePATH', defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'SONAR_BREAKER_SKIP',defaultValue: "True"], +[$class: 'hudson.model.StringParameterDefinition', name: 'SONAR_BREAKER_QRY_INTERVAL',defaultValue: "7000"], +[$class: 'hudson.model.StringParameterDefinition', name: 'SONAR_BREAKER_QRY_MAXATTEMPTS',defaultValue: "100"], +[$class: 'hudson.model.StringParameterDefinition', name: 'ECO_PIPELINE_ID',defaultValue: ""], +[$class: 'hudson.model.StringParameterDefinition', name: 'BUILD_VERSION',defaultValue: ""] +]]]) + + +/** + jdk1.8 = fixed name for java + M3 = fixed name for maven + general_maven_settings = fixed name for maven settings Jenkins managed file +*/ + +echo "Build branch: ${env.BRANCH_NAME}" + +node("docker") { + stage 'Checkout' + checkout scm + + pom = readMavenPom file: 'pom.xml' + PROJECT_NAME = pom.properties['namespace'] + ":" + pom.artifactId; +// env.SERVICE_NAME=pom.artifactId; + env.APP_NAME=pom.artifactId; + + env.SERVICE_NAME=pom.properties['serviceArtifactName'] + env.VERSION=pom.version; + + env.ANS_ROLE=SERVICE_NAME+"_configrole" + env.BUILDNUMBER_TIMESTAMP="${BUILD_NUMBER}"+"-"+"${currentBuild.timeInMillis}" + + echo "ANS_ROLE: ${ANS_ROLE}" + + LABEL_VERSION=pom.version.replaceAll(".", "-"); + echo "LabelVerion: " + LABEL_VERSION + NAMESPACE=pom.properties['namespace'] + + TARGET_ENV=TARGET_ENV.toLowerCase() + if(params.USE_ROOT_NS) + { + env.KUBE_NAMESPACE=pom.properties['kube.namespace'] + }else{ + env.KUBE_NAMESPACE=pom.properties['kube.namespace']+"-"+TARGET_ENV + } + + if(TARGET_ENV!="dev"){ + env.ANS_INVENTORY="inventory/"+TARGET_ENV+"/hosts" + echo "ANS_INVENTORY: ${ANS_INVENTORY}" + } + + env.TARGET_ENV=TARGET_ENV + REPLICA_COUNT="${params.K8S_PODS_REPLICAS}" + env.IMAGE_NAME=pom.properties['docker.registry']+"/"+NAMESPACE+"/"+SERVICE_NAME+":latest" + if (env.TARGET_ENV == "prod") { + env.IMAGE_NAME=pom.properties['docker.registry']+"/"+NAMESPACE+"/"+SERVICE_NAME+":release" + } + echo "Artifact: " + PROJECT_NAME + env.DOCKER_HOST="tcp://localhost:4243" + env.DOCKER_CONFIG="${WORKSPACE}/.docker" + def branchName + //This value can ideally come from pom as in IMAGE_NAME + def dockerRegistry = "nexus.onap.org:5100" + + if(params.BUILD_VERSION != "") + { + echo "BUILD VERSION Set : " + BUILD_VERSION + currentBuild.displayName = "VERSION-${BUILD_VERSION}" + currentBuild.description = "${BUILD_VERSION} ${ECO_PIPELINE_ID} ${PHASE}" + }else{ + echo "BUILD VERSION Not Set, Use pom version: " + VERSION + currentBuild.displayName = "VERSION-" +VERSION + currentBuild.description = "${VERSION} ${ECO_PIPELINE_ID} ${PHASE}" + } + + env.KUBECTL_OPTS="--server=${K8S_CLUSTER_URL} --insecure-skip-tls-verify=true --password=${K8S_PASSWORD} --username=${K8S_USERNAME}" + env.K8S_SERVER_CREDENTIALS = " k8server=${K8S_CLUSTER_URL}:6443 k8susername=${K8S_USERNAME} k8spassword=${K8S_PASSWORD} k8stoken=${K8S_TOKEN}" + if ("${K8S_TOKEN}" != "" ) { + env.KUBECTL_OPTS = "--server=${K8S_CLUSTER_URL} --insecure-skip-tls-verify=true --token=${K8S_TOKEN}" + env.K8S_SERVER_CREDENTIALS =" k8server=${K8S_CLUSTER_URL}:6443 k8susername= k8spassword= k8stoken=${K8S_TOKEN}" + } + + //echo "env.KUBECTL_OPTS=${KUBECTL_OPTS}" + //echo "K8S_SERVER_CREDENTIALS=${K8S_SERVER_CREDENTIALS}" + + //IST Variable + LISA_PATH_NEW="${LISA_PATH}"+SERVICE_NAME + + // Create kubectl.conf file here from Pipeline properties provided. + + withEnv(["PATH=${env.PATH}:${tool 'M3'}/bin:${tool 'jdk1.8'}/bin", "JAVA_HOME=${tool 'jdk1.8'}", "MAVEN_HOME=${tool 'M3'}"]) { + + echo "JAVA_HOME=${env.JAVA_HOME}" + echo "MAVEN_HOME=${env.MAVEN_HOME}" + echo "PATH=${env.PATH}" + + wrap([$class: 'ConfigFileBuildWrapper', managedFiles: [ + [fileId: 'maven-settings.xml', variable: 'MAVEN_SETTINGS'], + [fileId: 'sonar-secret.txt', variable: 'SONAR_SECRET'], + [fileId: 'sonar.properties', variable: 'SONAR_PROPERTIES'] + ]]) { + + branchName = (env.BRANCH_NAME ?: "master").replaceAll(/[^0-9a-zA-Z_]/, "-") + + + if ("${PHASE}" == "BUILD" || "${PHASE}" == "BUILD_DEPLOY" ) { + + stage 'Compile' + sh 'mvn -DskipTests -Dmaven.test.skip=true -s $MAVEN_SETTINGS -Ddummy.prop=$SONAR_PROPERTIES clean compile' + + stage 'Unit Test' + sh 'mvn -s $MAVEN_SETTINGS verify -P all-tests' + + stage 'Package' + sh 'mvn -DskipTests -Dmaven.test.skip=true -s $MAVEN_SETTINGS package' + + stage 'Verify' + sh 'mvn -DskipTests -Dmaven.test.skip=true -s $MAVEN_SETTINGS verify' + + + if ("${DEV_TEST_GIT_APP}" != "") { + + stage("CADev Repo Update") { + def GitinvokeURL = "${DEV_TEST_GIT_APP}/gitapp/service/git/push?gitUrl=${GIT_REPO_FOLDER}/${SERVICE_NAME}" + sh "curl -i -X GET \'${GitinvokeURL}\'" + } + + stage("Component Test Using CA DEV TEST") { + + def invokeURL = "${DEV_TEST_SERVER_URL}/lisa-invoke/runTest?testCasePath=${LISA_PATH_NEW}${TEST_CASE_PATH}&stagingDocPath=${LISA_PATH_NEW}${STAGING_DOC_PATH}" + sh "curl -i \'${invokeURL}\'" + invokeURL = "${DEV_TEST_SERVER_URL}/lisa-invoke/runSuite?suitePath=${LISA_PATH_NEW}${SUITE_CASE_PATH}&configPath=${LISA_PATH_NEW}${CONFIG_PATH}" + sh "curl -i \'${invokeURL}\'" + } + } + + stage 'Component Test Using Mockito' + sh 'mvn -s $MAVEN_SETTINGS -Dtest=ITComponentTest test' + + stage 'Publish Artifact' + //sh 'docker ps' + sh 'mvn -DskipTests -Dmaven.test.skip=true -Dhttps.protocols="TLSv1" -Djavax.net.ssl.trustStore="/opt/app/etc/cacerts.jks" -Djavax.net.ssl.trustStorePassword="password" -Djavax.net.ssl.keyStore="/opt/app/etc/cacerts.jks" -Djavax.net.ssl.keyStorePassword="password" -s $MAVEN_SETTINGS -U docker:build docker:push' + + } + + if ("${PHASE}" == "BUILD_DEPLOY" || "${PHASE}" == "DEPLOY" || "${PHASE}" == "CONFIG") { + // deploy to k8s + + stage ('Clone playbook and configrole') { + + // read values captured at the generate time + env.REPO_PROJECT = readFile './repoproject.txt' + env.REPO_PROJECT= "${REPO_PROJECT.trim()}" + // put some if conditions to use below values if empty above. + if(params.GITPlaybookPATH==""){ + GITPlaybookPATH="https://git.onap.org/scm/"+"${REPO_PROJECT}"+"/"+SERVICE_NAME+"_playbook.git" + } + echo "GITPlaybookPATH: ${GITPlaybookPATH}" + if(params.GITConfigRolePATH==""){ + GITConfigRolePATH="https://git.onap.org/scm/"+"${REPO_PROJECT}"+"/"+SERVICE_NAME+"_configrole.git" + } + echo "GITConfigRolePATH: ${GITConfigRolePATH}" + + env.dockermechid = readFile './dockerbuilduser.txt' + env.dockermechid = "${dockermechid.trim()}" + env.repogitid = readFile './repogitid.txt' + env.repogitid = "${repogitid.trim()}" + echo "repogitid : ${repogitid}" + + withCredentials([usernamePassword(credentialsId: env.repogitid, usernameVariable: 'ITS_SECRET_USERNAME', passwordVariable: 'ITS_SECRET_PASSWORD')]) { + env.DOCKER_HOST='unix:///var/run/docker.sock' + env.ANS_HOST = params.ANS_HOST ?: new URL("${params.K8S_CLUSTER_URL}").getHost() + + sh 'rm -rf playbook' + + dir('playbook') { + git url: "${GITPlaybookPATH}", credentialsId: "${repogitid}" + } + + + dir("playbook/roles/${ANS_ROLE}") { + if (branchName != 'master'){ + echo "branchName: ${branchName}" + git url: "${GITConfigRolePATH}", credentialsId: "${repogitid}", branch: "${branchName}" + } + else{ + echo "else branchName: ${branchName}" + git url: "${GITConfigRolePATH}", credentialsId: "${repogitid}" + } + } + } + } + + } + + if ( "${PHASE}" == "CONTRACT_GENERATE") { + stage 'Contract Generate Publish and QG2' + sh 'mvn -s $MAVEN_SETTINGS -Dtest=PactTestSuit test -DBROKER_URL=${BROKER_URL} -DuserName=${PACT_USERNAME} -Dpassword=${PACT_PASSWORD}' + sh 'mvn -s $MAVEN_SETTINGS pact:publish -DBROKER_URL=${BROKER_URL} -DuserName=${PACT_USERNAME} -Dpassword=${PACT_PASSWORD}' + } + + if ("${PHASE}" == "CONTRACT_VERIFY" ) { + stage ('Contract Verify' ){ + withEnv([ + "APP_NAME=${SERVICE_NAME}", + "K8S_CTX=${K8S_CONTEXT}", + "APP_NS=${KUBE_NAMESPACE}", + "KUBECTL=/opt/app/kubernetes/v1.5.2/bin/kubectl", + ]) { + def CLUSTER_URL=K8S_CLUSTER_URL.substring(8) + + NODE_PORT = sh ( + script: '${KUBECTL} get service ${APP_NAME} --namespace ${APP_NS} --context ${K8S_CTX} ${KUBECTL_OPTS} --output jsonpath={.spec.ports[*].nodePort}', + returnStdout: true + ).trim() + if( "${CONSUMER}" == "") { + sh "mvn -s $MAVEN_SETTINGS pact:verify -DBROKER_URL=${BROKER_URL} -DuserName=${PACT_USERNAME} -Dpassword=${PACT_PASSWORD} -DAPP_URL=${CLUSTER_URL} -DAPP_PORT=${NODE_PORT}" + } else { + sh "mvn -s $MAVEN_SETTINGS pact:verify -Dpact.filter.consumers=${CONSUMER} -DBROKER_URL=${BROKER_URL} -DuserName=${PACT_USERNAME} -Dpassword=${PACT_PASSWORD} -DAPP_URL=${CLUSTER_URL} -DAPP_PORT=${NODE_PORT}" + } + } + } + } + + if ("${PHASE}" == "INTEGRATION_TEST" || "${PHASE}" == "IST" || "${PHASE}" == "DEPLOY_IST" ) { + + stage("CADev Repo Update") { + def GitinvokeURL = "${DEV_TEST_GIT_APP}/gitapp/service/git/push?gitUrl=${GIT_REPO_FOLDER}/${SERVICE_NAME}" + sh "curl -i -X GET \'${GitinvokeURL}\'" + } + + stage("Functional Test") { + + def invokeURL = "${DEV_TEST_SERVER_URL}/lisa-invoke/runTest?testCasePath=${LISA_PATH_NEW}${TEST_CASE_PATH}&stagingDocPath=${LISA_PATH_NEW}${STAGING_DOC_PATH}" + sh "curl -i \'${invokeURL}\'" + invokeURL = "${DEV_TEST_SERVER_URL}/lisa-invoke/runSuite?suitePath=${LISA_PATH_NEW}${SUITE_CASE_PATH}&configPath=${LISA_PATH_NEW}${CONFIG_PATH}" + sh "curl -i \'${invokeURL}\'" + + + } + } + + } +} +}
\ No newline at end of file |