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

【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
http://www.xdnf.cn/news/1336.html

相关文章:

  • 【数据可视化-24】巧克力销售数据的多维度可视化分析
  • 解读大型语言模型:从Transformer架构到模型量化技术
  • 3小时速通Python-Python学习总部署、总预览(一)
  • transformer 解码器和输出部分结构
  • gradle可用的下载地址(免费)
  • Linux 内核中 cgroup 子系统 cpuset 是什么?
  • nodejs模块暴露数据的方式,和引入(导入方式)方式
  • 高级java每日一道面试题-2025年4月21日-基础篇[反射篇]-如何使用反射获取一个类的所有方法?
  • 移动通信运营商对MTU的大小设置需求
  • 【codeforces思维题】前缀和的巧妙应用(2053B)
  • 【AI News | 20250422】每日AI进展
  • 计算机组成原理---总线系统的详细概述
  • HCIP-H12-821 核心知识梳理 (5)
  • 如何修改文件termsrv.dll实现多用户同时远程
  • 一个关于相对速度的假想的故事-4
  • AGI大模型(12):向量检索之关键字搜索
  • 企业战略到数字化落地 —— 第四章 SOP 的概念
  • 几种电气绝缘类型
  • Mininet--node.py源码解析
  • 学习笔记——《Java面向对象程序设计》-抽象和接口
  • 实验1python基本网络应用
  • 为TA开发人员介绍具有最新改进的Kinibi-610a
  • 【Vue3 / TypeScript】 项目兼容低版本浏览器的全面指南
  • 【MySQL】数据库基础
  • 从马拉松到格斗大赛:人形机器人撕开的万亿市场,正在改写AI规则
  • STM32单片机入门学习——第45节: [13-2] 修改频主睡眠模式停止模式待机模式
  • G1 人形机器人硬件构成与接口
  • 图像挖掘课程笔记-第一章:了解机器视觉
  • 【TeamFlow】4.3.2 细化时间单位
  • 设备预测性维护系统部署成本:技术架构与成本优化策略解析