zoukankan      html  css  js  c++  java
  • 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}" ) } } }
     
    打不死的小强
  • 相关阅读:
    安卓数据存储(3):SQLite数据库存储
    安卓活动间的传值问题
    JavaScript、jQuery获取radio、checkbox选中的值
    无法连接到VSS资源数据库
    JQuery自定义搜索控件
    UIAlertView使用
    Xcode使用git管理版本
    达乐居视频网前台页面的总结
    Spark环境搭建遇到的问题
    在IE中启动火狐——自定义浏览器链接协议
  • 原文地址:https://www.cnblogs.com/mggahui/p/15155452.html
Copyright © 2011-2022 走看看