在开始自定义脚本前,需确保Ubuntu服务器已完成Jenkins基础环境配置:
apt添加Jenkins官方仓库并安装(参考搜索结果中“安装Jenkins”部分);openjdk-11-jdk)、Git、Maven/Node.js、Docker等(如使用Docker部署,需授权Jenkins用户操作Docker:sudo usermod -aG docker jenkins);Jenkins支持两种任务类型,根据项目复杂度选择:
根据任务类型选择脚本配置方式:
Freestyle Project:
#!/bin/bash
echo "开始拉取代码..."
git clone https://github.com/your/repo.git
cd repo
echo "编译项目..."
mvn clean package -DskipTests
echo "部署到本地服务器..."
cp target/*.jar /opt/app/
systemctl restart myapp.service
Pipeline:
Jenkinsfile,定义流水线逻辑(示例见下文)。若项目为Java应用,脚本可包含拉取代码→编译→打包→部署步骤:
#!/bin/bash
# 拉取最新代码
git -C /opt/repo pull origin main || { echo "拉取代码失败"; exit 1; }
# 编译项目
cd /opt/repo
mvn clean package -DskipTests || { echo "编译失败"; exit 1; }
# 备份旧jar包
cp /opt/app/app.jar /opt/app/app_backup_$(date +%Y%m%d).jar || { echo "备份失败"; exit 1; }
# 部署新jar包
cp target/*.jar /opt/app/app.jar
# 重启服务
systemctl restart myapp.service || { echo "重启服务失败"; exit 1; }
echo "部署成功!"
注意:需给脚本添加执行权限(chmod +x /opt/repo/deploy.sh),并在Jenkins中调用该脚本。
若项目为Spring Boot+Docker应用,Jenkinsfile可定义代码拉取→构建→Docker镜像→部署流程:
pipeline {
agent any
environment {
DOCKER_IMAGE = "your-dockerhub-username/springboot-app:${BUILD_NUMBER}"
DOCKER_REGISTRY = "https://registry.hub.docker.com"
REMOTE_SERVER = "user@deploy-server"
REMOTE_DIR = "/opt/app"
}
stages {
stage('Checkout') {
steps {
git branch: 'main', url: 'https://github.com/your/repo.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package -DskipTests'
}
}
stage('Build Docker Image') {
steps {
script {
docker.build(DOCKER_IMAGE)
}
}
}
stage('Push to Docker Hub') {
steps {
script {
docker.withRegistry(DOCKER_REGISTRY, 'dockerhub-credential-id') {
dockerImage.push()
}
}
}
}
stage('Deploy to Remote Server') {
steps {
script {
// 停止旧容器、删除旧镜像、拉取新镜像、启动新容器
sh """
ssh ${REMOTE_SERVER} "docker stop springboot-app || true"
ssh ${REMOTE_SERVER} "docker rm springboot-app || true"
ssh ${REMOTE_SERVER} "docker rmi ${DOCKER_IMAGE} || true"
ssh ${REMOTE_SERVER} "docker pull ${DOCKER_IMAGE}"
ssh ${REMOTE_SERVER} "docker run -d -p 8080:8080 --name springboot-app ${DOCKER_IMAGE}"
"""
}
}
}
}
post {
success {
echo "部署成功!"
}
failure {
echo "部署失败,请检查日志!"
}
}
}
说明:
environment:定义全局环境变量(如Docker镜像名称、远程服务器信息);stages:划分构建流程为多个阶段,每个阶段包含具体步骤;script:在Pipeline中嵌入Shell脚本(用于远程部署);post:定义构建完成后的操作(如发送通知)。实现代码变更自动触发构建:
H/5 * * * *表示每5分钟检查一次代码变更);/project/your-job-name接口,当代码推送时自动触发构建。sudo usermod -aG docker jenkins)。通过以上步骤,可完成Ubuntu环境下Jenkins自定义部署脚本的配置。根据项目需求调整脚本内容(如添加测试阶段、通知功能),实现灵活的自动化部署流程。