当前位置: 首页 > news >正文

【3】CICD持续集成-k8s集群中安装Jenkins-agent(主从架构)

一、背景:

Jenkins Master/Slave架构,Master(Jenkins本身)提供Web页面让用户来管理项目和从节点(Slave),项目任务可以运行在Master本机或者分配到从节点运行,一个Master可以关联多个Slave,这样好处是可以让Slave分担Master工作压力和隔离构建环境。

如图:当触发任务时,调度agent执行任务,任务完成时pod自动回收。
在这里插入图片描述

二、插件配置Kubernetes插件

Kubernetes插件:用于Jenkins在Kubernetes集群中运行动态代理
插件介绍:https://github.com/jenkinsci/kubernetes-plugin
配置插件:管理Jenkins->管理Nodes和云->管理云->添加Kubernetes

注意:前提是先在Jenkins插件管理页,安装Kubernetes插件 参考:在k8s中安装Jenkins

维护两个地址:
在这里插入图片描述

三、自定义slave镜像

3.1 编写Dockerfile:

FROM centos:7
LABEL maintainer rider# 指定域名解析服务
RUN echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 修改centos镜像仓库地址(先备份再拷贝)
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo
# 清理缓存
RUN yum clean all && \yum makecache
# 安装依赖组件
RUN yum install -y maven curl git libtool-ltdl-devel && \ rm -rf /var/cache/yum/* && \mkdir -p /usr/share/jenkins
# 准备jdk环境(从官网下载jdk包)
COPY jdk-17.0.15_linux-x64_bin.tar.gz /opt/
# 下载并解压 JDK 17(示例使用 OpenJDK 17.0.15)
RUN tar -xzvf /opt/jdk-17.0.15_linux-x64_bin.tar.gz  -C /opt && \rm -rf /opt/jdk-17.0.15_linux-x64_bin.tar.gz# 设置环境变量
ENV JAVA_HOME /opt/jdk-17.0.15
ENV PATH $JAVA_HOME/bin:$PATHCOPY agent.jar /usr/share/jenkins/agent.jar  
COPY jenkins-agent /usr/bin/jenkins-agent
COPY settings.xml /etc/maven/settings.xml
RUN chmod +x /usr/bin/jenkins-agent
COPY helm kubectl /usr/bin/ENTRYPOINT ["jenkins-agent"]

需要准备的文件:

  1. Jenkins版本是最新的lts版本,要求slave的运行jdk环境必须jdk17,所以先从官网下载linux版jdk压缩包。如:jdk-17.0.15_linux-x64_bin.tar.gz
  2. agent.jar:从安装的Jenkins服务中下载,格式如:http://jenkinsip:port/jnlpJars/slave.jar,然后把slave.jar改名为agent.jar
  3. jenkins-agent:启动agent.jar的脚本,下载地址:https://github.com/jenkinsci/docker-inbound-agent/blob/master/jenkins-agent
  4. helm kubectl:helm客户端二进制文件、kubectl:k8s的二进制客户端文件(专题前面文章有)
  5. settings.xml:maven仓库的配置文件
  6. CentOS-Base.repo:使用阿里云的centos镜像仓库配置文件,下载地址:http://mirrors.aliyun.com/repo/Centos-7.repo

3.2 构建&推送镜像

mkdir /opt/jenkins-slave
cd /opt/jenkins-slave

然后把上述准备的文件和Dockerfile文件,都放到文件夹:/opt/jenkins-slave

执行docker构建命令:

docker build -t 192.168.1.23/library/jenkins-slave-jdk:17 .
docker push 192.168.1.23/library/jenkins-slave-jdk:17 

四、创建构建流水线

新建项目->流水线->Pipeline脚本

pipeline脚本(示例):

pipeline {
agent {
kubernetes {label "jenkins-slave"yaml '''
apiVersion: v1
kind: Pod
metadata:name: jenkins-slave
spec:containers:- name: jnlpimage: "192.168.1.23/library/jenkins-slave-jdk:17"'''}
}
stages {stage('Main'){steps {sh 'hostname'}}}
}

注意:这里拉群镜像是从192.168.1.23的harbor镜像仓库获取,默认开启了https,如果不加证书的情况,修改所有工作节点的docker的daemon.json文件,文件路径:/etc/docker/daemon.json
新增对192.168.1.23忽略证书

# vim daemon.json
"insecure-registries": ["192.168.1.23"]

五、总结&验证

在Jenkins运行刚创建的流水线项目,然后在k8s查询Jenkins-salve是否有创建pod

# 这边使用的namespace是Jenkins
kubectl get pods -n jenkins

如何有报错则查看日志:
容器创建失败执行以下命令查询:

kubectl describe pod 【podID】 -n jenkins

容器创建成功,但是slave没启动成功或没连接到Jenkins服务,查看日志是否有报错

kubectl logs【podID】 -n jenkins

相关文章:

  • 【自然语言处理与大模型】大模型参数规模与部署配置调查2025第一季度
  • [特殊字符] 大模型对话风格微调项目实战——模型篇 [特殊字符]✨
  • 深度解析:透过十问十答洞悉大模型SFT的应用策略
  • gem5-gpu教程04 高速缓存一致性协议和缓存拓扑
  • 【电机仿真】MPC模型预测转速、电流双闭环控制器——PMSM有感FOC控制
  • Java面试:探索Spring Boot与微服务的深度挑战
  • 关于编译原理——语义翻译器的设计
  • 图文结合 - 储能系统产品需求文档(PRD)- (慧哥)慧知开源充电桩平台
  • 互联网大厂Java面试:RocketMQ、RabbitMQ与Kafka的深度解析
  • QT6 源(45):分隔条 QSplitter 允许程序的用户修改布局,程序员使用 IDE时,就是分隔条的用户,以及其 QSplitter 源代码
  • MyBatis中的@Param注解-如何传入多个不同类型的参数
  • (09)Vue脚手架的使用(Vite、vue-cli、create-vue)
  • 软件项目实施全流程及交付物清单
  • 逻辑漏洞安全
  • 硬核科普丨2025年安全、高效网络准入控制系统深度解析
  • 配电室安全用电漏电保护装置的安全用电措施
  • 【水印图片文字识别】水印相机拍摄的照片提取重要的信息可以批量改名,批量识别水印文字内容批量给图片改名,基于QT和腾讯OCR的识别方案
  • 2025.04.23华为机考第二题-200分
  • 01 ubuntu中wps桌面快捷键无法使用
  • [STM32] 4-1 UART与串口通信
  • 全红婵、李宁亮相中国航天日论坛,体育和航天这一次紧密相连
  • 继加州后,美国又有11州起诉特朗普政府滥用关税政策“违法”
  • 宁德时代与广汽等五车企发布10款巧克力换电新车型:年内将将完成30城1000站计划
  • 上海常务副市长:持续提升跨境投融资便利化水平,稳步扩大金融领域的制度型开放
  • 王毅将出席中国一中亚外长第六次会晤、金砖国家外长会晤和第十五次金砖国家安全事务高级代表会议
  • 供应商已“陷入困境”,美汽车行业致信特朗普政府