k8s在jenkins构建,如何回滚和升级23

将相本无种,男儿当自强。这篇文章主要讲述k8s在jenkins构建,如何回滚和升级23相关的知识,希望能为你提供帮助。
在自动化发布的时候,会遇到升级和回滚,生产一旦出现异常需要回滚到上一个版本
这里使用pipline来实现,但是需要input做判断,才可以
大概思路是
gitlab拉取代码,然后mvn编译,dockerbuild构建镜像,push到harbor仓库,完成之后开始启动yaml,这里会有个判断是升级还是跳过,y表示升级,n表示跳过,在然后有个判断是回滚,y表示回滚上个版本,n表示跳过

接下来看看配置如下
node(\'haimaxy-jnlp\'){
stage(\'Clone\') {
echo "1.Clone Stage"
git credentialsId: \'5789c68f-ebf6-45b8-b9e5-5648c1a3eb09\', url: \'http://139.155.71.51/root/tomcat.git\'
script {
//获取comment id
env.imageTag = sh (script: \'git rev-parse --short HEAD ${GIT_COMMIT}\', returnStdout: true).trim()
}
}
stage(\'build\') {
echo "2.mvn clean"
sh "cd /home/jenkins/agent/workspace/bbs/solo-master & & mvn clean -Dmaven.test.skip=trueinstall -s /home/jenkins/settings/settings.xml"
}
stage(\'build dockerfile\') {
echo "3.build dockerfile"
sh \'\'\'
cd /home/jenkins/agent/workspace/bbs/solo-master/target
REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}
cat > > Dockerfile < < EOF
FROM tomcat:7
RUN mkdir /usr/local/tomcat/webapps/ROOT
ADD ./solo.war /usr/local/tomcat/webapps/ROOT
USER root
EOF
docker build -t $REPOSITORY .
\'\'\'
}
stage(\'docker push\') {
echo "docker run"
sh \'\'\'
REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}
docker login http://10.4.7.52 -u admin -p Harbor12345
docker push $REPOSITORY
\'\'\'
}
stage(\'kubectl apply\'){
echo "kubectl apply"
echo "是否需要需要升级?"
def userInput = input(
id: \'userInput\',
message: \'是否需要升级?\',
parameters: [
[
$class: \'ChoiceParameterDefinition\',
choices: "N\\nY",
name: \'升级?\'
]
]
)
if (userInput == "Y") {
sh \'\'\'
REPOSITORY=10.4.7.52/cnych/jenkins-demo:${imageTag}
cat > > tomcat.yaml < < EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: tomcat-deployment
labels:
app: tomcat
spec:
replicas: 3
selector:
matchLabels:
app: tomcat
minReadySeconds: 5
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
metadata:
labels:
app: tomcat
spec:
containers:
- name: tomcat
image: \\$REPOSITORY
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
labels:
app: tomcat
spec:
ports:
- port: 8080
targetPort: 8080
nodePort: 31305
selector:
app: tomcat
type: NodePort
EOF
kubectl set image deployment/tomcat-deployment tomcat=$REPOSITORY -n kube-ops
\'\'\'
}
}
stage(\'rollout\') {
echo "是否需要快速回滚?"
def userInput = input(
id: \'userInput\',
message: \'是否需要快速回滚?\',
parameters: [
[
$class: \'ChoiceParameterDefinition\',
choices: "N\\nY",
name: \'回滚?\'
]
]
)
if (userInput == "Y") {
sh "kubectl rollout undo deployment tomcat-deployment -n kube-ops"
}

}
}

k8s在jenkins构建,如何回滚和升级23

文章图片

k8s在jenkins构建,如何回滚和升级23

文章图片


接下来我们验证一下,原来镜像是这个,10.4.7.52/cnych/jenkins-demo:34f2191
k8s在jenkins构建,如何回滚和升级23

文章图片

k8s在jenkins构建,如何回滚和升级23

文章图片


接下来我们开始升级一下镜像
首先需要给gitlab更新一下配置,保证gitlab的配置变化一下
k8s在jenkins构建,如何回滚和升级23

文章图片


k8s在jenkins构建,如何回滚和升级23

文章图片


上传完成,然后gitlab看一下

k8s在jenkins构建,如何回滚和升级23

文章图片

接下来开始构建镜像自动化流程
k8s在jenkins构建,如何回滚和升级23

文章图片


k8s在jenkins构建,如何回滚和升级23

文章图片


k8s在jenkins构建,如何回滚和升级23

文章图片

完成之后我们看看镜像是否有升级
k8s在jenkins构建,如何回滚和升级23

文章图片

和原来的对比已经升级了
【k8s在jenkins构建,如何回滚和升级23】
接下来我们测试回滚
比如这个新镜像有问题,要回退
k8s在jenkins构建,如何回滚和升级23

文章图片


回退直接构建就行,啥也不用动
kubectl rollout undo deployment tomcat-deployment -n kube-ops这个命令是直接回退上个版本,
如果其他版本要使用version指定版本号
k8s在jenkins构建,如何回滚和升级23

文章图片

k8s在jenkins构建,如何回滚和升级23

文章图片


接下来我们看看镜像

k8s在jenkins构建,如何回滚和升级23

文章图片


说明已经回退完成,这里是滚动更新,每次增加一个新的,删掉一个旧的,不能一下都删除访问出现不能访问
好了演示到这里,有啥问题可以评论反馈沟通


    推荐阅读