基于kubernetes/k8s 构建Jenkins持续集平台(下)
基于kubernetes/k8s 构建Jenkins持续集平台(下)
jenkins-master Slave 架构
安装和配置NFS
NFS简介
NFS(Network File System),它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。我们可以利用NFS共享Jenkins运行的配置文件、Maven的仓库依赖文件等
NFS安装
我们把NFS服务器安装在master机器上
安装NFS服务(所有k8s的节点都需要安装)
复制yum -y install nfs-utils
master上创建共享目录
创建共享目录,用于存放Jenkins的配置文件
复制mkdir -p /opt/nfs/jenkins
cat >> /etc/exports << 'EOF'
/opt/nfs/jenkins *(rw,no_root_squash)
EOF
启动服务,查看NFS共享目录
启动服务
复制systemctl enable nfs --now
在三台k8s机器上,查看共享目录
复制showmount -e 192.168.23.15
在Kubernetes安装Jenkins-Master
创建NFS client provisioner
nfs-client-provisioner 是一个Kubernetes的简易NFS的外部provisioner,本身不提供NFS,需要现有的NFS服务器提供存储。
上传nfs-client-provisioner构建文件
链接:https://pan.baidu.com/s/1GIH18-iNF0m8TMiQNAxVeA?pwd=mpcw
提取码:mpcw
复制ls
unzip nfs-client.zip
cd nfs-client
sed -i '/192.*/ s/192.*/192.168.23.15/g' deployment.yaml
构建nfs-client-provisioner的pod资源
复制cd nfs-client
kubectl apply -f .
查看pod是否安装成功
复制kubectl get pods
安装Jenkins-Master
上传Jenkins-Master 构建文件
链接:https://pan.baidu.com/s/1RwioaFdgCk-tB4cEWF5ovQ?pwd=52d5
提取码:52d5
复制unzip jenkins-master.zip
cd jenkins-master/
ls
其中有两点注意:
第一、在StatefulSet.yaml文件,声明了利用nfs-client-provisioner进行Jenkins-Master文件存储
第二、Service发布方法采用NodePort,会随机产生节点访问端口
创建kube-ops的namespace
因为我们把Jenkins-Master的pod放到kube-ops下
复制kubectl create namespace kube-ops
kubectl get ns
构建Jenkins-Master的pod资源
复制cd jenkins-master
kubectl create -f .
查看pod的状态和调度节点,端口
复制kubectl get pods -n kube-ops -o wide
kubectl get service -n kube-ops
访问jenkins
使用浏览器访问Jenkins地址
访问Jenkins所在节点的 ip:映射的端口
192.168.23.15:32420
获取初始密码。 该初始密码是在 数据卷目录里,存放在initialAdminPassword
设置Jenkins的插件下载地址,下载插件
复制cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-28d3fcd1-0a47-4da9-b93d-a9a34fa152fa/updates/
sed -i 's/http:\/\/updates.jenkins- ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json
Manage Plugins点击Advanced,把Update Site改为国内插件下载地址
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
重启Jenkins
先安装基本插件
Localization:Chinese
Git
Pipeline
Extended Choice Parameter
安装完毕后,重启Jenkins
jenins 与kubernetes整合
安装kubernetes插件
系统管理--->插件管理-->可选插件-->kubernetes
实现Jenkins与Kubernetes整合
系统管理--->系统配置--->云--->新建云--->kubernetes
配置集群信息
kubernetes 地址采用了kube的服务器发现:https://kubernetes.default.svc.cluster.local
namespace 填写 kube-ops ,我们的服务都是放在这个自建的命名空间中
然后点Test Connection ,进行测试连接
Jenkins URL地址:http://jenkins.kube-ops.svc.cluster.local:8080 ,其中8080端口来自于Service.yaml文件定义
构建Jenkins-Slave 自定义镜像
Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择 运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/jnlp-slave:latest,但是这个镜像里面并没有Maven 环境,为了方便使用,我们需要自定义一个新的镜像:
将maven包,settings配置文件, Dockerfile文件 复制到master主机上
链接:https://pan.baidu.com/s/1EZ0yopDHMoaw5UHXbM1qmg?pwd=uyw2
提取码:uyw2
复制ls jenkins-slave.zip
unzip jenkins-slave.zip
cd jenkins-slave/
Dockerfile文件内容如下:
复制#以官方镜像为基础
FROM jenkins/jnlp-slave:latest
MAINTAINER itcast
# 切换到 root 账户进行操作
USER root
# 安装 maven
COPY apache-maven-3.6.2-bin.tar.gz .
RUN tar -zxf apache-maven-3.6.2-bin.tar.gz && \
mv apache-maven-3.6.2 /usr/local && \
rm -f apache-maven-3.6.2-bin.tar.gz && \
ln -s /usr/local/apache-maven-3.6.2/bin/mvn /usr/bin/mvn && \
ln -s /usr/local/apache-maven-3.6.2 /usr/local/apache-maven && \
mkdir -p /usr/local/apache-maven/repo
COPY settings.xml /usr/local/apache-maven/conf/settings.xml
USER jenkins
构建镜像,并上传到镜像仓库
复制docker build -t jenkins-slave-maven:latest .
构建成功后,生成了新的镜像jenkins-slave-maven:latest
复制docker images
将镜像打标签,上传到仓库的library项目中
复制#要先配置登记镜像仓库地址(注意要重启docker)
cat /etc/docker/daemon.json
#在mster主机上先登录仓库,要以管理员登录
docker login -u admin -p Harbor12345 192.168.23.13:85
#对镜像打标签 仓库地址/项目名/镜像名:标签
docker tag jenkins-slave-maven:latest 192.168.23.13:85/library/jenkins-slave-maven:latest
#推送到镜像仓库
docker push 192.168.23.13:85/library/jenkins-slave-maven
推送成功后,去镜像仓库的library项目查看
测试Jenkins-Slave是否可以创建
添加凭证
使用用户名密码的方式,添加gitlab的凭证
创建新的Jenkins流水线项目
Pipeline:
复制def git_address = "http://192.168.23.10:82/my_group/tensquare_back.git"
def git_auth = "9972329a-8a9c-4504-83bd-1ed89556f824"
//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
containerTemplate(
name: 'jnlp',
image: "192.168.23.13:85/library/jenkins-slave-maven:latest"
)
]
)
{
//引用jenkins-slave的pod模块来构建Jenkins-Slave的pod
node("jenkins-slave"){
stage('拉取代码'){
checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
}
}
}
新开一个Jenkins窗口,进入到节点管理。
然后,在另一个窗口点击构建。刷新节点管理窗口,观察变化
可以看到,在构架期间,Jenkins新开了个接节点,使用该新节点构建项目。构建完毕后,该节点被删除
在项目的输出信息上,也可以看到创建了slave节点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)