⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 feixiang.blog.csdn.net/article/details/131568925 「秃了也弱了。」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

1 什么是CICD

CIDI(Continuous Integration,Continuous Delivery & Deployment),持续集成,持续部署,持续发布。

也就是说,在本地开发完代码之后,push到远程仓库,然后代码打包、部署的这个过程完全是自动化完成的。

但是我们不要进入一个误区,CICD并不意味着一定就是这一套流程,只要实现了代码提交后自动部署即可,不管是部署在k8s还是tomcat中,这是由应用规模和使用的工具来决定的。

2 准备k8s环境

传送门:https://feixiang.blog.csdn.net/article/details/131513900

3 jenkins环境准备(选择一台服务器)

1、安装java(最新版jenkins只支持jdk11以上)

1)找到jdk资源上传到指定机器

# 解压
tar -zxvf jdk-17_linux-x64_bin.tar.gz

2)配置环境变量

vi /etc/profile
# 在最后添加上
export JAVA_HOME=/root/jenkins/jdk-17.0.7
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export PATH=$PATH:${JAVA_HOME}/bin
# 保存后执行
source /etc/profile
# 确保安装完成
java -version

2、安装maven

1)找到maven资源上传到指定机器

# 解压
tar -zxvf apache-maven-3.6.2-bin.tar.gz

2)配置环境变量

vi /etc/profile
# 在最后添加
export MAVEN_HOME=/root/jenkins/apache-maven-3.6.2
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
# 保存后执行
source /etc/profile
# 确保安装完成
mvn -version

3)配置maven的阿里云镜像

apache-maven-3.6.2/conf/settings.xml中,修改镜像

<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

3、安装和配置git(使用gitee)

1)安装git

# 下载安装
yum install git
# 配置git
git config --global user.name "cxf"
git config --global user.email "cxf@qq.com"

2)在服务器上生成公钥

# -t key 类型 -C 注释 中间三次enter即可
ssh-keygen -t ed25519 -C "Gitee SSH Key"
# 查看公钥 私钥文件 id_ed25519 公钥文件 id_ed25519.pub
ls ~/.ssh/

复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,将生成的公钥添加到仓库中。

3)验证

# 通过 ssh -T 测试时,输出 Anonymous:添加成功后,就可以使用 SSH 协议对仓库进行拉取。
$ ssh -T git@gitee.com
Hi Anonymous! You've successfully authenticated, but GITEE.COM does not provide shell access.

4、准备springboot项目

1)编写springboot项目

@RestController
public class K8SController {
@RequestMapping("/k8s")
public String k8s(){
return "hello K8s <br/>111222 ";
}
}

2)将springboot项目提交到gitee

3)git clone测试

git clone git@gitee.com:xiangno1/springboot-demo.git

拉下来代码,说明服务器配置没问题。

5、安装jenkins

jenkins官网:

入门指南:

必须在k8s集群中,因为后面需要在jenkins的目录下创建文件执行,比如这里选用m1节点。

1)下载jenkinx

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

2)启动jenkins(需要java环境)

# 启动报错,需要先安装字体
# java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null
yum install fontconfig
fc-cache --force

# 后台启动
nohup java -jar jenkins.war --httpPort=8080 &
tail -f nohup.out

# 启动日志会提示密码
#4c7341496d044ef7849576ccddc20d11
#This may also be found at: /root/.jenkins/secrets/initialAdminPassword

3)windows访问192.168.56.101:8080

jenkins启动时会打印一串密码,需要填上

点击【安装推荐的插件】,需要等一段时间自动完成。

下载完插件之后,需要创建第一个 管理员用户 我们设置为admin/admin。

4)配置jenkins的get、maven、java

在全局配置,新版的在tools中,配置maven。默认是使用系统环境变量中的。

5)新建任务测试

新建一个任务(item),输入名称(springboot-demo),选择流水线

