实战交付dubbo微服务到k8s_06使用jenkins进行持续构建交付dubo服务的提供者

Jenkins流水线配置的十个参数:

app_name 项目名
image_name 镜像名
git_repo 项目的git 地址
git_ver 项目的git版本号或者分支
add_tag 镜像标签,日期时间戳(例如,210516_1420)
mvn_dir 编译项目的目录,默认为项目的根目录
target_dir 项目编译完成后,产生jar包或者war包的目录
mvn_cmd 编译项目使用的命令
base_image 项目的docker 底包
maven maven软件的版本
+++++++++++++++=
除了base_image和maven是choice parameter,其他都是string parameter

登录jenkins










选择参数化构建:添加参数,



第一个参数:类型 String Parameter





添加第二个参数:类型:String Parameter



添加第三个参数:类型:String Parameter



添加第四个参数:String Parameter


添加第五个参数:类型:String Parameter



添加第六个参数:类型:String Parameter



添加第七个参数:类型:String Parameter



添加第八个参数:类型:String Parameter



添加第九个参数:类型:Choice Parameter



添加第十个参数:类型:Choice Parameter



pipline脚本
pipeline {
 agent any
   stages {
     stage('pull') { //get project code from repo
       steps {
         sh "git clone ${params.git_repo} ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.app_name}/${env.BUILD_NUMBER} && git checkout ${params.git_ver}"
      }
     }
   stage('build') { //exec mvn cmd
     steps {
     sh "cd ${params.app_name}/${env.BUILD_NUMBER} && /var/jenkins_home/maven-${params.maven}/bin/${params.mvn_cmd}"
     }
    }
     stage('package') { //move jar file into project_dir
       steps {
        sh "cd ${params.app_name}/${env.BUILD_NUMBER} && cd ${params.target_dir} && mkdir project_dir && mv *.jar ./project_dir"
      }
    }
       stage('image') { //build image and push to registry
         steps {
         writeFile file: "${params.app_name}/${env.BUILD_NUMBER}/Dockerfile", text: """FROM harbor.od.com/${params.base_image}
        ADD ${params.target_dir}/project_dir /opt/project_dir"""
        sh "cd ${params.app_name}/${env.BUILD_NUMBER} && docker build -t harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag} . && docker push harbor.od.com/${params.image_name}:${params.git_ver}_${params.add_tag}"
          }
      }
   }
}




++++++++++++=
在harbor中创建一个project ,名称 app ,私有



++++++++++++++++=











查看日志:

+++++++++++++++++







在刚才的构建上面,重新replay



可以查看到新的日志:






查看harbor里面是否有新的镜像:



我们现在已经有了镜像,要交付到k8s 里面,还需要创建资源配置清单。
在 hdss7-200.host.com 上面操作

mkdir -p /data/k8s-yaml/dubbo-demo-service

先创建一个名称空间:[ hdss7-21.host.com 上面操作 ]

kubectl create ns app

因为要从harbor里面私有仓库中拉镜像,所以要创建一个secret在app 里面

kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n app
## secret 的类型为 docker-registry
名字, harbor

参数:--docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345
+++++++++++++++++++++++===
dubbo的server服务,只向zk注册并通过zk与dobbo的web交互,不需要对外提供服务
因此不需要service资源和ingress资源,只需要一个deployment资源

准备资源配置清单,hdss7-200.host.com 上面
cd /data/k8s-yaml/dubbo-demo-service
vim dp.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: dubbo-demo-service
  namespace: app
  labels:
    name: dubbo-demo-service
spec:
  replicas: 1
  selector:
    matchLabels:
      name: dubbo-demo-service
  template:
    metadata:
      labels:
        app: dubbo-demo-service
        name: dubbo-demo-service
    spec:
      containers:
      - name: dubbo-demo-service
        image: harbor.od.com/app/dubbo-demo-service:master_210516_1749
        ports:
        - containerPort: 20880
          protocol: TCP
        env:
        - name: JAR_BALL
          value: dubbo-server.jar
        imagePullPolicy: IfNotPresent
      imagePullSecrets:
      - name: harbor
      restartPolicy: Always
      terminationGracePeriodSeconds: 30
      securityContext:
        runAsUser: 0
      schedulerName: default-scheduler
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600

##########++++++++++++++
在应该这个资源配置清单前,我们先登录到zookeeper
hdss7-11.host.com 上面

/opt/zookeeper/bin/zkCli.sh -server localhost:2181


hdss7-21.host.com 上面应用 资源配置清单
kubectl apply -f http://k8s-yaml.od.com/dubbo-demo-service/dp.yaml



kubectl get pods -o wide -n app



再查看zookeeper

dashboard 中查看