Jenkins + Pipline +K8S 流水线项目选择分支自动发布、更新、回滚

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

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Jenkins、GitLab和Kubernetes(简称k8s)是现代软件开发中常用的工具和技术,用于实现持续集成(CI)和持续部署(CD)流水线Jenkins是一个开源的自动化服务器工具,提供了丰富的插件和集成能力。它可以根据代码提交或定时触发构建和部署任务,并提供了丰富的报告和可视化界面用于监控和分析构建过程的状态。Jenkins还支持多个环境的部署,可以用于构建、测试和发布软件。 GitLab是一个基于Git的源代码管理平台,它提供了Git仓库的托管服务和代码协作功能。同时,GitLab还集成了CI/CD功能,允许在代码提交到仓库时自动触发构建和部署流水线。可以配置GitLab与Jenkins进行集成,使得代码提交后可以自动触发Jenkins的构建任务。 k8s是一个开源容器编排平台,用于管理和自动化容器化应用程序的部署、扩展和操作。k8s提供了强大的资源调度和管理能力,可以帮助开发人员将应用程序部署到不同的环境中,并按需扩展或回收资源。在CI/CD流水线中,k8s可以用于部署和运行构建好的应用程序,确保在不同环境中的一致性。 综上所述,Jenkins、GitLab和k8s组合可以实现一个完整的CI/CD流水线。当代码提交到GitLab时,GitLab可以触发Jenkins的构建任务。Jenkins可以根据需要进行构建、测试和部署。最后,k8s可以将构建好的应用程序部署到不同环境中运行。这个流水线可以实现自动化的构建、测试和部署,并提供了监控和报告功能,提高了开发效率和软件质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值