配置springboot-demo的task,修改pipeline内容 ,增加maven构建,然后“保存和立即构建“,同时可以查看“Console Output”

因为我们之前安装git的时候已经配置了公钥,所以拉取的时候并不需要用户密码了!

node {
def mvnHome
stage('Preparation') {
git 'git@gitee.com:xiangno1/springboot-demo.git'
}

stage('Maven Build') {
sh "mvn clean package"
}
}

编写完之后保存,然后点击【立即构建】。

在/root/.jenkins/workspace 中,会下载springboot-demo,并使用maven打成一个jar包。

6)设置push之后自动构建

当用户进行git commit/push提交代码到github时,能够通知jenkins自动构建

注意:jenkins的ip一定要是github能够访问到的地址

在gitee上配置jenkins的webhook地址:http://192.168.56.101:8080/springboot-demo

生成Personal access tokens

Jenkins访问github需要授权,所以在github上生成token交给jenkins使用,即Personal access tokens

github的Settings[个人信息右上角]–>Developer settings–>Personal access tokens–>Generate new token

最后保存好该token,比如:**72f048b514e95d6fe36f86d84374f2dcce402b43

jenkins安装插件

  • 安装github plugin插件:[系统管理]->[插件管理]->[可选插件]
  • 安装gitlab插件和gitlab hook插件:[系统管理]->[插件管理]->[可选插件]

配置GitHub Server

[系统管理]->[系统配置]->[找到github服务器]->[添加github服务器]

在流水线触发器勾选GitHub hook trigger for GITScm polling

6、dockerhub准备(阿里云)

1)创建一个springboot-demo 的镜像仓库

# 登录 ,需要输入密码
docker login --username=沙里沟第二小学扛把子 registry.cn-hangzhou.aliyuncs.com
# 私有云的话,需要在k8s添加凭证
kubectl create secret docker-registry <secret-name> \
--docker-username=<username> \
--docker-password=<password> \
--docker-email=<email> \
--docker-server=<registry>
<secret-name> 是您为 secret 指定的名称,例如 my-registry-secret。
<username> 是您在镜像仓库的用户名。
<password> 是您在镜像仓库的密码。
<email> 是与您在镜像仓库的账号相关联的电子邮件。
<registry> 是您的镜像仓库地址。
接下来,您需要在使用该凭证的部署(deployment)或其他相关资源中引用该 secret。可以在相关资源的定义文件中添加以下部分
spec:
template:
spec:
imagePullSecrets:
- name: <secret-name>

2)准备shell脚本实现docker push

# mkdir /root/.jenkins/workspace/scripts/
# vi /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh
# 记得chmod +x /root/.jenkins/workspace/scripts/springboot-demo-build-image.sh
# 脚本开始
# 进入到springboot-demo目录
cd ../springboot-demo

# 编写Dockerfile文件

cat <<EOF > Dockerfile
FROM openjdk:8-jre-alpine
COPY target/springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jar
ENTRYPOINT ["java","-jar","/springboot-demo.jar"]
EOF

echo "Dockerfile created successfully!"

# 基于指定目录下的Dockerfile构建镜像
docker build -t registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0 .

# push镜像,这边需要阿里云镜像仓库登录,在w1上登录
docker push registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0

3)jenkins的pipeline增加步骤

node {
def mvnHome
stage('Preparation') {
git 'git@gitee.com:xiangno1/springboot-demo.git'
}

stage('Maven Build') {
sh "mvn clean package"
}

stage('Build Image') {
sh "/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"
}
}

4)再次执行jenkins的构建

构建成功!并且上传阿里云docker镜像成功!

4 Kubernetes拉取镜像运行

1、准备springboot-demo.yaml文件

在/root/.jenkins/workspace/scripts/目录下创建springboot-demo.yaml

