【实战】采用jenkins pipeline实现自动构建并部署至k8s

news2024/12/27 13:33:57

文章目录

    • 前言
    • 部署jenkins
      • 编写docker-compose-jenkins.yaml
      • 配置maven源
      • 启动jenkins
      • 解锁jenkins
    • Jenkins默认插件及git、镜像仓库、k8s凭证配置
      • host key verification configuration修改为不验证
      • Gitee ssh
      • 阿里云镜像仓库ssh
      • 编写pipeline安装以下常用插件
      • 将kubectl命令文件拷贝到jenkins容器
      • 将k8s集群配置文件拷贝到jenkins
    • 准备java示例工程
      • 准备Dockerfile
      • 添加k8s的deployment.yaml配置
      • 添加Jenkinsfile
    • 配置jenkins pipeline任务
      • 新建pipeline任务
      • 新建pipeline
      • 测试pipeline任务
      • 查看k8s是否已经部署k8s
    • 设置gitee自动触发jenkins
      • 插件确认
      • 查看jenkins webhook调用路径并生成密匙
      • gitee配置webhook

前言

在前面的kubernetes系列博文中我们分享了从创建kubernetes集群到各种中间件的安装,以及从springboot项目的容器化部署到kubernetes外网映射,基本上包含了从0到1的K8S基础实战的整个过程。今天我们再分享一期采用jenkins pipeline实现自动构建并部署至k8s的实战演示,各位大大敬请鉴赏。

本文中采用jenkins pipeline执行整个jenkins的构建过程,在pipeline中使用docker执行maven构建。构建后通过dockerfile将jar包构建为docker镜像,并上传到阿里云仓库。然后执行deployment部署到k8s集群。

部署jenkins

这里采用docker的方式部署jenkins。

编写docker-compose-jenkins.yaml

[root@master app]# mkdir -p jenkins/jenkins_home
[root@master app]# mkdir -p jenkins/jenkins_config
[root@master app]# vim docker-compose-jenkins.yaml

version: '3'
services:
  jenkins:
    image: registry.cn-hangzhou.aliyuncs.com/senfel/jenkins:2.346.3-2-centos7-jdk8
    container_name: jenkins
    restart: unless-stopped  #指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
    volumes:
      - "/usr/bin/docker:/usr/bin/docker"
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"
      - "./jenkins/jenkins_home:/var/jenkins_home"
      - "./jenkins/jenkins_config:/var/jenkins_config"
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
      JAVA_OPTS: '-Xmx2048M -Xms2048M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:MaxNewSize=128m -Djava.util.logging.config.file=/var/jenkins_home/log.properties -Duser.timezone=Asia/Shanghai'
    user: root
    ports:
      - "10000:8080"
      

配置maven源

创建maven配置文件目录
[root@master app]# mkdir -p jenkins/jenkins_home/appconfig/maven
新增settings.xml
[root@master app]# vim jenkins/jenkins_home/appconfig/maven/settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <pluginGroups>
  </pluginGroups>
  <proxies>
  </proxies>
  <servers>
  </servers>
  <mirrors>
    <mirror>
        <id>nexus-aliyun</id>
        <mirrorOf>central</mirrorOf>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>
  </mirrors>
  <localRepository>/root/.m2</localRepository>
  <profiles>
        <profile>
                <id>jdk-1.8</id>
                <activation>
                        <jdk>1.8</jdk>
                </activation>
                <properties>
                        <maven.compiler.source>1.8</maven.compiler.source>
                        <maven.compiler.target>1.8</maven.compiler.target>
                        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
                </properties>
        </profile>
  </profiles>
</settings>

启动jenkins

[root@master app]# docker-compose -f docker-compose-jenkins.yaml up -d
访问 http://10.10.22.91:10000地址,等待出现下面解锁界面。
在这里插入图片描述

解锁jenkins

[root@master app]# cat jenkins/jenkins_home/secrets/initialAdminPassword
ea87fa2fb6b34e8a8415e6c3c6dc6658
解锁jenkins后,在界面中选择“安装建议的插件”并重启

