自动化部署是DevOps的核心实践,通过Jenkins实现Ubuntu环境的自动化部署,可显著提升效率、减少人为错误。以下是从环境准备到流水线配置的完整步骤:
在开始前,需确保Ubuntu服务器满足以下基础要求:
sudo apt update && sudo apt install -y openjdk-11-jdk
# 验证Java安装
java -version
sudo权限。wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update && sudo apt install -y jenkins
sudo systemctl start jenkins
sudo systemctl enable jenkins
http://<服务器IP>:8080,输入初始密码(通过sudo cat /var/lib/jenkins/secrets/initialAdminPassword获取),完成管理员账号创建及插件安装(推荐安装Pipeline、Git、SSH Pipeline Steps等插件)。若项目使用Maven、Git等工具,可在Jenkins中统一配置路径,避免每次手动指定:
Manage Jenkins > Global Tool Configuration;Jenkins Pipeline是实现自动化部署的核心,通过声明式语法定义构建、测试、部署流程。以下是**Java应用(Maven+Docker)**的典型配置:
New Item;ubuntu-app-deploy),选择Pipeline,点击OK。有两种方式定义流水线:
Jenkinsfile(版本可控);示例:Jenkinsfile(声明式语法)
pipeline {
agent any // 使用默认Agent(Ubuntu服务器)
environment {
DOCKER_REGISTRY = "your-docker-registry.example.com" // Docker镜像仓库地址
DOCKER_CREDENTIALS_ID = 'docker-creds' // Jenkins中配置的Docker凭证ID
PROJECT_NAME = "ubuntu-app" // 镜像名称
}
stages {
// 1. 拉取代码
stage('Checkout') {
steps {
git url: 'https://github.com/your-repo/ubuntu-app.git',
branch: 'main', // 监听main分支变更
credentialsId: 'git-creds' // Git仓库凭证
}
}
// 2. 构建项目(Maven)
stage('Build') {
steps {
sh 'mvn clean package -DskipTests' // 跳过测试(可选)
junit '**/target/surefire-reports/*.xml' // 发布测试报告
}
}
// 3. 构建Docker镜像
stage('Build Docker Image') {
steps {
script {
docker.build("${DOCKER_REGISTRY}/${PROJECT_NAME}:${env.BUILD_ID}")
}
}
}
// 4. 推送镜像到仓库
stage('Push Docker Image') {
steps {
withCredentials([usernamePassword(
credentialsId: DOCKER_CREDENTIALS_ID,
usernameVariable: 'DOCKER_USER',
passwordVariable: 'DOCKER_PASS'
)]) {
sh """
docker login -u ${DOCKER_USER} -p ${DOCKER_PASS} ${DOCKER_REGISTRY}
docker push ${DOCKER_REGISTRY}/${PROJECT_NAME}:${env.BUILD_ID}
"""
}
}
}
// 5. 部署到Ubuntu服务器(通过SSH)
stage('Deploy to Ubuntu Server') {
steps {
sshPublisher(
publishers: [
sshPublisherDesc(
configName: 'ubuntu-production-server', // Jenkins中配置的SSH服务器
transfers: [
sshTransfer(
execCommand: """
docker stop ubuntu-app || true
docker rm ubuntu-app || true
docker pull ${DOCKER_REGISTRY}/${PROJECT_NAME}:${env.BUILD_ID}
docker run -d --name ubuntu-app -p 8080:8080 ${DOCKER_REGISTRY}/${PROJECT_NAME}:${env.BUILD_ID}
""",
remoteDirectory: '/opt/ubuntu-app' // 远程服务器部署目录
)
]
)
]
)
}
}
}
// 6. 触发条件(可选)
triggers {
githubHookTrigger('refs/heads/main') // GitHub Webhook触发(代码推送时自动构建)
// 或定时触发(如每天凌晨2点):cron('H 2 * * *')
}
}
Source Code Management中配置Git仓库地址及凭证(需提前在Jenkins中添加SSH或用户名密码凭证);Manage Jenkins > Credentials中添加Docker Hub或私有仓库的用户名/密码,用于推送镜像;Manage Jenkins > Manage Nodes and Clouds > Configure中添加Ubuntu目标服务器的SSH连接(配置主机名、用户名、私钥/密码)。main分支推送代码变更;http://<Ubuntu服务器IP>:8080,确认应用是否正常运行。docker.build时添加--cache-from参数)、Maven本地仓库缓存(-v ~/.m2:/root/.m2);Role Strategy插件限制Jenkins用户权限(如仅管理员可修改流水线配置);通过以上步骤,即可在Ubuntu上实现Jenkins自动化部署,覆盖从代码提交到生产环境的全流程,提升开发效率与部署可靠性。