CentOS 上搭建 Jenkins 自动化构建流程
一 环境准备与安装
- 安装 Java(推荐 OpenJDK 11):sudo yum install -y java-11-openjdk-devel
- 添加 Jenkins 官方 YUM 源 并安装:
- sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
- sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
- sudo yum install -y jenkins
- 启动并设置开机自启:sudo systemctl start jenkins && sudo systemctl enable jenkins
- 开放防火墙端口(默认 8080):sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload
- 首次访问:浏览器打开 http://<服务器IP>:8080,初始管理员密码在 /var/lib/jenkins/secrets/initialAdminPassword。
二 基础配置
- 插件安装:进入 Manage Jenkins → Manage Plugins,安装核心插件如 Git Plugin、Maven Integration Plugin、Pipeline Plugin、Email Extension Plugin。
- 全局工具配置:进入 Manage Jenkins → Global Tool Configuration,配置 JDK(如 /usr/lib/jvm/java-11-openjdk)、Maven(如 /usr/share/maven)、Git(如 /usr/bin/git),便于任务直接引用。
- 安全与网络:建议启用 HTTPS、创建管理员账户;如使用云服务器,确保安全组/防火墙放行 8080。
三 创建任务与触发器
- 新建任务:New Item → 选择 Freestyle project 或 Pipeline。
- 源码管理:选择 Git,填写仓库 URL;私有仓库在 Credentials 中添加 SSH Key 或 Username with password。
- 构建触发器:
- 定时触发:Build periodically,示例 **H/5 * * * ***(每 5 分钟检查一次变更)
- 代码提交触发:使用 GitLab webhook,Payload URL 形如 http://<Jenkins服务器IP>:8080/project/<任务名>
- 构建步骤:
- Freestyle:Add build step → Invoke top-level Maven targets(如 clean package),或 Execute shell(自定义脚本)
- Pipeline:在 Pipeline 配置中选择 Pipeline script from SCM,指定仓库与 Jenkinsfile 路径
- 构建后操作:
- Archive the artifacts(如 target/*.jar)
- 使用 Email Extension 发送通知(需配置 SMTP)
四 Pipeline 示例与关键实践
- 声明式 Pipeline 示例(Java + Maven)
pipeline {
agent any
tools {
maven ‘Maven 3.6.3’ // 与全局工具配置中的名称一致
jdk ‘JDK 11’
}
environment {
MAVEN_OPTS = “-Dmaven.repo.local=${env.WORKSPACE}/.m2”
DEPLOY_ENV = ‘staging’
}
stages {
stage(‘Checkout’) {
steps { git branch: ‘main’, url: ‘https://github.com/user/repo.git’ }
}
stage(‘Build’) {
steps { sh ‘mvn -B clean package’ }
post { success { archiveArtifacts ‘target/.jar’ } }
}
stage(‘Test’) {
steps { sh ‘mvn test’ }
post { always { junit '**/target/surefire-reports/.xml’ } }
}
stage(‘Deploy’) {
when { branch ‘develop’ }
steps {
sshagent([‘staging-key’]) {
sh ‘scp target/*.jar user@staging-server:/opt/app’
}
}
}
}
post {
always { cleanWs() }
success { emailext body: ‘Build succeeded: ${BUILD_URL}’, subject: ‘Jenkins Build Success’, to: ‘dev@example.com’ }
failure { emailext body: ‘Build failed: ${BUILD_URL}’, subject: ‘Jenkins Build Failed’, to: ‘dev@example.com’ }
}
}
- 关键实践
- 使用 Jenkinsfile 将流程纳入版本控制(Pipeline as Code)
- 通过 sshagent 管理部署凭据,避免明文密码
- 在 post 阶段统一做清理与通知,提升可观测性
- 使用 when 控制部署阶段仅在特定分支触发
五 常见问题与优化
- 插件安装慢或失败:可临时使用国内镜像源更新 updates/default.json 的下载地址后重启 Jenkins(注意仅用于网络受限场景)。
- 构建并发与资源:合理设置 JVM 堆大小(-Xms/-Xmx)、限制并发构建数,必要时使用 分布式构建 扩展节点。
- 稳定性与升级:定期更新 Jenkins 与插件、清理旧构建与工作空间,避免磁盘与性能问题。