Jenkins默认插件及git、镜像仓库、k8s凭证配置

host key verification configuration修改为不验证

在这里插入图片描述

Gitee ssh

创建用户名密码类型的github代码仓库凭证,ID为git

进入容器创建rsa
[root@master app]# docker exec -it b33560517ea0 bash
$ ssh-keygen -t rsa -C senfel123@sina.cn
后续步骤全部enter
在这里插入图片描述

查看公匙并配置在gitee ssh
$ cat /root/.ssh/id_rsa.pub
在这里插入图片描述

查看私匙并记住后面jenkins创建流水线配置凭证
$ cat /root/.ssh/id_rsa

ssh username with private key
在这里插入图片描述

阿里云镜像仓库ssh

创建用户名密码类型的aliyun registry镜像仓库凭证,ID为aliyun
username with password
在这里插入图片描述

编写pipeline安装以下常用插件

确认Pipeline、Docker Pipeline、
Pipeline: GitHub Groovy Libraries、Pipeline: Stage View Plugin (按照了pipeline默认就有)
Gitee plugin(我的git仓库是阿里云的,其他的可以按照GitLab)
是否已经安装

将kubectl命令文件拷贝到jenkins容器

[root@master ~]# find / -name kubectl
[root@master ~]# docker cp /usr/bin/kubectl jenkins:/usr/bin

将k8s集群配置文件拷贝到jenkins

[root@master ~]# docker cp /root/.kube jenkins:/root/.kube
#进入jenkins容器增加config文件执行权限
[root@master ~]# docker exec -it jenkins bash
[root@9c4198ba00e7 .kube]# chmod +x config

准备java示例工程

java工程自行准备一个springboot项目即可,这里重点是在项目根目录下新增Dockerfile、deployment.yaml、Jenkinsfile。

准备Dockerfile

# version 1.0
# 基础镜像
FROM openjdk:8-jre
# 维护人
MAINTAINER senfel<187@sina.cn>
# 创建目录
RUN mkdir -p /home/app
# 拷贝项目jar
COPY ./target/k8s-demo-0.0.1-SNAPSHOT.jar /home/app/app.jar
# 执行命令启动jar
ENTRYPOINT ["java","-jar","/home/app/app.jar"]
# 暴露端口
EXPOSE 8888

添加k8s的deployment.yaml配置

apiVersion: apps/v1
kind: Deployment # 声明一个Deployment资源对象
metadata:
  name: deployment-k8s-demo
spec:
  replicas: 3 # 通过replicas声明pod个数是3
  selector:   # 通过标签选择被控制的pod
    matchLabels:
      app: k8s-demo
  template:   # 在template中定义pod
    metadata:
      labels: # 给pod打上标签app=k8s-demo
        app: k8s-demo
    spec:
      containers:
        - name: k8s-demo  # 声明容器名称,注意不是pod名称,pod名称应该定义在metadata中
          image: k8s-demo-image
          ports:
            - name: http
              containerPort: 8888
--- # 在一个yaml文件中通过---分割多个资源对象
apiVersion: v1
kind: Service # 声明一个Service资源对象
metadata:
  name: service-k8s-demo
spec:
  type: NodePort
  selector: # service-k8s-demo将选择标签包含app=k8s-demo的pod
    app: k8s-demo
  ports:
    - name: http
      port: 8888  # Service监听端口
      targetPort: 8888 # 转发到后端Pod的端口号
      protocol: TCP # tcp协议
      nodePort: 30888 # 外网访问端口,范围:30000-32767

添加Jenkinsfile

