- 1、CICD">1、CICD
- 2、准备k8s环境">2、准备k8s环境
- 3、Jenkins环境准备(选择一台服务器)">3、Jenkins环境准备(选择一台服务器)
- 4、Kubernetes拉取镜像运行">4、Kubernetes拉取镜像运行
1、CICD
CICD(Continuous Integration,Continuous Delivery & Deployment),持续集成,持续部署,持续发布。 也就是说,在本地开发完代码之后,push到远程仓库,然后代码打包、部署的这个过程完全是自动化完成的。
2、准备k8s环境
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.7export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jarexport 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.2export 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# 配置gitgit config --global user.name "cxf"git config --global user.email "cxf@qq.com"
2)在服务器上生成公钥
复制生成后的 ssh key,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」,将生成的公钥添加到仓库中。
# -t key 类型 -C 注释 中间三次enter即可ssh-keygen -t ed25519 -C "Gitee SSH Key"# 查看公钥 私钥文件 id_ed25519 公钥文件 id_ed25519.publs ~/.ssh/

3)验证
# 通过 ssh -T 测试时,输出 Anonymous:添加成功后,就可以使用 SSH 协议对仓库进行拉取。$ ssh -T git@gitee.comHi Anonymous! You've successfully authenticated, but GITEE.COM does not provide shell access.
4、准备SpringBoot项目
1)编写SpringBoot项目
@RestControllerpublic 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官网:https://jenkins.io/
入门指南:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/
必须在k8s集群中,因为后面需要在Jenkins的目录下创建文件执行,比如这里选用m1节点。1)下载Jenkins
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 nullyum install fontconfigfc-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的Git、Maven、Java
在全局配置,新版的在tools中,配置Maven。默认是使用系统环境变量中的。5)新建任务测试
新建一个任务(item),输入名称(springboot-demo),选择流水线
编写完之后保存,然后点击【立即构建】。 在/root/.jenkins/workspace 中,会下载springboot-demo,并使用Maven打成一个jar包。
node {def mvnHomestage('Preparation') {git 'git@gitee.com:xiangno1/springboot-demo.git'}stage('Maven Build') {sh "mvn clean package"}}
6)设置push之后自动构建
当用户进行git commit/push提交代码到Gitee时,能够通知Jenkins自动构建:::danger 注意:Jenkins的ip一定要是Gitee能够访问到的地址
:::
在Gitee上配置Jenkins的webhook地址:http://192.168.56.101:8080/springboot-demo
生成Personal access tokens
Jenkins访问Gitee需要授权,所以在Gitee上生成token交给Jenkins使用,即Personal access tokens Gitee的Settings[个人信息右上角]–>Developer settings–>Personal access tokens–>Generate new token 最后保存好该token,比如:72f048b514e95d6fe36f86d84374f2dcce402b43Jenkins安装插件
- 安装github plugin插件:[系统管理]->[插件管理]->[可选插件]
- 安装gitlab插件和gitlab hook插件:[系统管理]->[插件管理]->[可选插件]
配置GitHub Server
[系统管理]->[系统配置]->[找到github服务器]->[添加github服务器] 在流水线触发器勾选GitHub hook trigger for GITScm polling6、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 > DockerfileFROM openjdk:8-jre-alpineCOPY target/springboot-demo-0.0.1-SNAPSHOT.jar /springboot-demo.jarENTRYPOINT ["java","-jar","/springboot-demo.jar"]EOFecho "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 mvnHomestage('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部署PodapiVersion: apps/v1kind: Deploymentmetadata:name: springboot-demospec:selector:matchLabels:app: springboot-demoreplicas: 1template:metadata:labels:app: springboot-demospec:imagePullSecrets: # 私有云凭证- name: springboot-democontainers:- name: springboot-demoimage: registry.cn-hangzhou.aliyuncs.com/cxf01/springboot-demo:v1.0ports:- containerPort: 8080---# 创建Pod的ServiceapiVersion: v1kind: Servicemetadata:name: springboot-demospec:ports:- port: 80protocol: TCPtargetPort: 8080selector:app: springboot-demo---# 创建Ingress,定义访问规则apiVersion: extensions/v1beta1kind: Ingressmetadata:name: springboot-demospec:rules:- host: springboot.cxf.comhttp:paths:- path: /backend:serviceName: springboot-demoservicePort: 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.shkubectl delete -f springboot-demo.yamlkubectl apply -f /root/.jenkins/workspace/scripts/springboot-demo.yamlecho "k8s deploy success!"
3、修改Jenkins的pipeline
node {def mvnHomestage('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 --->粘贴内容