# 以Deployment部署Pod
apiVersion: apps/v1
kind: Deployment
metadata:
name: springboot-demo
spec:
selector:
matchLabels:
app: springboot-demo
replicas: 1
template:
metadata:
labels:
app: springboot-demo
spec:
imagePullSecrets: # 私有云凭证
- name: springboot-demo
containers:
- name: springboot-demo
image: registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0
ports:
- containerPort: 8080
---
# 创建Pod的Service
apiVersion: v1
kind: Service
metadata:
name: springboot-demo
spec:
ports:
- port: 80
protocol: TCP
targetPort: 8080
selector:
app: springboot-demo
---
# 创建Ingress,定义访问规则
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: springboot-demo
spec:
rules:
- host: springboot.cxf.com
http:
paths:
- path: /
backend:
serviceName: springboot-demo
servicePort: 80

2、准备shell文件,用于k8s自动拉取镜像部署

编写k8s-deploy-springboot-demo.sh文件

# vi /root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh
# chmod +x /root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh
kubectl delete -f springboot-demo.yaml
kubectl apply -f /root/.jenkins/workspace/scripts/springboot-demo.yaml
echo "k8s deploy success!"

3、修改jenkins的pipeline

node {
def mvnHome
stage('Preparation') {
git 'git@gitee.com:xiangno1/springboot-demo.git'
}

stage('Maven Build') {
sh "mvn clean package"
}

stage('Build Image') {
sh "/root/.jenkins/workspace/scripts/springboot-demo-build-image.sh"
}

stage('K8S Deploy') {
sh "/root/.jenkins/workspace/scripts/k8s-deploy-springboot-demo.sh"
}
}

4、w1执行不了kubectl 命令

切换到master上,cd ~  --->   cat ~/.kube/config  --->复制内容
切换到worker02上 cd ~ ---> mkdir ~/.kube vi ~/.kube/config --->粘贴内容

大功告成 !

文章目录
  1. 1. 1 什么是CICD
  2. 2. 2 准备k8s环境
  3. 3. 3 jenkins环境准备(选择一台服务器)
    1. 3.1. 1、安装java(最新版jenkins只支持jdk11以上)
      1. 3.1.0.1. 1)找到jdk资源上传到指定机器
      2. 3.1.0.2. 2)配置环境变量
  4. 3.2. 2、安装maven
    1. 3.2.0.1. 1)找到maven资源上传到指定机器
    2. 3.2.0.2. 2)配置环境变量
    3. 3.2.0.3. 3)配置maven的阿里云镜像
  • 3.3. 3、安装和配置git(使用gitee)
    1. 3.3.0.1. 1)安装git
    2. 3.3.0.2. 2)在服务器上生成公钥
    3. 3.3.0.3. 3)验证
  • 3.4. 4、准备springboot项目
    1. 3.4.0.1. 1)编写springboot项目
    2. 3.4.0.2. 2)将springboot项目提交到gitee
    3. 3.4.0.3. 3)git clone测试
  • 3.5. 5、安装jenkins
    1. 3.5.0.1. 1)下载jenkinx
    2. 3.5.0.2. 2)启动jenkins(需要java环境)
    3. 3.5.0.3. 3)windows访问192.168.56.101:8080
    4. 3.5.0.4. 4)配置jenkins的get、maven、java
    5. 3.5.0.5. 5)新建任务测试
    6. 3.5.0.6. 6)设置push之后自动构建
  • 3.6. 6、dockerhub准备(阿里云)
    1. 3.6.0.1. 1)创建一个springboot-demo 的镜像仓库
    2. 3.6.0.2. 2)准备shell脚本实现docker push
    3. 3.6.0.3. 3)jenkins的pipeline增加步骤
    4. 3.6.0.4. 4)再次执行jenkins的构建
  • 4. 4 Kubernetes拉取镜像运行
    1. 4.1. 1、准备springboot-demo.yaml文件
    2. 4.2. 2、准备shell文件,用于k8s自动拉取镜像部署
    3. 4.3. 3、修改jenkins的pipeline
    4. 4.4. 4、w1执行不了kubectl 命令