一、背景:
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:$PATH
COPY 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"]
需要准备的文件:
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: jnlp
image: "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
评论前必须登录!
注册