pipeline{
    agent any
    environment {
        WS = "${WORKSPACE}"
        REGISTRY= "registry.cn-hangzhou.aliyuncs.com"
        IMAGE_NAME = "registry.cn-hangzhou.aliyuncs.com/senfel/k8s-demo:${env.BUILD_ID}"
        K8S_NAMESPACE = "default"
    }

    //定义流水线的加工流程
    stages {
        //流水线的所有阶段
        stage('step1:env check'){
            steps {
               sh 'pwd && ls -alh'
               sh 'printenv'
               sh 'docker version'
               sh 'java -version'
               sh 'git --version'
            }
        }

        stage('step2:compile'){
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '-v maven-repository:/root/.m2'
                 }
            }
            steps {
               sh 'pwd && ls -alh'
               sh 'mvn -v'
               sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'
            }
        }

        stage('step3:build image'){
            steps {
               sh 'pwd && ls -alh'
               sh 'docker build -t ${IMAGE_NAME} .'
            }
        }

       stage('step4:push image'){
            steps {
                withCredentials([[$class: 'UsernamePasswordMultiBinding',
                credentialsId: 'aliyun',
                usernameVariable: 'REGISTRY_USERNAME',
                passwordVariable: 'REGISTRY_PASSWORD']]) {
                sh """
                    docker login -u ${REGISTRY_USERNAME} -p ${REGISTRY_PASSWORD} ${REGISTRY}
                    docker push ${IMAGE_NAME}
                    docker rmi ${IMAGE_NAME}
                    """
                }
            }
        }
        stage('step5:deployment'){
            steps {
                sh """
                    sed -i "s#k8s-demo-image#${IMAGE_NAME}#g" deployment.yaml
                    kubectl apply --kubeconfig=/root/.kube/config -f deployment.yaml --namespace=${K8S_NAMESPACE}
                    """
            }
        }
    }
}

配置jenkins pipeline任务

创建jenkins pipeline任务,并设置需要的参数。

新建pipeline任务

点击“新建任务”,输入名称并选择“流水线”(pipeline),然后点击确定。
在这里插入图片描述

新建pipeline

配置 pipeline任务
进入任务的配置界面,在流水线(pipeline)设置部分,选择“Pipeline script from SCM”。SCM选项选为“Git”,配置好工程的git地址以及获取代码的凭证信息。然后在“Additional Behaviours”中添加“Clean before checkout”。
在这里插入图片描述

测试pipeline任务

在创建的pipeline任务中,点击“立即构建”即可立即执行pipeline任务。
在这里插入图片描述

在项目k8s-demo主页默认会有阶段视图
在这里插入图片描述

查看k8s是否已经部署k8s

[root@master k8s]# kubectl get pods,svc | grep k8s-demo
pod/deployment-k8s-demo-694c84bd48-blwjj 1/1 Running 0 12m
pod/deployment-k8s-demo-694c84bd48-nfwqz 1/1 Running 0 12m
pod/deployment-k8s-demo-694c84bd48-tkrv2 1/1 Running 0 12m
service/service-k8s-demo NodePort 10.107.193.30 8888:30888/TCP 14h
在这里插入图片描述

至此,Jenkins已经将git 分支部署在k8s集群

设置gitee自动触发jenkins

前面的步骤中已经完成了手动执行jenkins执行pipeline任务完成构建部署任务,下面说明如何在代码提交后让gitlab/gitee自动触发jenkins执行pipeline任务。

插件确认

jenkins中安装gitlab/gitee插件,我们在初始已经安装了gitee并配置了凭证。
在这里插入图片描述

以下直接以gitee测试,gitlab也是一样的步骤和操作。

查看jenkins webhook调用路径并生成密匙

webhook调用路径
在这里插入图片描述

生成webhook调用密匙
在这里插入图片描述

gitee配置webhook

在gitee k8s-demo项目设置中新建一个webhook
在这里插入图片描述

必须保证gitee能够调通你的ip,
k8s-demo 代码push测试自动构建即可。

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

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

相关文章

Google Pixel4手机刷机+Root+逆向环境详细教程

