首页 > 其他分享 >Pipeline SpringBoot-deploy-CI

Pipeline SpringBoot-deploy-CI

时间:2023-07-28 19:55:46浏览次数:45  
标签:Pipeline name harbor CI sh docker true net SpringBoot

pipeline {
  agent {
    kubernetes {
      cloud 'kubernetes'
      yaml '''
apiVersion: v1
Kind: Pod
spec:
  imagePullSecrets:
  - name: harbor-admin
  volumes:
  - name: data
    nfs: 
      server: 192.168.1.21
      path: /data/maven
  - name: dockersocket
    hostPath: 
      path: /run/docker.sock
  containers:
  - name: maven
    image: harbor.oldxu.net/ops/maven:3.8.7
    imagePullPolicy: IfNotPresent
    command: ["cat"]
    tty: true
    volumeMounts:
    - name: data
      mountPath: /root/.m2
  - name: docker
    image: harbor.oldxu.net/ops/docker:20.10
    imagePullPolicy: IfNotPresent
    command: ["cat"]
    tty: true
    volumeMounts:
    - name: dockersocket
      mountPath: /run/docker.sock
  - name: nodejs
    image: harbor.oldxu.net/ops/nodejs:14.20
    imagePullPolicy: IfNotPresent
    command: ["cat"]
    tty: true
  - name: sonar
    image: harbor.oldxu.net/ops/sonar-scanner:2.3.0
    imagePullPolicy: IfNotPresent
    command: ["cat"]
    tty: true
  - name: kubectl
    image: harbor.oldxu.net/ops/kubectl:1.23.15
    imagePullPolicy: IfNotPresent
    command: ["cat"]
    tty: true
      '''
    }
  }



  environment{
    Gitlab_Id = "gitlab-root-token"
    Gitlab_Pro = "http://gitlab.wjl.net/root/springboot.git"
    //Harbor相关的全局变量
    Url = "harbor.oldxu.net"
    Pro = "base"
    ImageName = "${Url}/${Pro}/springboot"
    HARBOR_ID = "harbor-auth"
    //对外暴露的域名
    Ingress_Host_dev = "spring-dev.wjl.net"
  }
//实现springboot应用的CI


  stages {
    stage('获取代码'){
      steps{
        container('maven'){
          checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${Gitlab_Id}", url: "${Gitlab_Pro}"]])
          sh 'ls -lrth && pwd'
        }
      }
    }
    stage('代码扫描'){
      steps{
        withSonarQubeEnv('sonar-k8s'){
          container('sonar'){
            sh 'sonar-scanner \
                -Dsonar.projectKey=springboot \
                -Dsonar.java.binaries=src \
                -Dsonar.sources=. '
            sh 'echo "漏洞扫描" && pwd'
          }
        }
      }
    }
    stage('检查代码扫描结果'){
      steps{
        container('sonar'){
          script{
            timeout(5){
              def qg = waitForQualityGate()
              if(qg.status != 'OK'){
                error "Sonarqube 代码漏洞扫描结果为失败, ERROR 目前状态是:${qg.status}"
              }
            }
          }
        }
      }
    }
    stage('编译代码'){
      steps{
        container('maven'){
          sh 'mvn package -Dmaven.test.skip=true'
          sh 'pwd && ls -lrth ./target/ && echo "编译代码"'
        }
      }
    }

    stage(生成镜像的Tag){
      steps{
        container('maven'){
          script{
            //1.需要拿到本次提交的commit ID  (git log -n1 --pretty=format:'%h')
            env.COMMITID = sh(returnStdout: true, script: "git log -n1 --pretty=format:'%h'").trim()
            //2.需要拿到本次构建的时间  (date +%Y%m%d_%H%M%S)
            env.BuildTime = sh(returnStdout: true, script: "date +%Y%m%d_%H%M%S").trim()
            //3.定义完整的镜像Tag
            env.ImageTag = COMMITID + "_" + BuildTime
          }
          sh 'echo "镜像的Cimmit ID: ${COMMITID}"'
          sh 'echo "镜像的构建时间: ${BuildTime}"'
          sh 'echo "镜像的完整Tag: ${ImageTag}"'
        }
      }
    }
    stage('制作Docker镜像'){
      steps{
        container('docker'){
          withCredentials([usernamePassword(credentialsId: "${HARBOR_ID}", passwordVariable: 'HARBOR_PASSWORD', usernameVariable: 'HARBOR_USER')]) {
            //登陆Harbor
            sh 'echo "${HARBOR_PASSWORD}" | docker login "${Url}" -u "${HARBOR_USER}" --password-stdin'
            //构建镜像
            sh 'docker build -t "${ImageName}":"${ImageTag}" .'
            //推送镜像
            sh 'docker push "${ImageName}":"${ImageTag}"'
            //清理镜像
            sh 'docker rmi "${ImageName}":"${ImageTag}"'
          // some block
          
          }
        }
      }
    }
    stage('交付应用至K8S'){
      steps{
        container('kubectl'){
          withCredentials([file(credentialsId: 'KuberConfig', variable: 'KUBECONFIG')]) {
            //必备
            sh 'mkdir -p ~/.kube && cp ${KUBECONFIG} ~/.kube/config'
            //替换变量
            sh 'sed -i "s#{NameSpace}#dev#g" deploy.yaml'
            sh 'sed -i "s#{Image}#${ImageName}:${ImageTag}#g" deploy.yaml'
            sh 'sed -i "s#{host}#${Ingress_Host_dev}#g" deploy.yaml'
            //验证替换
            sh 'cat deploy.yaml'
            //交付
            sh 'kubectl apply -f deploy.yaml'
            // some block
          }
        }
      }
    }
  }
}

