在这里插入图片描述
在生产环境中,我们通常会使用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
在这里插入图片描述
测试
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