4、参数化构建
parameters {
gitParameter branch: '', branchFilter: '.', defaultValue: '', description: '选择宣布的分支', name: 'Branch', quickFilterEnabled: false, selectedValue: 'NONE', sortMode: 'NONE', tagFilter: '', type: 'PT_BRANCH' ###动态的去获取参数
extendedChoice defaultValue: 'none', description: '选择宣布的微处事', \ ###加了扩展,可以多选宣布多个微处事
微处事找出我们需要哪些需要人工交互的
就是利用的这套微处事都合用于这套chart模版
1、微处事名称,以及针对一些处事需要带上域名,别的好比去设置的微处事的名字都是纷歧样的,这个名字是担保是独一的,需要利用include,,一般写在_helpers。tpl下,因为我们陈设的时候已经拿到微处事的名称了,所以helm起的名字也是微处事的名字,然后再加上公用的标签就区分出来了,别的就是微处事的端口也是纷歧样的
2、端口,每个微处事的端口也都纷歧
3、定名空间 利用helm -n 就可以陈设到指定的定名空间了
4、副本数 这个原来在helm中是3个副本,我们可以通过传参的形式酿成5可能2都可以
5、资源的限制,自己这个k8s中的限制是无法满意一个java应用的限制的,一般1.8jdk版本是不兼容的,新的版本是兼容的,所以手动的去指定它的对内存的巨细,这个一般在dockerfile启用jar包的时候带入
6、chart模版的选择 大概一个项目满意不了一个项目,那么大概就得需要两个模版来实现
multiSelectDelimiter: ',', name: 'Service', type: 'PT_CHECKBOX', \
value: 'gateway-service:9999,portal-service:8080,product-service:8010,order-service:8020,stock-service:8030'
choice (choices: ['ms', 'demo'], description: '陈设模板', name: 'Template')
choice (choices: ['1', '3', '5', '7'], description: '副本数', name: 'ReplicaCount')
choice (choices: ['ms'], description: '定名空间', name: 'Namespace')
}
然后需要将这个chart模版添加到repo里
[root@k8s-master1 ~]# helm repo add --username admin --password Harbor12345 myrepo "myrepo" has been added to your repositories [root@k8s-master1 ~]# helm repo list NAME URL myrepo http://192.168.30.27/chartrepo/library将helm建造完成后打包并push到客栈中,然后当我们陈设的时候就去拉这个helm模版地点
[root@k8s-master1 ~]# helm push ms-0.1.0.tgz --username=admin --password=Harbor12345 http://192.168.30.27/chartrepo/library Pushing ms-0.1.0.tgz to http://192.168.30.27/chartrepo/library... Done. 5、jenkins-slave所执行的详细任务 stages { stage('拉代替码'){ steps { checkout([$class: 'GitSCM', branches: [[name: "${params.Branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]] 它需要将这个参数传给上面的git parameters,让它可以或许动态的git地点中拉取所有的分支, ]) } } stage('代码编译') { // 编译指定处事 steps { sh """ mvn clean package -Dmaven.test.skip=true """ } } stage('构建镜像') { steps { withCredentials([usernamePassword(credentialsId: "${harbor_registry_auth}", passwordVariable: 'password', usernameVariable: 'username')]) { 这里利用了一个根据的认证将毗连harbor认证信息生存到根据内里,为了安详性,利用了根据的引用,动态的将它生存到变量中,然后通过挪用变量的形式去登录这镜像客栈,这样的话就不消在pipeline中去浮现暗码了, sh """ docker login -u ${username} -p '${password}' ${registry} for service in \$(echo ${Service} |sed 's/,/ /g'); do service_name=\${service%:*} 因为我们是陈设的微处事,所以我们需要许多的处事的构建,所以这里加了一个for轮回 它挪用的$service正是参数化构建中的选择的services,然后按照差异的处事推送到镜像客栈, image_name=${registry}/${project}/\${service_name}:${BUILD_NUMBER} cd \${service_name} if ls |grep biz &>/dev/null; then cd \${service_name}-biz fi docker build -t \${image_name} . docker push \${image_name} cd ${WORKSPACE} done """ 之前说需要kubeconfig这个设置存到jenins中的slave的pod中,起个名字叫admin.kubeconfig configFileProvider([configFile(fileId: "${k8s_auth}", targetLocation: "admin.kubeconfig")]){ sh """ # 添加镜像拉取认证 当利用拉取镜像的认证信息的时候就可以直接指定admin.kubeconfig了,它就能毗连到这个集群了 kubectl create secret docker-registry ${image_pull_secret} --docker-username=${username} --docker-password=${password} --docker-server=${registry} -n ${Namespace} --kubeconfig admin.kubeconfig |true # 添加私有chart客栈到这个pod中 helm repo add --username ${username} --password ${password} myrepo ${registry}/chartrepo/${project} """ } } } } ------------------------------------------------------------------------------------------------------------------------------------------ 6、deploy,利用helm陈设到k8s中 stage('Helm陈设到K8S') { steps { sh """界说民众的参数,利用helm,kubectl都要加namespace定名空间,毗连k8s认证的kubeconfig文件 common_args="-n ${Namespace} --kubeconfig admin.kubeconfig" for service in \$(echo ${Service} |sed 's/,/ /g'); do for轮回每个微处事的端口都纷歧样,所以在微处事这里添加微处事的名字和它对应的端口,把选择的处事和端口举办拆分 service_name=\${service%:*} service_port=\${service#*:} image=${registry}/${project}/\${service_name} tag=${BUILD_NUMBER} 。 jenkins构建的一个编号 helm_args="\${service_name} --set image.repository=\${image} --set image.tag=\${tag} --set replicaCount=${replicaCount} --set imagePullSecrets[0].name=${image_pull_secret} --set service.targetPort=\${service_port} myrepo/${Template}" # 判定是否为新陈设 if helm history \${service_name} \${common_args} &>/dev/null;then 那么加一个判定看看是不是陈设了,为假就install,为真就upgrade action=upgrade 旧陈设的利用upgrade更新 else action=install 新陈设的利用install fi # 针对处事启用ingress if [ \${service_name} == "gateway-service" ]; then helm \${action} \${helm_args} \ --set ingress.enabled=true \ 为true就启用ingress,因为chart必定默认的为force,就是不启用ingress --set ingress.host=${gateway_domain_name} \ \${common_args} elif [ \${service_name} == "portal-service" ]; then helm \${action} \${helm_args} \ --set ingress.enabled=true \ --set ingress.host=${portal_domain_name} \ \${common_args} else helm \${action} \${helm_args} \${common_args} fi done # 查察Pod状态 sleep 10 kubectl get pods \${common_args} """ } } } } 修改一些认证信息,这个pipeline最好先从一个处所复制一下,修改完再放进pipeline gitlab的项目地点def git_url = "http://192.168.30.28/root/ms.git" 修改harbor的根据 选择credentials