Jenkins 是一个自动化服务器,在不断发展的 DevOps 环境中协调 CI/CD 管道方面发挥着至关重要的作用。然而,传统的 Jenkins 代理在可扩展性和灵活性方面存在局限性。这就是 Kubernetes 的用武之地。Kubernetes 是一个容器编排平台,正在改变部署和管理的方式。本文通过使用 Kubernetes Pod 作为 Jenkins 代理,深入探讨 Jenkins 和 Kubernetes 如何协同工作。这使团队能够动态扩展、优化资源利用率并简化其 CI/CD 工作流程。
是的,你没有看错,我们可以将 Kubernetes pod 配置为 Jenkins 代理。让我们深入了解步骤。 先决条件
让我们创建一个简单的部署文件,它将启动一个 Pod 和一个服务。
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
labels:
app: demo
color: green
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
color: green
spec:
containers:
- name: demo
image: ubuntu18:latest
command: ["/usr/sbin/sshd","-D"]
imagePullPolicy: IfNotPresent
volumeMounts:
- name: home
mountPath: /home/
ports:
- containerPort: 22
volumes:
- name: home
hostPath:
path: /home/demo/
---
apiVersion: v1
kind: Service
metadata:
annotations:
name: demo-service
spec:
ports:
- port: 2222
targetPort: 22
nodePort: 32222
selector:
app: demo
sessionAffinity: None
type: NodePort
上述文件创建一个名为“demo”的 Pod 来自主机服务器上可用的基本映像“ubuntu18”,其中包含将在容器内使用的用户详细信息 当 pod 启动时执行命令“/usr/bin/sshd -D”以在调试模式下启动 SSH 守护进程 挂载主机服务器的主目录“/home/demo”到pod中的home目录 打开端口“22”用于 SSH 连接 创建服务“demo-service” 打开nodePort“32222”,使服务可以从Kubernetes集群外部访问 打开端口“2222”,这是 Kubernetes 集群内服务的内部端口 打开 Pod 容器正在侦听的目标端口“22” 映射nodePort、targetPort和端口
运行以下命令将启动 pod 和服务
kubectl apply -f <yaml_file_name>
使用以下命令检查 pod 和服务是否已成功启动
kubectl get deployments
在 Jenkins 控制台上,转到“管理 Jenkins”->“管理节点和云”->“新建节点” 提供“节点名称”,选择“永久代理”,然后单击“创建”。
添加如下详细信息并保存。
节点详情
创建节点后,启动该节点以使Kubernetes pod 作为 Jenkins Agent。
文章翻译:
https://medium.com/make-android/kubernetes-pod-as-a-jenkins-agent-5e88eaf292cd