Jenkins使用k8s部署应用

news2024/11/18 22:45:17

1、jenkins在k8s内部署(请参考其他人的文章)

2、jenkins安装kubenents相关插件

3、配置k8s云

        非常重要,目的是实现jenkins可以远程调用k8s进行部署,并可实现安装jenkins-slave进行构建。使得不再依赖jenkins单机能力进行构建,比较适合一定规模的公司。

 插件安装后,打开jenkins,点击系统管理-->系统配置-->Clouds,点击新增一个kubernetes。

具体配置见如下:

3.1 首先配置K8S地址

 

3.2 为K8S云创建Pod Templates

目的是在jenkins构建的时候,可以自动在K8S内创建一个POD服务于本次构建。

以JAVA为例,构建时需要使用maven并docker构建,然后连接至K8S Master进行远程发布。

 在POD容器列表中放了2个Docker镜像,一个是Maven负责java的build,一个是jnlp创建一个jenkins的slave。

 

3.3  挂载存储卷

3.3.1、主要是把maven的repository挂载到宿主机上,以方便多次构建后复用。 

3.3.2、宿主机上安装了docker,把docker命令挂载到K8S的POD内,使得POD具备了

docker in  docker的能力,如此就可以在该POD内进行docker构建。

3.3.3、宿主机一般都是被K8S控制的Node,因此一般都装有kubernets,因此可以把kubectl命令关在到POD中,使得POD具备执行kubectl命令能力,以控制K8S。

 

 请用如下代码给k8s内的jenkins账号授权

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: jenkins
  namespace: zo-jenkins
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkins
  namespace: zo-jenkins
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/portforward"]
    verbs: ["*"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]
  - apiGroups: ["apps"]
    resources: ["deployments"]
    verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: jenkins
  namespace: zo-jenkins
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: jenkins
subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: zo-jenkins

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: jenkinsClusterRole
  namespace: zo-jenkins
