Kubernetes(k8s)实战:使用k8s+jenkins实现CICD

这篇具有很好参考价值的文章主要介绍了Kubernetes(k8s)实战:使用k8s+jenkins实现CICD。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是CICD

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

也就是说,在本地开发完代码之后,push到远程仓库,然后代码打包、部署的这个过程完全是自动化完成的。
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器
但是我们不要进入一个误区,CICD并不意味着一定就是这一套流程,只要实现了代码提交后自动部署即可,不管是部署在k8s还是tomcat中,这是由应用规模和使用的工具来决定的。

二、准备k8s环境

Kubernetes(k8s)集群搭建,完整无坑,不需要科学上网~

三、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,通过仓库主页 「管理」->「部署公钥管理」->「添加部署公钥」 ,将生成的公钥添加到仓库中。
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器

(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官网:https://jenkins.io/
入门指南:https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

必须在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),选择流水线
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器
配置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 (需要外网访问)
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器
生成Personal access tokens
Jenkins访问github需要授权,所以在github上生成token交给jenkins使用,即Personal access tokens
github的Settings[个人信息右上角]–>Developer settings–>Personal access tokens–>Generate new token
最后保存好该token,比如:**72f048b514e95d6fe36f86d84374f2dcce402b43

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

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

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

6、dockerhub准备(阿里云)

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

docker镜像深入学习,docker镜像发布公有云与私有云

# 登录 ,需要输入密码
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镜像成功!
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器
Kubernetes(k8s)实战:使用k8s+jenkins实现CICD,云原生,kubernetes,jenkins,容器

四、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文件文章来源地址https://www.toymoban.com/news/detail-528486.html

# 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   --->粘贴内容

5、大功告成 !

到了这里,关于Kubernetes(k8s)实战:使用k8s+jenkins实现CICD的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 云原生Kubernetes: K8S 1.29版本 部署Jenkins

    云原生Kubernetes: K8S 1.29版本 部署Jenkins

    目录  一、实验 1.环境 2.K8S 1.29版本 部署Jenkins 服务 3.jenkins安装Kubernetes插件 二、问题 1.创建pod失败 2.journalctl如何查看日志信息 2.容器内如何查询jenkins初始密码 3.jenkins离线安装中文包报错 4.jenkins插件报错 (1)主机 表1 主机 主机 架构 版本 IP 备注 master K8S master节点 1.29.0 1

    2024年04月25日
    浏览(17)
  • Kubernetes(K8S)学习(三):K8S实战案例

    Kubernetes(K8S)学习(三):K8S实战案例

    附:查看命名空间命令 kubectl get namespace kubectl get ns 创建wordpress-db.yaml文件,这里以mysql作为wordpress的db: yaml内容: 根据wordpress-db.yaml配置,创建资源mysql数据库: yaml中MySQL配置说明: 用户:root       密码:rootPassW0rd 数据库名称:wordpress 用户:wordpress       密码:wo

    2024年04月09日
    浏览(16)
  • Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Kubernetes(k8s)实战:深入详解Volume,详解k8s文件同步存储

    Volume官网:https://kubernetes.io/docs/concepts/storage/volumes/ On-disk files in a Container are ephemeral, which presents some problems for non-trivial applications when running in Containers. First, when a Container crashes, kubelet will restart it, but the files will be lost - the Container starts with a clean state. Second, when running Containers to

    2024年02月13日
    浏览(13)
  • Kubernetes、k8s从入门到实战

    Kubernetes、k8s从入门到实战

    本文章用到k8s安装包及工具文件链接:https://pan.baidu.com/s/1gYU9xxwxI9cXfJ1IJGQjwg?pwd=ye11 提取码:ye11 我们对于云计算的概念,维基百科有以下定义: Cloud computing is a new form of Internet-based computing that provides shared computer processing resources and data to computers and other devices on demand. 云计算就是

    2024年01月19日
    浏览(30)
  • 【业务功能115】微服务-springcloud-springboot-Kubernetes-k8s集群-Kubesphere实现DevOps流水线-CI/CD-SonarQube- Jenkins

    【业务功能115】微服务-springcloud-springboot-Kubernetes-k8s集群-Kubesphere实现DevOps流水线-CI/CD-SonarQube- Jenkins

    dev 怎么开发 ops 怎么运维 参考项目链接:https://github.com/kubesphere/devops-maven-sample 持续集成是指软件个人的部分向软件整体部分交付,频繁进行集成以便更快地发现其中错误。 CI需要具备这些: 全面的自动化测试 这是实践持续集成持续部署的基础,同时,选择合适的自动化测

    2024年02月04日
    浏览(20)
  • Kubernetes实战(十六)-k8s节点打标签

    pod可以根据调度策略让pod调度到想要的节点上运行,或者不在某节点运行。 3.1.1 生成deployment文件 3.1.2 执行生成pod  3.1.3 查看结果  迁移过程相当于删除当前节点pod,再在新node上生成pod,生产环境操作时需要谨慎。 3.2.1 调整pod运行标签 3.2.2 查看结果   pod已经切换至ops-wor

    2024年01月16日
    浏览(28)
  • Kubernetes实战(九)-kubeadm安装k8s集群

    Kubernetes实战(九)-kubeadm安装k8s集群

    ip hostname 10.220.43.203 ops-master-1 10.220.43.204 ops-worker-1 10.220.43.205 ops-worker-2 master/与worker主机均需要设置。 master/worker均安装 docker二进制安装参考:docker部署及常用命令-CSDN博客  为kubernetes添加国内阿里云YUM软件源 。 如果k8s版本低于1.24版,可以忽略此步骤。 由于1.24版本不能直接

    2024年02月04日
    浏览(29)
  • 实战-基于Jenkins+K8s构建DevOps平台(九)

    实战-基于Jenkins+K8s构建DevOps平台(九)

    第一部分:安装持久化存储nfs 1、在k8s-master和k8s-node1上安装nfs服务 [root@k8s-master ~]# yum install nfs-utils -y [root@k8s-master ~]# systemctl start nfs [root@k8s-master ~]# systemctl enable nfs [root@k8s-node1 ~]# yum install nfs-utils -y [root@k8s-node1 ~]# systemctl start nfs [root@k8s-node1 ~]# systemctl enable nfs [root@k8s-node2 ~

    2024年02月08日
    浏览(12)
  • 服务器-Kubernetes (K8S)单机部署实战 -- 001

    服务器-Kubernetes (K8S)单机部署实战 -- 001

         本篇博文是 centos 7 系统安装 kubernetes 单机 master 节点操作。 一: 查看 服务器 配置信息       1. 执行命令查看服务器cpu信息。安装 kubernetes 服务,cpu核心数必须大于2,内存大于2G。       2.  修改服务器设置信息,避免安装出现问题。         a.  临时关闭swap,防止

    2024年02月19日
    浏览(15)
  • 使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

    使用 Jenkins、Gitlab、Harbor、Helm、k8s 来实现流水线作业

    使用 Jenkins、Gitlab、Harbor、Helm、Kubernetes 来实现一个完整的持续集成和持续部署的流水线作业 开发人员提交代码到 Gitlab 代码仓库 通过 Gitlab 配置的 Jenkins Webhook 触发 Pipeline 自动构建 Jenkins 触发构建构建任务,根据 Pipeline 脚本定义分步骤构建 先进行代码静态分析,单元测试

    2024年04月27日
    浏览(16)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包