在Debian上实现Jenkins高可用性可采用以下方案,核心步骤结合主从架构、负载均衡及容器化部署:
安装Jenkins Master
在主节点执行以下命令安装Jenkins:
sudo apt update && sudo apt install jenkins
sudo systemctl enable --now jenkins
首次登录后,在Manage Jenkins -> Configure Global Security
中启用远程访问并设置随机端口(如50000)。
添加Slave节点
docker run -d --name jenkins-slave \
-v /usr/local/jenkins:/usr/local/jenkins \
bolingcavalry/openjdk-with-sshpass:8u232 \
java -jar /usr/local/jenkins/agent.jar \
-jnlpUrl http://<Master-IP>:8080/computer/slave-name/slave-agent.jnlp \
-secret <Secret> -workDir "/usr/local/jenkins"
(需替换<Master-IP>
、slave-name
及<Secret>
,从Master节点的Agent配置页面获取)。Manage Jenkins -> Manage Nodes
中选择“Permanent Agent”,填写节点名称、标签、并发数等信息,保存后通过SSH协议连接Slave。使用Nginx/HAProxy实现负载均衡
sudo apt install nginx
/etc/nginx/sites-available/jenkins
,添加以下内容:upstream jenkins {
server <Master-IP>:8080;
server <Slave-IP>:8080; # 可添加多个Slave节点
}
server {
listen 80;
location / {
proxy_pass http://jenkins;
}
}
启用配置并重启Nginx:sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/
sudo systemctl restart nginx
此时可通过Nginx的IP访问Jenkins,流量会自动分发到多个节点。共享存储(可选)
使用NFS共享Jenkins工作目录(/var/jenkins_home
),确保主从节点数据一致:
sudo apt install nfs-kernel-server
echo "/var/jenkins_home *(rw,sync,no_root_squash)" >> /etc/exports
sudo exportfs -a
sudo systemctl restart nfs-server
sudo apt install nfs-common
sudo mount -t nfs <Master-IP>:/var/jenkins_home /usr/local/jenkins
使用Docker Compose部署集群
创建docker-compose.yml
文件:
version: '3'
services:
jenkins-master:
image: jenkinsci/blueocean
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins-data:/var/jenkins_home
jenkins-slave:
image: bolingcavalry/jenkins-agent
environment:
- JENKINS_URL=http://jenkins-master:8080
- JENKINS_SECRET=<Secret>
- JENKINS_AGENT_NAME=slave-node
volumes:
- /usr/local/jenkins:/usr/local/jenkins
volumes:
jenkins-data:
启动集群:
docker-compose up -d
通过修改docker-compose.yml
可动态扩展Slave节点。
Kubernetes部署(高级方案)
kubectl create -f jenkins-master-deployment.yaml # 包含Pod定义、Service及PVC
Deployment
或StatefulSet
创建Agent Pod,利用kubectl scale
动态调整节点数量。/var/jenkins_home
目录通过NFS或云存储持久化,避免节点重启后数据丢失。以上方案可根据实际规模选择,小型集群推荐主从+负载均衡,大规模场景建议使用Kubernetes实现弹性伸缩和高可用。