rules:
  - apiGroups: [""]
    resources: ["pods"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/exec"]
    verbs: ["create","delete","get","list","patch","update","watch"]
  - apiGroups: [""]
    resources: ["pods/log"]
    verbs: ["get","list","watch"]
  - apiGroups: [""]
    resources: ["secrets"]
    verbs: ["get"]
  - apiGroups: [ "apps" ]
    resources: ["deployments"]
    verbs: ["*"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: jenkinsClusterRuleBinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: jenkinsClusterRole
subjects:
  - kind: ServiceAccount
    name: jenkins
    namespace: zo-jenkins

4、JAVA应用中增加pipeline脚本

#!groovy
pipeline {
    agent {
        kubernetes {
            cloud "k8s-deploy"  //选择名字是kubernetes1的cloud,这里不要修改
            label "jenkins-slave"
            //yamlFile ''  //jenkins-slave部署文件位置,内容不要修改
        }
    }
    stages {
        stage('初始化环境') {
            steps {
                script {
                    env.APP_NAME = "report-server"   //修改为自己的应用名称
                    env.APP_CODE = "https://codeup.aliyun.com/xxxxxxx/outsourced/excleToReport/xxx-xxxx.git"
                    env.CODE_BRANCH = "master"     //修改为实际部署的分支
                    env.DOCKER_IMAGE_URL = "registry.cn-hangzhou.aliyuncs.com/xx-xx/xx-xxx"  // 修改DOCKER镜像地址
                    env.DOCKER_TAG = "1.0.0"
                    env.K8S_NAME_SPACE = "zo-home-prd" // 修改应用在K8S内的实际部署的命名空间
                }
            }
        }
        stage('拉取代码') {
            steps {
                echo "1.Git Clone Code"
                git branch: "$CODE_BRANCH", credentialsId: 'zo-git-yun', url: "$APP_CODE"
            }
        }
        stage('maven构建') {
            steps {
                container('maven') {
                    sh 'mvn -s jenkins/settings.xml clean package -e -U -Dmaven.test.skip=true -Dautoconfig.skip'
                }
            }
        }
        stage('docker镜像构建') {
            steps {
                container('maven') { // maven容器确保与宿主机的docker实现docker in docker的能力
                    sh 'docker build -t $APP_NAME:$DOCKER_TAG .'
                    sh 'docker tag $APP_NAME:$DOCKER_TAG $DOCKER_IMAGE_URL:$DOCKER_TAG'
                    sh 'docker push $DOCKER_IMAGE_URL:$DOCKER_TAG'
                }
            }
        }
        //    部署到K8s
        stage('K8S部署-开发环境') {
            steps {
                container('jenkins-jnlp-slave') {
                    withKubeConfig(serverUrl: 'https://192.168.10.200:6443') {// 这里配置K8S Master的API地址
                        echo 'begin k8s deploy!'
                        sh 'chmod 744 k8s/home-prd/deployment.sh'
                        sh 'k8s/home-prd/deployment.sh' // 执行部署
                        // --record 用作记录滚动更新的信息, 后面方便版本回退
                        //sh 'kubectl set image deployment/$APP_NAME $APP_NAME=$IMAGE_URL --namespace $NAME_SPACE --record'
                    }
                }
            }
        }
    }
    options {
        buildDiscarder(logRotator(numToKeepStr: '5', artifactNumToKeepStr: '5'))
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537495.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue电商项目--search模块面包屑的制作

监听路由的变化再次发请求获取数据 复习: 这里要复习的一点就是:我们这个Search组件里面还有一个子组件,SearchSelector。 还有上面画圈的部分:在发请求之前,把接口需要传递参数,进行整理(在给…

北京超算云中心pytorch/mmcv环境配置

北京超算云中心pytorch/mmcv环境配置 which python查看python路径source deactivate mmseg-dev退出当前环境sbatch --gpus2 ./run.sh提交训练任务作业parajobs查看已提交作业sacncel ID取消作业 先放上常用的基本命令。 下面开始配置pytorch pytorch环境配置 1、输入modul…

Highcharts Core Crack

Highcharts Core Crack 添加了新的“x轴交叉”和“y轴交叉”选项,使创建数学绘图的轴布局变得更容易。 添加了新的“series.legendSymbol”选项。 Highcharts是业界领先的JavaScript图表库。Highcharts被数以万计的开发人员和全球100家最大公司中超过80%的公司使用。…

docker创建ubuntu容器,且在该容器内启动jar包

一、创建并运行ubuntu容器 docker run --name docker_ubuntu(容器名称) -it -v /home/docker_ubuntu:/share // 将本地路径挂载到share目录下--restartalways --privilegedtrue // 设置容器退出时重启容器-p 20000:20000 // 映射内外端口,这里可以多个端口&…

Kubeadm方式搭建K8S集群

Kubeadm方式搭建K8S集群 环境准备 在虚拟机里安装三台centos 7.x操作系统 配置系统名称和ip地址(同一网段)如: 角色IPmaster192.168.66.100node1192.168.66.101node2192.168.66.102 三台机器都要执行的命令:(使用xshell执行命令更方便) …

Cloudcanal数据同步神器

一.背景与需求 最近有个OLAP的需求,我们需要将MySQL的一些数据(这种数据有一种特性就是一旦产生记录,以后不会再进行修改、删除操作,例如登录日志、操作日志等诸如此类)。这种数据特性正好符合Clickhouse的用武之地,我们经过调研最…

【冲刺蓝桥杯】牛客竞赛补题 + 算法模板总结

🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 C/C专栏 🌙请不要相信胜利就像山坡上的蒲公英一样唾…

Songtell.CN:用AI解锁您最喜欢的歌曲背后的含义!

🎧听歌不止是享受,还有深度的情感寓意! 🎧探索音乐真谛,Songtell.CN带你用 AI 解锁歌曲深度含义! 🎶音乐是人类的共同语言,它能够温暖我们的心灵,带给我们力量和勇气。…

参与辅助服务的用户侧储能优化配置及经济分析(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Web APIs之DOM-获取元素

一.Web API基本认知 二.获取DOM对象 三.操作元素内容 四. 操作元素属性 五.定时器-间歇函数 一、Web API基本认知 *作用和分类 *什么是DOM *DOM树 *DOM对象 1.作用和分类 (1)作用:使用JS去操作html和浏览器 (2&#xff09…

【经验分享】一种高内聚低耦合的消息分发模块的设计与实现

【经验分享】一种高内聚低耦合的消息分发模块的设计与实现 又到了每天的open话题:【代码面对面】时刻,让我们一起在摸鱼中学习技术吧。今天的话题是嵌入式的消息分发模块,你会怎么设计和实现? 1 写在前面 老套路,我先…

开源LLM「RWKV」想要打造AI领域的Linux和Android|ChatAI

RWKV想逐步成为最强开源模型,中期计划取代Transformer。能如愿吗? “我们没有护城河,OpenAI也是。”近期,谷歌内部人士在Discord社区匿名共享了一份内部文件,点破了谷歌和OpenAI正面临的来自开源社区的挑战。尽管经外…

QT的qrc文件的创建和编辑

qrc文件,这个是Qt的资源文件,如果在pro文件中不包含的话,在编译的时候会提示找不到相应资源的错误;下面说一下手动修改pro和编写qrc文件的方法: 2.1 添加qrc文件; 2.2 编写qrc文件; 可以用 file…

SocketTools.NET 11.0 Crack

在所有 HTTP 客户端组件中添加对 HTTP/2.0 协议的支持。 2023 年 5 月 17 日 - 10:58新版本 特征 在所有 HTTP 客户端组件中添加了对 HTTP/2.0 协议的支持。 更新了 TLS 1.2(及更高版本)和 SSH 2.0 的安全选项,以使用 Microsoft Windows 11 和…

关于so的加密和解密(个人记录文件暂不分享)

一往情深深几许,深山夕照深秋雨 文章目录 一、so加密解密的介绍二、框架的so加密1.pom的依赖导入2.编写SoUtil 工具类3.编写处理byte工具类HexCode4.编写接口进行调用接口进行加解密总结提示:以下是本篇文章正文内容,下面案例可供参考 一、so加密解密的介绍 他是和jar包一同…

8年经验来面试20K的测试岗,连基础都不会,还不如招应届生。

公司前段时间缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资在10-20k,面试的人很多,但平均水平很让人失望。看简历很多都是3、4年工作经验&#xff0…

抽象编程——九章算术

九章算术 开篇,求最大公约数——辗转相减法 声明三个值 最大值 X 、最小值为 Y、商值 Z 用三个值解决辗转相减法 用最大值减去最小值得到商值,然后去掉原本的最大值,拿原本的最小值与商值作比较,得到第二个最大值与第二个…

Spring AOP介绍与使用

文章目录 1,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…

京东太猛,手写hashmap又一次重现江湖

说在前面 在40岁老架构师 尼恩的读者社群(50)中,最近有小伙伴拿到了一线互联网企业如京东、极兔、有赞、希音、百度、网易的面试资格,遇到一个很重要的面试题: 手写一个hashmap? 尼恩读者反馈说,之前总是听人说&#…

栈——“数据结构与算法”

各位uu们,好久不见!!!甚是想念!!! 好久没有更新我们的数据结构与算法专栏啦,最近小雅兰新学了很多知识,第一时间就想迫不及待地和C站的小伙伴们分享呢,下面&a…