script{sh"mvncleanpackage-DskipTests"#编译java项目代码for(server_ipinservers_ips.tokenize('')){defremote=[:]remote.name=rootremote.host=server_ipremote.allowAnyHosts=truewithCredentials([sshUserPrivateKey(credentialsId:xxx,keyFileVariable:'identity',passphraseVariable:'',usernameVariable:'userName')])remote.user=userNameremote.identityFile=identitysshPutremote:remote,from:"./target/xxx.jar",into:"/data/"#将jar包推送至服务器第三步:下线指定服务器批量修改各个服务器上nginx配置,图7-1平滑上线过程至此,现在需要修改jenkins使其平滑上线,为之后新代码上线做准备,health_times=0health_status=""while(health_times<3){try{health_status=sh(script:"curl-I-m10-o/dev/null-s-w%{http_code}-d''http://${server_ip}:8080/xxx",returnStdout:true).trim()}catch(Exceptione1){echo"服务没起来"}if(health_status=='200'){echo"健康"break}elseif(health_times<2){sleep30echo"不健康,再次尝试检测..."}else{error"不健康"}health_times=health_times 1}第六步:上线指定服务器通过健康检查后,状态码为200即为健康即可上线提供服务,立即重启会导致原有的连接返回5xx。
Jenkins平滑上线完成,即可批量修改各个服务器上的nginx配置,在不影响业务的情况下平滑上线,Jenkins业务发版平滑上线实战,这里需要加上异常处理继续运行jenkins,所以在重启之前sleep几秒,服务启动过程中进行检查,sleep30defremote=[:]remote.name=rootremote.host=指定服务器ipremote.allowAnyHosts=truewithCredentials([sshUserPrivateKey(credentialsId:xxx,keyFileVariable:'identity',passphraseVariable:'',usernameVariable:'userName')]){remote.user=userNameremote.identityFile=identitysshCommandremote:remote,command:"./prodservice.shrestart"第五步:健康检查访问该服务器后端提供的接口判断是否可以提供服务,新钛云服已为您服务1410天背景简介:原来发版必须等到晚上10点访问量最少的时候,使其下线不提供服务,其中servers_ips为各个服务器ip地址(如:servers_ips=”172.1.1.100172.1.1.101”),for(server_ip2inservers_ips.tokenize('')){remote.name=rootremote.host=server_ip2remote.allowAnyHosts=truewithCredentials([sshUserPrivateKey(credentialsId:ssh_credentialsId,keyFileVariable:'identity',passphraseVariable:'',usernameVariable:'userName')]){remote.user=userNameremote.identityFile=identitysshCommandremote:remote,command:"""sed-i's/^#*\\(.*'${server_ip}'\\)/\\1/'/etc/nginx/conf.d/xxx.confnginx-sreload"""第七步:检查在构建过程中循环curl服务,了解新钛云服往期技术干货,注释upstream中指定的服务器,期间服务中断产生大量告警,pipeline{parameters{gitParameter(name:'BRANCH_TAG',type:'PT_BRANCH_TAG',defaultValue:'master')stage('gitpull'){steps{checkout([$class:'GitSCM',branches:[[name:"${params.BRANCH_TAG}"]],doGenerat昭姬文化网eSubmoduleConfigurations:false,extensions:[],gitTool:'Default',submoduleCfg:[],userRemoteConfigs:[[url:'http://xxx.git',credentialsId:'xxx',]]图1-1拉取指定分支第二步:编译通过mvn编译java代码,为了不影响业务,jenkins会抛异常并中断,否则访问3次之后抛出异常中断Jenkins,通过gitParameter插件可以从项目中读取GITSCM配置实现选择分支或tag来构建项目,下图7-1为构建过程中的日志,使得该服务器上线提供服务。
检查是否会出现服务中断的情况,将编译后得到的jar包推送至各个服务器,script{for(server_ip2inservers_ips.tokenize('')){defremote=[:]remote.name=rootremote.host=server_ip2remote.allowAnyHosts=truewithCredentials([sshUserPrivateKey(credentialsId:xxx,keyFileVariable:'identity',passphraseVariable:'',usernameVariable:'userName')]){remote.user=userNameremote.identityFile=identitysshCommandremote:remote,command:"""sed-i's/.*'${指定服务器ip}'/#/'/etc/nginx/conf.d/xxx.confnginx-sreload"""第四步:重启服务运行新代码在刚下线的服务器上重启java项目使其运行新的代码,具体操作步骤如下:第一步:拉取git指定分支Jenkins默认一个项目只能对应一个git分支来构建。