Jenkins+K8s实现持续集成(二)

部署前呢,要先把jenkins搭建好。

同时呢已经有了k8s的环境。

基于以上两步已经有了的情况,继续要实现jenkins+k8s持续集成,需要先准备四个文件:

Dockerfile首先要准备好一个Dockerfile文件,用于构建Docker镜像的文本文件
project.yaml这个是部署应用的yaml文件,名字可以取项目的名字,例如cool-hello.yaml
project-svc.yaml这个文件是将应用的端口和暴露对外的端口进行映射,名字可以是应用名字接svc来命名
jenkins.sh是执行部署的脚本

目录

一、Dockerfile怎么写呢?

二、project.yaml怎么写呢?

三、project-svc.yaml怎么写呢?

四、jenkins.sh脚本如何写?

五、如何在jenkins里面进行配置呢?


一、Dockerfile怎么写呢?

挂载目录和项目名字需要改成自己的。

# 基础镜像
FROM openjdk8-alpine-cst:v1.0.0
# author
MAINTAINER hello

# 挂载目录
VOLUME /home/hello
# 创建目录
RUN mkdir -p /home/hello
# 指定路径
WORKDIR /home/hello
# 复制jar文件到路径
COPY ./hello.jar /home/hello/hello.jar
# 启动认证服务
ENTRYPOINT java ${JAVA_OPTS} -Dfile.encoding=utf-8 -jar hello.jar --spring.profiles.active=${SPRING_PROFILES_ACTIVE}

二、project.yaml怎么写呢?

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-deploy #这里可以改成自己项目+deploy
  namespace: hello #这个命名空间可以改成自己的
  labels: #本发布
    app: hello-deploy #这里可以改成自己项目+deploy
    version: v1.0.0
spec:
  replicas: 1
  revisionHistoryLimit: 3
  selector:
    matchLabels: #需匹配资源
      app: hello #这里可以改成自己项目名
      version: v1.0.0
  template:
    metadata:
      labels: # 资源标签
        app: hello #这里可以改成自己项目名
        version: v1.0.0
    spec: # 资源规范
      containers:
        - name: hello #这里可以改成自己项目名
          image: 镜像地址
          imagePullPolicy: Always
          env:
            - name: JAVA_OPTS
              value: "-Xmx1024m -Xms512m"
            - name: SPRING_PROFILES_ACTIVE
              value: "test"
          resources:
            limits:
              cpu: 2
              memory: 2Gi
            requests:
              cpu: 200m
              memory: 640Mi
          livenessProbe:
            httpGet:
              path: /healthCheck #这个地址必须要加入白名单,地址可以换成自己的地址
              port: 8089 #端口可以改成自己项目的端口
              scheme: HTTP
            initialDelaySeconds: 60
            timeoutSeconds: 10
            periodSeconds: 30
            successThreshold: 1
            failureThreshold: 5
          readinessProbe:
            httpGet:
              path: /healthCheck
              port: 8089 #端口可以改成自己项目的端口
              scheme: HTTP
            initialDelaySeconds: 60
            timeoutSeconds: 10
            periodSeconds: 30
            successThreshold: 1
            failureThreshold: 5
          ports:
            - name: http
              containerPort: 8089 #端口可以改成自己项目的端口
              protocol: TCP
      imagePullSecrets:
        - name: hello-secret #secret的名字,这个是连接镜像仓库的秘钥名字

三、project-svc.yaml怎么写呢?

apiVersion: v1
kind: Service
metadata:
  name: hello-svc #这里可以改自己的项目名+svc
  namespace: hello #这里可以改自己的命名空间
spec:
  type: NodePort #这里只能填NodePort
  selector:
    app: hello #这里可以改自己的项目名
  ports:
    - port: 8089 #应用的端口
      targetPort: 8089 #应用的端口
      nodePort: 32089 #映射端口,对外暴露的端口
      protocol: TCP
      name: restful

四、jenkins.sh脚本如何写?

#!/bin/bash

# master pwd and ip
master_pwd='把应用程序推送到目标机器(部署的机器)密码'
master_ip=把应用程序推送到目标机器(部署的机器)的ip

# full path
echo jar_path=${WORKSPACE}/${project_dir}${project_name}/target/${project_name}.jar

if [ ! -f $WORKSPACE/$project_dir$project_name/target/$project_name.jar ];then
  echo -------------------file not exists,path:${WORKSPACE}/${project_name}/target/${project_name}.jar-----------------------
  exit 1
fi

echo cd ${WORKSPACE}/${project_dir}${project_name}/target/ #进入到该目录,下面会将Dockerfile复制到这个目录
cd $WORKSPACE/$project_dir$project_name/target/

