Jenkins + Pipline +K8S 流水线项目选择分支自动发布、更新、回滚
在生产环境中,我们通常会使用Jenkins流水线部署k8s群集,这里主要介绍使用Jenkins的pipline可选择分支实现k8s群集的发布、更新、回滚功能。实验目的1.分支可选有2个分支branch=(master,develop),可以任意选择分支构建2个分支的区别为了做实验,修改背景图片来做区别master 分支:背景图片上面版本号:v1.0develop 分支:背景图片上面版本号:v2.0
在生产环境中,我们通常会使用Jenkins流水线部署k8s群集,这里主要介绍使用Jenkins的pipline可选择分支实现k8s群集的发布、更新、回滚功能。
实验目的
1.分支可选
有2个分支branch=(master,develop),可以任意选择分支构建
2个分支的区别
为了做实验,修改背景图片来做区别
master 分支:背景图片上面版本号:v1.0
develop 分支:背景图片上面版本号:v2.0
3.构建方法可选
每个分支都有2个构建方法action=(release,rollback),可以任意选择方法
4.两个方法的区别
方法release:正常版本发布
方法rollback:出现问题时,紧急回滚上一个版本
实现选择各分支和各方法,随意组合,构建版本
部署过程
环境服务部署:
参考博客 https://blog.51cto.com/13760351/2532545
jenkins配置如下:
1、编写流水线脚本
jenkins01
pipeline {
agent any
// 拉取代码
stages {
stage('GetCode') {
when { environment name: 'action', value: 'release' }
steps {
println("your choices are Branch:${branch} action:${action} version:1.0 ! ")
sleep 3
}
}
// 代码编译
stage('Maven Build') {
when { environment name: 'action', value: 'release' }
steps {
sh '''
export JAVA_HOME=/usr/local/java
/usr/local/apache-maven-3.6.3/bin/mvn clean install -Ptest
'''
}
}
// 项目打包成镜像并推送到仓库
stage('Build and Push Image') {
when { environment name: 'action', value: 'release' }
steps {
sh '''
REPOSITORY=139.9.xx.xx/demo-k8s/pro:v1 #develop是v2
docker build -t $REPOSITORY .
docker login 139.9.xx.xx -u admin -p xxxxxx
docker push $REPOSITORY
'''
}
}
// 部署到K8S主机
stage('Deploy to k8s') {
when { environment name: 'action', value: 'release' }
steps {
sh '''
scp k8s.sh root@192.168.0.48:/root/
ssh root@192.168.0.48 "chmod +x k8s.sh && sh /root/k8s.sh"
'''}
}
// K8S紧急时回滚
stage('Rollback to k8s') {
when { environment name: 'action', value: 'rollback' }
steps {
echo "k8s images is rolled back! "
sh '''
ssh root@192.168.0.48 "kubectl rollout undo deployment/tomcat-dpm -n default"
'''
}
}
}
}
2.编写Dockerfile
#从harbor拉取镜像
FROM tomcat
#镜像构建人信息(可选)
MAINTAINER jjj
#删除webapps目录下文件
RUN rm -rf /usr/local/tomcat/webapps/*
#复制打的最新war包到webapps目录
ADD target/huanhuan-blog-1.0-SNAPSHOT.war /usr/local/tomcat/webapps/
3.编写镜像shell脚本
#/bin/bash
#定义文件数变量
value1=`ls /root/tomcat-deployment.yml |wc -l`
value2=`ls /root/tomcat-service.yml |wc -l`
#检测tomcat-deployment.yml脚本是否存在
if [ "$vlaue1" == "0" ]; then
scp tomcat-deployment.yml root@192.168.0.48:/root/
/opt/kube/bin/kubectl create -f tomcat-deployment.yml
echo "tomcat-deployment.yml is created!"
fi
#检测tomcat-service.yml脚本是否存在
if [ "$vlaue2" == "0" ]; then
scp tomcat-service.yml root@192.168.0.48:/root/
/opt/kube/bin/kubectl create -f tomcat-service.yml
echo "tomcat-service.yml is created!"
fi
#检测2个脚本存在的情况
if [ "$value1" == "1" ] && [ "$value2" == "1" ]; then
/opt/kube/bin/kubectl set image deployment tomcat-dpm tomcat-cluster=139.9.73.133/demo-k8s/pro:v1 #develop是v2
echo "k8s image is updated !"
fi
#查看pod
kubectl get pod -o wide
#查看service
kubectl get svc
4.编写 tomcat-deployment.yml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: tomcat-dpm
spec:
replicas: 2
template:
metadata:
labels: # Pod副本拥有的标签,对应RC的Selector
app: tomcat-cluster
spec:
containers:
- name: tomcat-cluster
image: 139.9.73.133/demo-k8s/pro:v1 #develop分支 是v2
imagePullPolicy: Always
ports:
- containerPort: 8080 # 容器应用监听的端口号
imagePullSecrets:
- name: login
5.编写 tomcat-service.yml
apiVersion: v1
kind: Service
metadata:
name: tomcat-service
labels:
app: tomcat-service
spec:
type: NodePort
selector:
app: tomcat-cluster
ports:
- port: 8000
targetPort: 8080
nodePort: 32500
脚本文件上传到git
测试
更多推荐
所有评论(0)