标签:Pipeline,name,harbor,CI,sh,docker,true,net,SpringBoot
From: https://www.cnblogs.com/chuyiwang/p/17588773.html

相关文章

  • cisp认证,让你在信息安全领域“风生水起”
    CISP认证CISP 即“注册信息安全专业人员”,系国家对信息安全人员资质的最高认可。英文为CertifiedInformationSecurityProfessional(简称CISP)。CISP是强制培训的。如果想参加 CISP考试,必须要求出具授权培训机构的培训合格证明,培训后直接由GLAB提供给国测中心。CISP认......
  • linux springboot 启动脚本
    简单粗暴的脚本#!/bin/bash#获取进程号pid=`psaux|grep"java-jar"|grep-v"grep"|awk'{print$2}'`echo${pid}if[[$pid-gt0]];then`kill-9$pid`fi`nohupjava-jarboot-nginx.jar>boot-nginx.out2>&1&a......
  • Quantitative Approach of Management Science:(better decision making by using qua
    Whichistheuseofquantitativetechniquestoimprovemanagerialdecisionmaking.Alsoknownasmanagementscience.Bettermanagerialdecisionmakingbyusingquantitativetechniques,suchas:Thequantitativeapproachevolvedfrommathematicalandstati......
  • server.cid
    1,1,9999,1120000000100010001192.168.8.1255.255.255.0192.168.8.200-50-56-C0-00-0801-0C-CD-01-00-0100014000400400001-0C-CD-04-00-0000004000onstatus-onlyonOkSystemCORPEmbed......
  • 中国大连高级经理学院携手CIO时代, 共推央国企数字化人才培养
    为积极贯彻“数字中国”战略、落实《关于加快推进国有企业数字化转型工作的通知》要求,全面落实国务院国资委推动国有企业数字化转型的部署要求,聚焦加快发展数字经济,促进数字经济与实体经济深度融合,助力国有企业数字化转型行动计划的深化,中国大连高级经理学院联合CIO时代共同举办“......
  • 华为认证 | HCIE考过了,证书编号怎么查?
    我们都知道,每一个HCIE都拥有属于自己的独一无二的编号,这个编号到底是指什么呢?HCIE作为华为专家级的认证,考试难度极高,你要通过HCIE的笔试、实验LAB考试。当你“过五关斩六将”,通过LAB的那一刻,你就可以成为一名HCIE了。之后你拿到证书,在你的证书上有一个编号,上面有一个“HCIENo.”,后......
  • ASCII码与16进制的互相转换(表)
    :ASCII与16进制转换ASCII16进制ASCII16进制ASCII16进制ASCII16进制NUL00HDLE10HSP20H030HSOH01HDC111H!21H131HSTX02HDC212H"22H232HETX03HDC313H#23H333HEOT04HDC414H$24H434HENQ05HNAK15H%25H535H......
  • idea启动springboot 出现找不到符号,但是类是明确存在的
     很多小伙伴应该都遇到过这个问题,依赖没问题,对应的类也存在但是启动的时候就报错(通常这种问题是突然就发生,上一次启动还是好好的)错误原因:一般是由于依赖的子模块进行了修改,没有install到本地仓库执行mvninstall之类的命令就可以了解决办法,mvnclean ->mvninstall......
  • Ubuntu Netplane balancing algorithm modes
    目录起因前提知识配置步骤参考文档说明起因因为机房服务器新部署,双网卡服务器。一般来说业务系统的要求配置都是双网线然后配置bond0,主从轮番使用网卡就行。这次不太一样,网络管理员要求使用boud4模式,也是链路融合,所以就查询了一下资料没发现了bond的配置方式,很奇特的是,和Centos不......
  • PCIE理论带宽与实际带宽
    我们平时都习惯用Gb/s,MB/s或者GB/s来计算和表示带宽值,但是PCIE协议用的是GT/s即每秒千兆传输来表示传输速率,用起来不是很方便,也没有固定格式转换,但是可以计算出来理论值来参考,实际测试的时候还会有些损耗。PCIE的不同版本传输速率转换不同,主要是跟不同版本的编码方式有关,因为PCIe......