使用k8swithJenkinsCICDSolution环境说明:192.168.0.63是k8s集群的master节点,确保你集群中的dns和ingress已经安装编译打包就不赘述了,主要流程是:编译打包->构建镜像->上传镜像到私服->使用ansible-playbook复制模板文件到集群主节点->更改模板文件->创建pod、service、ingress下面是配置中心配置(替换图中shell)dockerimages|grep${项目名称}-${环境}|gawk'{print$3}'|xargsdockerrmi;docker图像|grep没有|gawk'{print$3}'|xargsdockerrmi;dockerbuild-tregistry.skong.com/${projectname}-${environment}:${branch}.;dockerpushregistry.skong.com/${projectname}-${environment}:${branch};cp/data/source/templet/templet.yaml.;cp/data/source/templet/ingress_templet.yaml.;sed-i's/projectname/${projectname}/'templet.yaml;sed-i's/environment/${environment}/'templet.yaml;sed-i's/branch/${branch}/'temlet.yaml;sed-i's/projectname/${projectname}/'ingress_templet.yaml;sed-i's/environment/${environment}/'ingress_templet.yaml;sed-i's/_/-/'ingress_templet.yaml;sed-i's/_/-/'templet.yaml;sed-i's/projectname1/${projectname}/'temlet.yamlansible-playbook/data/ansible/playbook/linux/install_docker_service.yml--extra-vars'hosts=192.168.0.63Jenvironment=${environment}sourcepath=${projectname}warpath=/data/jenkins/workspace/${environment}-${projectname}';Ansible-playbook文件[root@jenkins-mastertemplet]#pwd/data/source/templet[root@jenkins-mastertemplet]#catinstall_docker_service.yml-名称:发送{{sourcepath}}_{{Jenvironment}}主机:'{{hosts}}'任务:-名称:检查pod{{sourcepath}}-{{Jenvironment}}shell:source/etc/profile&&kubectlgetpo|grep{{sourcepath}}_{{Jenvironment}}|wc-lregister:checkpodignore_errors:True-名称:删除{{sourcepath}}_{{Jenvironment}}file:path=/data/source/{{sourcepath}}_{{Jenvironment}}state=absent-名称:mkdir{{sourcepath}}_{{Jenvironment}}文件:path=/data/source/{{sourcepath}}_{{Jenvironment}}state=directory-名称:复制{{warpath}}/ingress_templet.yaml到{{sourcepath}}_{{Jenvironment}}复制:src={{warpath}}/ingress_templet.yamldest=/data/source/{{sourcepath}}_{{Jenvironment}}/-名称:复制{{warpath}}/{{sourcepath}}.yaml到{{sourcepath}}_{{Jenvironment}}复制:src={{warpath}}/{{sourcepath}}.yamldest=/data/source/{{sourcepath}}_{{Jenvironment}}/-名称:重启{{sourcepath}}_{{Jenvironment}}shell:source/etc/profile&&kubectlsetimagedeployment/{{sourcepath}}-{{Jenvironment}}-deployment{{sourcepath}}-{{Jenvironment}}-pod=registry.skong.com/{{sourcepath}}-{{Jenvironment}}:master&&kubectlrollouthistorydeployment/{{sourcepath}}-{{Jenvironment}}-deploymentwhen:checkpod.stdout=="1"-name:start{{sourcepath}}_{{Jenvironment}}shell:cd/data/source/{{sourcepath}}_{{Jenvironment}}/&&source/etc/profile&&kubectlcreate-fingress_templet.yaml&&kubectlcreate-f{{sourcepath}}.yaml--recordwhen:checkpod.stdout=="0"[root@jenkins-mastertemplet]#[root@jenkins-mastertemplet]#模板yaml文件temlet.yaml用于创建pod和service文件,里面的项目名和环境名需要替换(#不能出现下划线)[root@jenkins-mastertemplet]#cattemplet.yamlapiVersion:extensions/v1beta1kind:Deploymentmetadata:name:projectname-environment-deploymentspec:replicas:2strategy:rollingUpdate:maxSurge:1maxUnavailable:1template:metadata:labels:app:projectname-environment-podspec:终止:GracePeriods:60Seconname:projectname-environment-podimage:basic-repository.skong.com/skong/projectname1-environment:branchports:-containerPort:80imagePullSecrets:-name:kubesystemsecret---apiVersion:v1kind:Servicemetadata:name:projectname-环境ironment-servicelabels:app:projectname-environment-servicespec:type:NodePortports:-port:80protocol:TCPtargetPort:80selector:app:projectname-environment-pod[root@jenkins-mastertemplet]#Ingress文件相当与nginx相同的功能[root@jenkins-mastertemplet]#catingress_templet.yamlapiVersion:extensions/v1beta1kind:Ingressmetadata:name:projectname-environment-ingressnamespace:defaultspec:rules:-host:environment-projectname.skong.comhttp:paths:-path:/backend:serviceName:projectname-environment-serviceservicePort:80创建一个ingress,ingress函数可以理解为nginxcurl-v68.120.17-H'host:dev-platform-b??usiness.skong.com'//IfItisatestwrittenonhost192.168.120.17dev-platform-b??usiness.skong.comkubectlrollouthistorydeployment//查看部署更新记录kubectlrollouthistorydeployment/sk-platform-b??usiness-dev-deploymentkubectlrolloutundodeployment/sk-platform-b??usiness-dev-deployment--to-revision=1//这一步已经在install_docker.yml中添加了这条命令,但是Jenkins应该不会显示,应该在最后通过ansible命令执行:ansible192.168.0.63-mshell-a'/data/kubernetes/bin/kubectlrollouthistorydeployment/sk-platform-b??usiness-dev-deployment'
