Linux 上搭建高可用、可维护的 Jenkins 最佳实践
一 环境与前置准备
yum install -y java-11-openjdk java-11-openjdk-develjava -versionapt update && apt install -y openjdk-11-jdk openjdk-11-jrejava -version二 安装与初始化
wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.reporpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.keyyum install -y jenkinssystemctl start jenkins && systemctl enable jenkinssystemctl status jenkinswget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key | gpg --dearmor -o /usr/share/keyrings/jenkins-keyring.gpgecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.gpg] https://pkg.jenkins.io/debian-stable binary/" | tee /etc/apt/sources.list.d/jenkins.list > /devrefapt update && apt install -y jenkinssystemctl start jenkins && systemctl enable jenkinssystemctl status jenkinswget https://get.jenkins.io/war-stable/latest/jenkins.warnohup java -jar /opt/jenkins.war --httpPort=8080 >/var/log/jenkins.log 2>&1 &firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reloadufw allow 8080/tcp && ufw enablehttp://服务器IP:8080cat /var/lib/jenkins/secrets/initialAdminPassword三 安全加固与反向代理 HTTPS
apt install -y nginx 或 yum install -y nginxserver {
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://127.0.0.1:8080;
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;
}
}
systemctl reload nginxhttps://jenkins.example.com四 核心配置与第一个流水线
https://gitee.com/xxx/xxx.git)*/main;Jenkinsfile 路径:默认 Jenkinsfilepipeline {
agent any
tools { maven 'Maven 3.8' } // 与全局工具中名称一致
environment {
PROJECT_DIR = '/var/jenkins/workspace/${JOB_NAME}'
}
stages {
stage('Checkout') {
steps { git url: 'https://gitee.com/xxx/xxx.git', branch: 'main' }
}
stage('Build') {
steps { sh 'mvn -B -DskipTests clean package' }
}
stage('Archive') {
steps { archiveArtifacts artifacts: 'target/*.jar', fingerprint: true }
}
}
post {
success { echo 'Build SUCCESS' }
failure { echo 'Build FAILURE' }
}
}
triggers { pollSCM('* * * * *') }五 性能优化与运维实践
JAVA_OPTS="-Xms512m -Xmx2048m"(systemd 服务可在 /etc/default/jenkins 或 jenkins.service 的 Environment= 中设置)/var/lib/jenkins/updates/default.json 中的下载域名journalctl -u jenkins -f 或 tail -f /var/log/jenkins.log