首页 > 其他分享 >k8s发布-jenkins流水线构建

k8s发布-jenkins流水线构建

时间:2022-09-30 18:45:17浏览次数:85  
标签:kubectl url image 流水线 jenkins docker k8s

一、需求:使用jenkins流水线构建应用,发布至k8s

二、发布流程:

从gitlab仓库拉取代码 --》代码编译、打包 --》制作镜像并上传至镜像仓库 --》发布至k8s

三、安装所需插件

jenkins上安装kubernetes cli,安装方法请见官方地址

插件官方地址:https://plugins.jenkins.io/kubernetes-cli/

 服务器上安装kubectl

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client

四、生成连接k8s集群token

创建一个sa jenkins-admin

kubectl create serviceaccount jenkins-admin -n kube-system

绑定集群管理员角色

kubectl create clusterrolebinding jenkins-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:jenkins-admin

通过sa获取token

kubectl get secret -n kube-system | grep jenkins
kubectl describe secret jenkins-admin-token-m77tm -n kube-system

五、jenkins上使用连接k8s集群的token创建连接k8s的credentials ID,使用镜像仓库账号密码创建连接镜像仓库的credentials ID.

 

 

六、jenkins上新建流水线项目、配置流水线项目

创建流水线项目

 

 

Dockerfile

FROM openjdk:8-jre-alpine
MAINTAINER megalab
ARG ACTIVE
ENV LC_ALL zh_CN.UTF-8
ENV JAVA_OPT="-Xms128m -Xmx256m"
ENV JAVA_ARG="--spring.profiles.active=$ACTIVE"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
  && echo 'Asia/Shanghai' > /etc/timezone
ADD target/*.jar /opt/app.jar
CMD ["sh","-c","exec java $JAVA_OPT -jar /opt/app.jar $JAVA_ARG"]

流水线声明式脚本

pipeline {
    agent any
    environment {
       ACTIVE = "dev"
       image_url = ""
       docker_workdir = ""
       docker_file = ""
       HARBOR_KEY = credentials('')
       
       code_url = ""
       git_cid = ""
       branches_name = "*/dev"
       
       k8s_url = ""
       k8s_cid = ""
       deployment_file = ""
    }
    parameters {
        choice choices: ['deploy', 'rollback'], name: 'status'
        string 'image_version'
    }
    tools {
      maven 'mvn363'
    }
    stages{
        stage('拉取代码') {
            when {
                expression { params.status == 'deploy' }
            }
            steps {
                checkout([$class: 'GitSCM', branches: [[name: ${branches_name}]], extensions: [], userRemoteConfigs: [[credentialsId: ${git_cid}, url: ${code_url}]]])
            }
        }
        
        stage('编译打包') {
             when {
                expression { params.status == 'deploy' }
            }
            steps {
                sh 'mvn clean package -pl megalab-data-collect -am -Dmaven.test.skip=true'
            }
        }    
        
        stage('制作镜像并上传harbord仓库') {
             when {
                expression { params.status == 'deploy' }
            }
            steps {
                sh '''
                    docker build -f ${docker_workdir}/${docker_file} -t ${image_url}:latest --build-arg ACTIVE=${ACTIVE} ${docker_workdir} 
                    docker tag  ${image_url}:latest ${image_url}:0.1-${BUILD_NUMBER}
                    
                    docker login -u ${HARBOR_KEY_USR} -p ${HARBOR_KEY_PSW} ${image_url}
                    docker push ${image_url}:0.1-${BUILD_NUMBER}
                    
                    docker rmi ${image_url}:0.1-${BUILD_NUMBER}
                    docker rmi ${image_url}:latest
                    docker logout
                    
                '''
            }
        }    
        
        stage('发布至k8s') {
            when {
                    expression { params.status == 'deploy' }
            }
            steps {
                withKubeConfig([credentialsId: ${k8s_cid}, serverUrl: ${k8s_url}]) {
                    sh 'envsubst < ${WORKSPACE}/${docker_workdir}/${deployment_file} | kubectl apply -f -'
                }
            }
        }

        stage('回滚') {
            when {
                    expression { params.status == 'rollback' }
            }
            steps {
                withKubeConfig([credentialsId: ${k8s_cid}, serverUrl: ${k8s_url}]) {
                    sh '''
                    sed -i 's/$BUILD_NUMBER/$image_version/g' ${deployment_file}
                    envsubst <  ${WORKSPACE}/${docker_workdir}/${deployment_file} | kubectl apply -f -
                    '''
                }
            }
        }         
                           
    }
}

 

 

 

标签:kubectl,url,image,流水线,jenkins,docker,k8s
From: https://www.cnblogs.com/chenlin2022/p/16744976.html

相关文章

  • 华为软件开发平台 DevCloud 和 流水线(CloudPipeline)使用汇总
    华为软件开发平台DevCloud和流水线(CloudPipeline)使用汇总1.DevCloud产品概述:软件开发平台(DevCloud)是面向开发者提供的一站式云端DevSecOps平台,即开即用,随时随地在云......
  • k8s ingress实现灰度发布
    一、方案:使用ingress实现应用的灰度发布说明:此灰度发布方法不适用于利用网关转发服务的架构,利用网关转发的架构,需在网关实现灰度。灰度流程:1、服务端:版本v1正常运行,发布......
  • k8s+log-pilot日志收集
    github地址:https://github.com/AliyunContainerService/log-pilot介绍log-pilot是一个很棒的docker日志工具。可以从dockerlog-pilot主机收集日志并将它们发送到您的......
  • JENKINS
    JENKINSJENKINS目录Jenkinsjenkins简介jenkins工作原理jenkins特点jenkins部署jenkinsjenkins流水线项目发布流程JENKINS简介Jenkins是一个开源CI&C......
  • 【Kubernetes】K8s笔记(四):从 Job 和 CronJob 看 Kubernetes 的设计理念
    0.前言:在线业务和离线业务Kubernetes的业务可以分为两大类:在线业务和离线业务。在线业务:像Nginx、MySQL这样长时间运行的业务,这些应用一旦运行起来,除非出错或者停......
  • k8s 中 Pod 的控制器
    k8s中Pod的控制器前言ReplicationControllerReplicaSetDeployment更新Deployment回滚deploymentStatefulSetDaemonSetJob和CronJob总结参考k8......
  • jenkins
    目录1.jenkins简介1.1SVN介绍1.2Maven介绍1.3Ant介绍1.4Gitdle介绍1.5jenkins工作原理1.6jenkins特点2.CI/CD是什么2.1.CI持续集成2.2CD持续交付2.3持续部署3......
  • jenkins
    jenkins目录1.简介1.1SVN介绍1.2Maven介绍1.3Ant介绍1.4Gradle介绍1.5jenkins工作原理1.6jenkins特点2.CI/CD是什么2.1CI持续集成2.1.1简介2.1.2CI工作模式2.1.......
  • Jenkins
    Jenkins目录Jenkinsjenkins简介jenkins工作原理jenkins特点jenkins部署jenkinsjenkins流水线项目发布流程jenkins简介Jenkins是一个开源CI&CD软件、提供友好操作界面的......
  • jenkins
    目录安装jenkins安装jenkinsjenkins基于tomcat容器1、部署tomcat,tomcat下载https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat,此时下载9.0版本的,10版本部署有bug,无......