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: [], submoduleC
fg: [],
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