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 中查看
![]()
![]()