jenkins k8s自动部署文件

 
// User-defined Variables:
// Project Name
def PROJECT_NAME = "h5-web"

// Kubernetes Namespace
def KUBE_NAMESPACE = "h5"

// Git Repository 
def repoUrl = "git@domain:user/h5-web.git"

// Email Address: 
def emailTo = "email@qq.com"


// -------------------------------------------------------------------------------------
// Public Variables
def CREDENTIALSID = "git 凭证"

// Sonar
def SONAR_PROJECT_NAME = PROJECT_NAME + '-' + envProfile
def SONAR_PROJECT_KEY = PROJECT_NAME + '-' + envProfile
def SONAR_HOST_URL = "sonar分析地址"

// Local Registry
def LOCAL_REGISTRY_USER = "用户名"
def LOCAL_REGISTRY_PASSWORD = "密码"
def localRegistry = ["dev": "ip:port", "test": "ip:port", "pre":"ip:port","prod":"ip:port","release":"ip:port"] def LOCAL_REGISTRY_URL = localRegistry."${envProfile}" def LOCAL_IMAGE_NAME = LOCAL_REGISTRY_URL + '/' + PROJECT_NAME // Aliyun Registry def ALI_REGISTRY_USER = "用户名" def ALI_REGISTRY_PASSWORD = "密码" def ALI_REGISTRY_URL = "云镜像地址" def ALI_IMAGE_NAME = ALI_REGISTRY_URL + '/' + envProfile + '/' + PROJECT_NAME // vue 环境变量 def ENV_MAP = ["dev": "dev", "test": "testing", "pre": "pre","prod": "production","release": "production"] def vueAppEnv = ENV_MAP."${envProfile}" // Set default variable IMAGE_TAG def IMAGE_TAG = "0.0.0" pipeline{ agent {label '10.241.65.63'} parameters{ gitParameter branchFilter: 'origin/(master|hotfix.*|feature.*|dev.*|.*est|release.*|pre|prod)', defaultValue: 'develop', name: 'refVar', type: 'PT_BRANCH',useRepository: "$repoUrl" choice(name: 'tagType', choices: ['Patch', 'Minor', 'Major'], description: 'Tag Type') choice(name: 'envProfile',choices: ['dev','test','pre', 'prod','release'],description: 'Environment Type') } // Skip Declarative: Checkout SCM stage  options { skipDefaultCheckout true } stages{ stage("print variables"){ steps{ sh """  echo refVar: $refVar echo tagType: $tagType echo profile: ${envProfile} echo LOCAL_REGISTRY_URL: ${LOCAL_REGISTRY_URL} echo SONAR_PROJECT_NAME: ${SONAR_PROJECT_NAME} echo ALI_IMAGE_NAME: ${ALI_IMAGE_NAME} printenv """  } } stage("checkout scm"){ steps{ checkout([ $class: "GitSCM", branches: [[name: "$refVar"]], userRemoteConfigs: [[url: "$repoUrl", credentialsId: "${CREDENTIALSID}"]]]) } } stage('npm install') { parallel { stage('install') { steps { nodejs('v12.16.2') { sh """  npm config ls -l npm i yarn -g yarn install --verbose yarn add puppeteer """  } } } } } stage('npm build') { steps { nodejs('v12.16.2') { sh """  npm run core npm run build:${envProfile} versionType:${tagType} node oss-error.js mode ${vueAppEnv} node oss-error.js check ${vueAppEnv} """  } } } stage('read version file'){ steps{ script{ versionFile = ".${vueAppEnv}.version" IMAGE_TAG = readFile versionFile } echo "${IMAGE_TAG}" } } stage('SonarQube analysis') { when { expression { envProfile == 'test'} } steps { nodejs('v12.16.2') { withSonarQubeEnv('sonar') { sh "/opt/sonar-scanner/bin/sonar-scanner -D sonar.projectName=${SONAR_PROJECT_NAME} -D sonar.projectKey=${SONAR_PROJECT_KEY} -D sonar.host.url=${SONAR_HOST_URL} -D sonar.projectBaseDir=. -D sonar.sources=. -D sonar.exclusions=.**" } } } } stage('Quality Gate') { when { expression { envProfile == 'test'} } steps { timeout(time: 10, unit: 'MINUTES') { waitForQualityGate(abortPipeline: false) } } } stage('Build Image') { steps { sh "docker build -t ${LOCAL_IMAGE_NAME}:${IMAGE_TAG} ." } } stage('Push Image') { parallel { stage('push local image') { steps { sh """  docker login -u ${LOCAL_REGISTRY_USER} -p ${LOCAL_REGISTRY_PASSWORD} ${LOCAL_REGISTRY_URL} docker push ${LOCAL_IMAGE_NAME}:${IMAGE_TAG} """  } } stage('push remote image') { steps { sh """  docker tag ${LOCAL_IMAGE_NAME}:${IMAGE_TAG} ${ALI_IMAGE_NAME}:${IMAGE_TAG} docker login -u ${ALI_REGISTRY_USER} -p ${ALI_REGISTRY_PASSWORD} ${ALI_REGISTRY_URL} docker push ${ALI_IMAGE_NAME}:${IMAGE_TAG} """  } } } } stage('prune locally images') { steps { sh """  docker rmi ${LOCAL_IMAGE_NAME}:${IMAGE_TAG} docker rmi ${ALI_IMAGE_NAME}:${IMAGE_TAG} """  } } // Update app  stage('deploy k8s'){ when { expression { envProfile ==~ /dev|test/ }} steps{ sh """  echo "{\\"spec\\": {\\"template\\": {\\"spec\\": {\\"containers\\": [{\\"name\\": \\"${PROJECT_NAME}\\",\\"image\\": \\"${ALI_IMAGE_NAME}:${IMAGE_TAG}\\"}]}}}}" | kubectl patch deploy/${PROJECT_NAME} -n ${KUBE_NAMESPACE} -p "\$(cat -)" --context=${envProfile} """  } } } post { success { emailext ( subject: "成功: [${envProfile}] ${env.JOB_NAME} ${IMAGE_TAG}", body: """  项目名称: ${env.JOB_NAME} 环境类型: ${envProfile} 镜像TAG: ${IMAGE_TAG} 镜像地址: ${ALI_IMAGE_NAME} 构建日志: '${env.BUILD_URL}console'""", to: "${emailTo}" ) } failure { emailext ( subject: "失败: [${envProfile}] ${env.JOB_NAME} ${IMAGE_TAG}", body: """  项目名称: ${env.JOB_NAME} 环境类型: ${envProfile} 镜像TAG: ${IMAGE_TAG} 镜像地址: ${ALI_IMAGE_NAME} 构建日志: '${env.BUILD_URL}console'""", to: "${emailTo}" ) } } }

 

 
posted @ 2021-08-18 09:46  不忘初心dbsdxq  阅读(268)  评论(0编辑  收藏  举报
TOP 文章底部