在CentOS上自定义Jenkins部署前,需先安装Java(Jenkins依赖)、Git(代码托管库交互)、Docker(可选,用于容器化部署)等工具。
sudo yum install -y java-11-openjdk-devel
java -version # 验证安装
sudo yum install -y git
git --version # 验证安装
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker # 启动并设置开机自启
# 添加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
# 安装Jenkins
sudo yum install -y jenkins
# 启动Jenkins并设置开机自启
sudo systemctl start jenkins
sudo systemctl enable jenkins
# 下载Jenkins WAR包
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
# 后台启动Jenkins(指定端口为8080)
nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1 &
# 查看初始管理员密码(用于首次登录)
tail -f jenkins.log # 密码位于/var/lib/jenkins/secrets/initialAdminPassword
http://<服务器IP>:8080,输入初始管理员密码(从/var/lib/jenkins/secrets/initialAdminPassword获取)。进入“Manage Jenkins” → “Manage Plugins”,安装以下插件:
进入“Manage Jenkins” → “Global Tool Configuration”,设置常用工具路径:
JAVA_HOME(如/usr/lib/jvm/java-11-openjdk)。/usr/bin/git)。MAVEN_HOME(如/usr/share/maven)。首次登录后,设置管理员用户名、密码及邮箱,完成基础配置。
进入Jenkins首页,点击“New Item”,选择任务类型(如“Freestyle project”或“Pipeline”),输入任务名称后点击“OK”。
https://github.com/your-repo/project.git)。main)。http://<Jenkins服务器IP>:8080/generic-webhook-trigger/invoke)。H/5 * * * *表示每5分钟检查一次代码变更)。mvn clean package # Maven项目编译打包
Jenkinsfile),后续在代码仓库中维护Pipeline脚本。scp target/*.war tomcat@<测试服务器IP>:/opt/tomcat/webapps/
ssh tomcat@<测试服务器IP> "systemctl restart tomcat"
在代码仓库根目录创建Jenkinsfile,以代码形式定义部署流程(推荐)。示例如下:
pipeline {
agent any // 使用任意可用节点
stages {
stage('Pull Code') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/project.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package' // Maven编译打包
}
}
stage('Deploy to Test') {
steps {
sh 'scp target/*.war tomcat@<测试服务器IP>:/opt/tomcat/webapps/'
ssh tomcat@<测试服务器IP> 'systemctl restart tomcat'
}
}
stage('Deploy to Production') {
when {
expression { return currentBuild.result == 'SUCCESS' } // 仅构建成功时部署
}
steps {
input message: '确认部署到生产环境?', ok: 'Deploy'
sh 'scp target/*.war tomcat@<生产服务器IP>:/opt/tomcat/webapps/'
ssh tomcat@<生产服务器IP> 'systemctl restart tomcat'
}
}
}
post {
always {
echo '构建流程结束,发送通知...'
}
success {
echo '构建成功!'
}
failure {
echo '构建失败,请检查日志!'
}
}
}
FROM tomcat:9.0
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
EXPOSE 8080
CMD ["catalina.sh", "run"]
stage('Build Docker Image') {
steps {
script {
docker.build("your-dockerhub-id/your-app:${env.BUILD_NUMBER}")
}
}
}
stage('Push Docker Image') {
steps {
script {
docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-credentials') {
docker.image("your-dockerhub-id/your-app:${env.BUILD_NUMBER}").push()
}
}
}
}
stage('Deploy with Docker') {
steps {
ssh tomcat@<测试服务器IP> 'docker pull your-dockerhub-id/your-app:${env.BUILD_NUMBER} && docker stop your-app || true && docker rm your-app || true && docker run -d -p 8080:8080 --name your-app your-dockerhub-id/your-app:${env.BUILD_NUMBER}'
}
}
通过Jenkins参数化构建(如“String Parameter”添加ENVIRONMENT参数,值为test或production),在Pipeline脚本中根据参数选择部署目标:
parameters {
string(name: 'ENVIRONMENT', defaultValue: 'test', description: '部署环境(test/production)')
}
stage('Deploy') {
steps {
script {
if (params.ENVIRONMENT == 'test') {
// 部署到测试环境
} else if (params.ENVIRONMENT == 'production') {
// 部署到生产环境(需增加确认步骤)
}
}
}
}
在Pipeline中添加测试阶段(如JUnit测试)和代码质量检查(如SonarQube扫描):
stage('Test') {
steps {
sh 'mvn test' // 执行单元测试
}
}
stage('Code Quality Check') {
steps {
withSonarQubeEnv('sonarqube-server') { // 配置SonarQube服务器
sh 'mvn sonar:sonar'
}
}
}
sudo firewall-cmd --add-port=8080/tcp --permanent,sudo firewall-cmd --reload)。tomcat或jenkins)有执行脚本的权限(chmod +x deploy.sh)。通过以上步骤,可在CentOS上自定义Jenkins部署流程,实现从代码提交到测试、生产的自动化持续交付。根据项目需求,可进一步扩展Pipeline脚本(如集成性能测试、通知机器人),或优化部署策略(如蓝绿部署、滚动更新)。