Google Pixel4手机刷机Root逆向环境配置详细教程 刷机工具下载 Windows10、Google Pixel4手机当前安卓10系统、adb工具、要刷的谷歌原生的Android11最新刷机包、安装google usb驱动、美版临时twrp-3.6.0_11-0-flame.img和美版永久twrp-installer-3.6.0_11-0-flame.zip、Magis…

前端组件库之ant-design-vue

在这里记录一个这个组件库我之前没有发现最近才发现的一个很好用的功能&#xff08;应该叫功能吧&#xff1f;&#xff09; 就是 这个flex弹性布局&#xff0c;之前在开发时&#xff0c;一直使用elementUI,是第一次使用这个组件库&#xff0c;所以没有发现这个功能这么好用 你…

适合宝妈的项目,一单20,看似不起眼的小生意,却能闷声发财!

向大家推荐一个小项目&#xff0c;信息差较大&#xff0c;每单至少有20元的利润。目前参与的人还不多&#xff0c;是个不错的机会。操作方法也非常简单&#xff0c;只需利用京东家政券赚取差价。可能很多人是第一次了解到这个——京东竟然还有家政券。 周周近财&#xff1a;让…

线下订单平台操作步揍

收款管理 1微信收款查询 1. 获取微信数据 获取微信数据。通过时间范围 查找微信数据调用第三方接口如下&#xff1a; Map map HttpPost.doPost("https://qyapi.weixin.qq.com/cgi-bin/externalpay/get_bill_list?access_token"ApiUtils.getWxtoken(),args); 其中…

[YOLOv8] 用YOLOv8实现指针式圆形仪表智能读数(二)

最近研究了一个项目&#xff0c;利用python代码实现指针式圆形仪表的自动读数&#xff0c;并将读数结果进行输出&#xff0c;若需要完整数据集和源代码可以私信。 目录 &#x1f353;&#x1f353;1.yolov8实现圆盘形仪表智能读数 &#x1f64b;&#x1f64b;2.表盘指针语义…

【数据分析面试】38.更新图书馆数据(Python)

题目 作为一名精通Python的图书管理员&#xff0c;你正在搭建一个更高效地更新图书数据的系统。 编写一个名为 update_availability 的函数&#xff0c;用于更新数据表中特定 book_id 的 availability 值&#xff0c;并返回更新后的数据表。 注意: 如果找不到 book_id&#…

【触想智能】工业级平板电脑五大特征与应用领域分析

工业级平板电脑是专供工业环境使用的工业控制计算机&#xff0c;也被称为工控一体机。工业级平板电脑基本性能及兼容性与商用平板电脑几乎相同&#xff0c;但是工业级平板电脑更注重在不同环境下的稳定性能&#xff0c;因此&#xff0c;工业级平板电脑与普通的商用平板电脑存在…

使用arthas 定位三方源码中报错行数

程序编译之后和你源java文件会有差异&#xff0c;导致报错行数不是你真实的java文件的行数 代码一共三百多行idea优化过后的 class代码&#xff0c;但是报错在六百多行不想下周源码 这时候使用 jad org.mindrot.jbcrypt.BCrypt 反编译执行的源代码信息确定行数

华火电焰灶,科技打造“新”厨房

家里最大的空气污染源其实来自厨房里的燃气灶&#xff01;——斯坦福大学发表的《科学进展》期刊 厨房在家庭中占有举足轻重的地位&#xff0c;它不仅是一个烹饪美食的场所&#xff0c;更是家人情感交流的重要空间。厨房大致经历了两次变革&#xff0c;分别是以柴火灶为主体的厨…

Android广播机制简介

文章目录 Android广播机制简介广播的基本概念广播的类型广播的使用场景Android广播的优缺点优点缺点 使用Android广播的一些最佳实践: Android广播机制简介 Android广播是一种轻量级的消息传递机制&#xff0c;用于应用程序之间或系统与应用程序之间进行通信。它类似于订阅-发…

Blender修改器

