基于K8S构建Jenkins持续集成平台

文章目录

安装和配置NFS

NFS简介

NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等

NFS安装

我们把NFS服务器安装在192.168.56.111机器上

1)安装NFS服务(在所有K8S的节点都需要安装)

复制代码
yum install -y nfs-utils

2)创建共享目录

复制代码
mkdir -p /opt/nfs/jenkins
vi /etc/exports
/opt/nfs/jenkins *(rw,no_root_squash) *代表对所有IP都开放此目录,rw是读写

3)启动服务

复制代码
systemctl enable nfs 开机启动 
systemctl start nfs 启动

4)查看NFS共享目录

复制代码
showmount -e 192.168.56.111

在Kubernetes安装Jenkins-Master

创建NFS client provisioner

nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储。

1)上传nfs-client-provisioner构建文件

其中注意修改deployment.yaml,使用之前配置NFS服务器和目录

2)构建nfs-client-provisioner的pod资源

复制代码
cd nfs-client
kubectl create -f .

安装Jenkins-Master

1)上传Jenkins-Master构建文件

其中有两点注意:

第一、在StatefulSet.yaml文件,声明了利用nfs-client-provisioner进行Jenkins-Master文件存储

第二、Service发布方法采用NodePort,会随机产生节点访问端口

2)创建kube-ops的namespace

因为我们把Jenkins-Master的pod放到kube-ops下

复制代码
kubectl create namespace kube-ops

3)构建Jenkins-Master的pod资源

复制代码
cd jenkins-master 
kubectl create -f .

4)查看pod是否创建成功

复制代码
kubectl get pods -n kube-ops

5)查看信息,并访问

查看Pod运行在那个Node上

复制代码
kubectl describe pods -n kube-ops

查看分配的端口

复制代码
	kubectl get service -n kube-ops

先安装基本的插件

  • Localization:Chinese
  • Git
  • Pipeline
  • Extended Choice Parameter

Jenkins与Kubernetes整合

实现Jenkins与Kubernetes整合

测试连接成功

构建Jenkins-Slave自定义镜像

Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/inbound-agent:4.13.3-1

pipeline 文件内容如下:

jenkins 复制代码
def git_address = "https://gitee.com/qfxcoffee/shield.git"
def git_auth = "gitee"

//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'my-kube', containers: [
    containerTemplate(
        name: 'jnlp',
        image: "jenkins/inbound-agent:4.13.3-1"
    )
  ]
)
{
  //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod
  node("jenkins-slave"){
      // 第一步
      stage('拉取代码'){
         checkout([$class: 'GitSCM', branches: [[name: 'master']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
      }
  }
}


  • podTemplate 就是k8s的pod模板
  • label 是模板名字
  • cloud 是云名字 在全局配置里的Cloud里自己填写的
  • containerTemplate 指定在pod里运行的容器

Jenkins+Kubernetes+Docker完成微服务持续集成

拉取代码,构建镜像

1)创建NFS共享目录

让所有Jenkins-Slave构建指向NFS的Maven的共享仓库目录

sh 复制代码
mkdir -p /opt/nfs/maven
vi /etc/exports 添加内容: 
/opt/nfs/jenkins *(rw,no_root_squash) 
/opt/nfs/maven *(rw,no_root_squash) 
systemctl restart nfs 重启NFS
showmount -e 192.168.56.111
  1. jenkins/inbound-agent:4.13.3-1镜像里面并没有Maven环境,为了方便使用,我们需要自定义一个新的镜像

    docker build -t jenkins-slave-maven:latest .

2)创建项目,编写构建Pipeline

复制代码
chmod -R 777 /opt/nfs/maven
chmod 777 /var/run/docker.sock
chown .1000 /var/run/docker.sock
chown .1000 /usr/bin/docker
groupadd -g 1000 jenkins     && useradd -u 1000 -g jenkins -m jenkins
vim /etc/sudoers
  • 编写流水线脚本
相关推荐
Live in Shanxi.31 分钟前
Prometheus监控服务器及K8s集群资源
服务器·kubernetes·prometheus
weixin_466841 分钟前
K8S-Deployment
云原生·容器·kubernetes
科技D人生1 小时前
Kubernetes 学习总结(47)—— Kubernetes 持久化存储之 Volume、PV、PVC、StorageClass 到底怎么用?
云原生·容器·kubernetes·k8s·k8s 数据卷
没有bug.的程序员1 小时前
K8s 环境中的 JVM 调优实战
java·jvm·spring·云原生·容器·kubernetes
小毅&Nora1 小时前
【云计算】【Kubernetes】 ⑤ K8S网络深度解析:从 CNI 到 eBPF,Service 如何实现百万 QPS?
网络·kubernetes·云计算
easy_coder1 小时前
Argo 家族:云原生 CI/CD 的双剑合璧与协同之美
ci/cd·云原生·云计算
笨鸟贤妃2 小时前
离线安装(升级)Jenkins和pipeline、multijob等插件【无痛版】
pipeline·jenkins·jenkins插件
GeminiJM13 小时前
Elasticsearch minimum_should_match 参数详解
大数据·elasticsearch·jenkins
一条懒鱼66614 小时前
K8S-特殊容器
云原生·容器·kubernetes
weixin_3077791315 小时前
Jenkins中的Jakarta Activation API插件:功能、使用与最佳实践
运维·开发语言·ci/cd·自动化·jenkins