echo copy Dockerfile to target project
echo cp ${WORKSPACE}/${project_name}/k8s/* . #将Dockerfile文件复制到$WORKSPACE/$project_dir$project_name/target/
cp $WORKSPACE/$project_name/k8s/{project_name}/* .
#cp $WORKSPACE/k8s/$project_name/Dockerfile .

# delete nerdctl images by id
image_id=$(nerdctl images | grep "${group_name}/${project_name}" | awk '{print $3}')
echo image_id=${image_id}
# if exists 
if [ -n "$image_id" ]; then
 echo '--------------------rm images--------------------'
 echo nerdctl rmi -f ${group_name}/${project_name}:${version}
 nerdctl rmi -f ${group_name}/${project_name}:${version}
fi

# delete none images
image_ids=$(nerdctl images | grep none | awk '{print $3}')
echo image_ids=${image_ids}
if [ -n "$image_ids" ]; then
  echo '--------------------rm images--------------------'
  nerdctl images | grep none
  nerdctl images | grep none | awk '{print $3}' | xargs nerdctl rmi
fi

echo nerdctl build -t ${group_name}/${project_name}:${version} .
nerdctl build -t ${group_name}/${project_name}:${version} .

echo nerdctl login #后面写镜像地址,登录到镜像
nerdctl login 镜像地址 -u 账号 -p 密码

echo nerdctl push ${group_name}/${project_name}:${version}#将打包好的镜像推送到镜像仓库
nerdctl push ${group_name}/${project_name}:${version}

echo sleep 5
sleep 5

echo kubectl rollout restart deployment ${project_name}-deploy -n ${namesapce}#部署deploy
sshpass -p ${master_pwd} ssh root@${master_ip} "kubectl rollout restart deployment ${project_name}-deploy -n ${namesapce}"

echo sleep 5
sleep 5

echo delay 5 seconds, search: kubectl get pods -n ${namesapce} ...

五、如何在jenkins里面进行配置呢?

#!/bin/bash

# set jenkins var, for jenkins will kill me .
BUILD_ID=dontKillMe


# build project poms.
echo project build start,path:$WORKSPACE/pom.xml
mvn clean install -DskipTests -f $WORKSPACE/pom.xml

# 分组名称(同一分组不用更改)
group_name='这里可以放镜像地址加命名空间,比如镜像地址是:hello.com/train'
# K8S命名空间名称(同一空间或项目不用更改)
namesapce='train'
# 项目目录,如果为空就不需要填写
project_dir=''
# 项目名称(必改)
project_name='hello'
# app version
version='v1.0.0'
# auto script path
auto_script_path='/home/docker/auto/srcipt/jenkins.sh'

echo '--------------------jenkins build begin--------------------'
if [ -f $auto_script_path ];then
  # call auto script 
  echo begin call linux auto script, filepath=$auto_script_path
  source $auto_script_path
else 
  # auto script files not exists
  echo auto script files not exists, service interrupt, please check...
  echo filepath=$auto_script_path
  exit 1
fi

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新版本IntelliJ IDEA安装与“坤活”使用

最新版本IntelliJ IDEA安装与“科学”使用 IntelliJ IDEA安装与坤活下载安装坤活idea1.将下面两个压缩文件解压到安装位置,注意路径不要包含中文空格等特殊符号2.双击 install-all-users.vbs ,然后点击确定,等到出现 Done的弹窗3. 打开idea复…

函数依赖集等价、最小函数依赖集

一、函数依赖集等价 1、定义 假设F、G为一个关系模式上的两个函数依赖集,若,则称F和G是等价的,也可称F和G 互相覆盖。 2、判断 (1)引理3: 的充分必要条件是且 (2)两步走&…

密码学及其应用——为什么选择接近的质数因子对RSA加密算法不安全?

RSA加密算法是一种广泛使用的非对称加密算法,它的安全性依赖于大整数分解的难度。具体来说,RSA算法生成的公钥包含一个大整数N,这是两个大质数p和q的乘积。然而,如果这两个质数p和q太接近,则可以相对容易地对N进行因式…

Study--Oracle-04-SQL练习

一、SQL语句思维导图 二、SQL练习 -- 以employee_id 为排序,列出前5个人 -- FETCH select employee_id,first_name from employees order by employee_id FETCH FIRST 5 rows only; -- 以employee_id 为排序,从第6个人开始 到第10个人 -- offset …

计算机组成原理---Cache的基本工作原理习题

对应知识点: Cache的基本原理 1.某存储系统中,主存容量是Cache容量的4096倍,Cache 被分为 64 个块,当主存地址和Cache地址采用直接映射方式时,地址映射表的大小应为()(假设不考虑一致维护和替…

【Redis】如何保证缓存和数据库的一致性

目录 背景问题思路 三个经典的缓存模式Cache-Aside读缓存写缓存为什么是删除旧缓存而不是更新旧缓存?为什么不先删除旧的缓存,然后再更新数据库? 延迟双删如何确保原子性 Read-Through/Write-ThroughRead-ThroughWrite-Through Write Behind …

Ubuntu22.04 下安装Curl库

1. apt 安装: sudo apt-get install curl 2. 官网压缩包: 下载地址:curl downloads wget https://curl.haxx.se/download/curl-7.78.0.tar.gz tar -xzvf curl-7.78.0.tar.gz cd curl-7.78.0 ./configure --with-openssl make sudo make i…

ubuntu系统上快速直接获取ip地址

文章目录 前言总结 前言 ubuntu系统上查看ip地址 $ hostname -I示例输出: 192.168.1.10总结 作者:加辣椒了吗? 简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!

基于若依的ruoyi-nbcio流程管理系统增加所有任务功能(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://218.75.87.38:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码: h…

CMake个人理解和使用

100编程书屋_孔夫子旧书网 前言 CMake是一个构建工具,通过它可以很容易创建跨平台的项目。通常使用它构建项目要分两步,通过源代码生成工程文件,通过工程文件构建目标产物(可能是动态库,静态库,也可能是可执行程序)。使用CMake的一个主要优势是在多平台或者多人协作的…

Python学习打卡:day10

day10 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day1073、文件的读取操作文件的操作步骤open()打开函数mode常用的三种基础访问模式读操作相关方法read()方法readlines()方法readline()方法for循…

Golang | Leetcode Golang题解之第168题Excel表列名称

题目&#xff1a; 题解&#xff1a; func convertToTitle(columnNumber int) string {ans : []byte{}for columnNumber > 0 {columnNumber--ans append(ans, Abyte(columnNumber%26))columnNumber / 26}for i, n : 0, len(ans); i < n/2; i {ans[i], ans[n-1-i] ans[n…

VSCode 安装NeoVim扩展(详细)

目录 1、安装NeoVim扩展 2、windows安装Neovim软件 3、优化操作相关的配置&#xff1a; 5、Neovim最好的兼容性配置 6、技巧和特点 6.1 故障排除 6.2、Neovim 插件组合键设置 6.3、跳转列表 1、安装NeoVim扩展 在扩展商店搜索NeoVim&#xff0c;安装扩展 2、windows安装…

吉时利Keithley2602B数字源表

吉时利Keithley2602B数字源表 2601B、2602B、2604B 系统 Sourcemeter SMU 仪器 2601B、2602B 和 2604B 系统 Sourcemeter SMU 仪器为 40W DC / 200W 脉冲 SMU&#xff0c;支持 10A 脉冲&#xff0c;3A 至 100fA 和 40V 至 100nV DC。它们将精密电源、实际电流源、6 位数字万用…

[Linux] 文件系统

UNIX操作系统将文件组织成一个有层次的树形结构&#xff1a; 标准目录&#xff1a; 根目录&#xff1a; /tmp目录 主目录&#xff1a; 这就是主目录 一般与系统有关的信息都存放在etc目录下 注意&#xff1a; /etc/passwd存放的是用户账户信息&#xff0c;不是密码信息&#xf…

项目中选择Entity Framework Core还是Dapper?

我是将 Dapper 还是 Entity framework core 用于下一个 .NET 项目&#xff1f;当你必须做出这个决定时&#xff0c;总是令人困惑&#xff0c;为了项目的成功&#xff0c;你需要做出正确的决定。让我来帮你... 介绍 使用 .NET 开发的应用程序可以根据其使用的对象关系映射器 &…

课程设计---哈夫曼树的编码与解码(Java详解)

目录 一.设计任务&&要求&#xff1a; 二.方案设计报告&#xff1a; 2.1 哈夫曼树编码&译码的设计原理&#xff1a; 2.3设计目的&#xff1a; 2.3设计的主要过程&#xff1a; 2.4程序方法清单&#xff1a; 三.整体实现源码&#xff1a; 四.运行结果展示&…

SkyWalking 极简入门

1. 概述 1.1 概念 SkyWalking 是什么&#xff1f; FROM Apache SkyWalking 分布式系统的应用程序性能监视工具&#xff0c;专为微服务、云原生架构和基于容器&#xff08;Docker、K8s、Mesos&#xff09;架构而设计。 提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体…

milvus元数据解析工具milvusmetagui介绍使用

简介 milvusmetagui是一款用来对milvus的元数据进行解析的工具&#xff0c;milvus的元数据存储在etcd上&#xff0c;而且经过了序列化&#xff0c;通过etcd-manager这样的工具来查看是一堆二进制乱码&#xff0c;因此开发了这个工具对value进行反序列化解析。 在这里为了方便交…