修改器 Modifier&#xff0c;对模型进行修改&#xff0c;相当于一个函数。 修改器图标是界面右下角的扳手样式 每个修改器的顶部都有如下样式&#xff0c;从左到右分别为&#xff1a;展开/折叠&#xff0c;修改器类型&#xff0c;修改器名称&#xff0c;编辑模式按钮&#xff…

基于高德 API 的自动获取气候数据的 Python 脚本

文章目录 高德申请 Key脚本介绍运行结果示例 源代码&#xff1a; https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目介绍&#xff1a;PyPrecip 是一个专注于气候数据处理的 Python 库&#xff0c;旨在为用户提供方便、高效的气候数据处理…

鸿蒙DevEco Studio 4.1 Release-模拟器启动方式错误

软件版本&#xff1a;DevEco Studio 4.1 Release 报错提示&#xff1a; 没有权限查看处理指导 Size on Disk 显示1.0MB 尝试方案&#xff08;统统无效&#xff09;&#xff1a; 1、“windows虚拟机监控程序平台”、"虚拟机平台"已开启 启用CPU虚拟化 2、C…

康谋分享 | aiSim5仿真场景重建感知置信度评估(三)

aiSim5重建高精度的真实交通场景&#xff0c;用于测试和训练ADAS/AD系统。内置场景包括赛道、车库、高速公路和城市环境。通过全局行动日志&#xff0c;aiSim能将驾驶数据转化为场景重建。车道线检测算法在仿真与现实世界的相关性测试中误差相近&#xff0c;召回率均接近98.5%。…

Camtasia Studio 的功能介绍及常规操作教程

随着数字媒体时代的快速发展&#xff0c;视频已经成为人们获取信息、娱乐和沟通的主要方式之一。在这样的背景下&#xff0c;一款强大且易于使用的视频编辑和制作工具显得尤为重要。Camtasia Studio就是这样一款能够满足各种视频制作需求的优秀软件。 一、Camtasia Studio的特…

Python生成文学编程风格文档库之pycco使用详解

概要 Pycco是一个Python库,用于生成文学编程风格的文档。它受到了Docco(一个快速生成源代码文档的工具)的启发,并通过解析源代码旁边的注释来创建一个美观的文档页面,使代码的解释与代码本身并排显示。 安装 安装Pycco非常简单,可以通过Python的包管理器pip进行安装: …

论文阅读_RAG融合现有知识树_T-RAG

英文名称: T-RAG: LESSONS FROM THE LLM TRENCHES 中文名称: T-RAG&#xff1a;来自LLM战壕的经验教训 链接: https://arxiv.org/abs/2402.07483 作者: Masoomali Fatehkia, Ji Kim Lucas, Sanjay Chawla 机构: 卡塔尔计算研究所, 哈马德本哈利法大学 日期: 2024-02-12 引用次数…

《米小圈上学记》|快乐读书,从身边的人身边的事开始!

时间&#xff0c;抓住了就是黄金&#xff0c;虚度了就是流水;书&#xff0c;看了就是学问&#xff0c;没看就是废纸:抱负&#xff0c;努力了才叫幻想&#xff0c;放弃了那只是妄想。读书&#xff0c;不一定能转变命运&#xff0c;但肯定能让我们安静&#xff0c;安静本身就是一…

企业计算机服务器中了faust勒索病毒如何处理,faust勒索病毒解密恢复

随着网络技术的不断发展与应用&#xff0c;越来越多的企业利用网络走向了数字化办公模式&#xff0c;网络也极大地方便了企业生产运营&#xff0c;大大提高了企业生产效率&#xff0c;但对于众多企业来说&#xff0c;企业的数据安全一直是大家关心的主要话题&#xff0c;保护好…

LLM Agent 全网最全简介

什么是LLM Agent 导语 GPT&#xff08;尤其是GPT-4&#xff09;等大语言模型&#xff08;LLM&#xff09;的推出&#xff0c;让人类认识到了大语言模型强大的文本生成能力。 只是用来做文本生成工具的话&#xff0c;LLM的能力就被严重低估了。Agents的想法的出现&#xff0c;…