在 Ubuntu 上实现 Jenkins 负载均衡
架构与适用场景
方案一 入口负载均衡 Nginx 或 HAProxy
upstream jenkins_controllers {
least_conn; # 或 round-robin
server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name jenkins.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name jenkins.example.com;
ssl_certificate /etc/letsencrypt/live/jenkins.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jenkins.example.com/privkey.pem;
location / {
proxy_pass http://jenkins_controllers;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_read_timeout 90s;
}
}
frontend http_front
bind *:80
bind *:443 ssl crt /etc/letsencrypt/live/jenkins.example.com/fullchain.pem
http-request redirect scheme https unless { ssl_fc }
default_backend jenkins_backend
backend jenkins_backend
balance leastconn
option httpchk GET /login
server controller1 10.0.0.11:8080 check inter 5s fall 3 rise 2
server controller2 10.0.0.12:8080 check inter 5s fall 3 rise 2
方案二 构建负载均衡 Jenkins Controller–Agent
# /etc/systemd/system/jenkins-agent.service
[Unit]
Description=Jenkins Agent
After=network.target
[Service]
User=jenkins
WorkingDirectory=/var/lib/jenkins-agent
ExecStart=/usr/bin/java -jar /var/lib/jenkins-agent/agent.jar \
-url http://jenkins.example.com/ \
-secret <AGENT_SECRET> \
-name agent-01 \
-workDir /var/lib/jenkins-agent
Restart=always
[Install]
WantedBy=multi-user.target
验证与运维要点