怎样自动化Ubuntu Jenkins部署过程
导读:一、环境准备 在Ubuntu上实现Jenkins自动化部署前,需完成以下基础配置: 安装Java环境:Jenkins基于Java开发,需安装JDK(推荐OpenJDK 11+)。执行以下命令安装并验证:sudo apt update &a...
一、环境准备
在Ubuntu上实现Jenkins自动化部署前,需完成以下基础配置:
- 安装Java环境:Jenkins基于Java开发,需安装JDK(推荐OpenJDK 11+)。执行以下命令安装并验证:
sudo apt update & & sudo apt install -y openjdk-11-jdk java -version # 验证安装(需显示Java版本信息) - 安装Jenkins:
- 添加Jenkins官方APT仓库并导入密钥:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /dev/null echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null - 安装Jenkins并启动服务:
sudo apt update & & sudo apt install -y jenkins sudo systemctl start jenkins & & sudo systemctl enable jenkins # 开机自启 - 访问Jenkins Web界面(
http://< 服务器IP> :8080),输入初始密码(位于/var/lib/jenkins/secrets/initialAdminPassword)完成解锁,安装推荐插件(如Pipeline、Git)。
- 添加Jenkins官方APT仓库并导入密钥:
二、配置Jenkins基础环境
- 安装必要插件:
进入“Manage Jenkins → Manage Plugins”,安装以下插件:- Pipeline:用于定义自动化流程;
- Git:用于从Git仓库拉取代码;
- Publish over SSH:用于安全地将文件传输到远程服务器;
- Docker(可选):若使用容器化部署,需安装此插件。
- 配置全局工具:
进入“Manage Jenkins → Global Tool Configuration”,设置以下工具路径(若未自动检测):- JDK:指定JDK安装路径(如
/usr/lib/jvm/java-11-openjdk-amd64); - Git:指定Git安装路径(如
/usr/bin/git); - Maven(可选):若使用Maven构建,指定Maven路径(如
/usr/share/maven)。
- JDK:指定JDK安装路径(如
- 配置SSH密钥(用于远程部署):
- 在Jenkins服务器上生成SSH密钥对(若未生成):
ssh-keygen -t rsa -b 4096 -C "jenkins@example.com" - 将公钥(
~/.ssh/id_rsa.pub)添加到目标服务器的~/.ssh/authorized_keys文件中; - 在Jenkins中添加SSH凭据:“Manage Jenkins → Credentials → System → Global credentials → Add Credentials”,选择“SSH Username with private key”,输入目标服务器用户名和私钥内容。
- 在Jenkins服务器上生成SSH密钥对(若未生成):
三、创建Jenkins Pipeline任务
- 新建Pipeline任务:
登录Jenkins,点击“New Item”,输入任务名称(如ubuntu-app-deploy),选择“Pipeline”,点击“OK”。 - 配置Pipeline脚本:
选择“Pipeline script from SCM”(推荐,便于版本控制),设置以下参数:- SCM:选择
Git,输入代码仓库URL(如https://github.com/your-repo/your-project.git)和分支(如main); - Script Path:指定Jenkinsfile路径(如
Jenkinsfile,需与代码仓库中的文件路径一致)。
- SCM:选择
- 示例Jenkinsfile(Java应用):
以下是一个完整的声明式Pipeline脚本,包含代码拉取、构建、测试、部署流程:注:可根据项目需求调整阶段(如添加Docker构建、推送镜像等)。pipeline { agent any environment { // 环境变量配置 PROJECT_NAME = "ubuntu-app" JAR_NAME = "${ PROJECT_NAME} -${ env.BUILD_ID} .jar" DEPLOY_DIR = "/opt/ubuntu-app" // 远程服务器部署目录 SSH_USER = "ubuntu" // 远程服务器用户名 SSH_HOST = "192.168.1.100" // 远程服务器IP } stages { stage('Checkout') { steps { // 从Git拉取代码 git branch: 'main', url: 'https://github.com/your-repo/your-project.git' } } stage('Build') { steps { // 使用Maven构建项目(跳过测试) sh 'mvn -U -Dmaven.test.skip=true clean package' } } stage('Test') { steps { // 执行单元测试(可选) sh 'mvn test' } } stage('Deploy') { steps { script { // 停止远程服务器上的旧进程(避免端口冲突) sh "ssh ${ SSH_USER} @${ SSH_HOST} 'pkill -f ${ JAR_NAME} || true'" // 删除旧JAR包 sh "ssh ${ SSH_USER} @${ SSH_HOST} 'rm -f ${ DEPLOY_DIR} /${ JAR_NAME} '" // 复制新JAR包到远程服务器 sh "scp target/${ JAR_NAME} ${ SSH_USER} @${ SSH_HOST} :${ DEPLOY_DIR} /" // 启动应用(后台运行,输出日志到文件) sh "ssh ${ SSH_USER} @${ SSH_HOST} 'nohup java -jar ${ DEPLOY_DIR} /${ JAR_NAME} --server.port=8080 > ${ DEPLOY_DIR} /${ PROJECT_NAME} .log 2> & 1 & '" } } } } post { success { // 构建成功通知(如邮件、Slack) echo "Deployment successful for build #${ env.BUILD_NUMBER} " } failure { // 构建失败通知 echo "Deployment failed for build #${ env.BUILD_NUMBER} " } } }
四、配置自动化触发器
- 代码提交触发:
在Pipeline配置页面,勾选“GitHub hook trigger for GITScm polling”,并在Git仓库中配置Webhook(指向http://< Jenkins服务器IP> :8080/github-webhook/),实现代码推送后自动触发构建。 - 定时触发:
在“Build Triggers”中勾选“Poll SCM”,设置定时规则(如H/5 * * * *表示每5分钟检查一次代码变更,若有变更则触发构建)。
五、测试自动化部署
- 提交代码:向Git仓库推送代码变更(如修改代码后执行
git push origin main); - 查看构建状态:Jenkins会自动触发Pipeline,进入任务页面查看各阶段执行情况(如Checkout、Build、Deploy);
- 验证部署结果:登录远程Ubuntu服务器,检查应用是否运行(如
ps -ef | grep java查看进程,tail -f /opt/ubuntu-app/ubuntu-app.log查看日志)。
常见问题解决
- 权限不足:若Jenkins无法执行
docker或ssh命令,需将Jenkins用户加入对应组:sudo usermod -aG docker jenkins # 允许Jenkins使用Docker sudo usermod -aG ssh jenkins # 允许Jenkins使用SSH sudo systemctl restart jenkins # 重启Jenkins服务 - 端口冲突:部署前停止远程服务器上的旧进程(如
ssh ${ SSH_USER} @${ SSH_HOST} 'pkill -f ${ JAR_NAME} ')。 - 构建缓存问题:在Maven构建命令中添加
-U参数,强制更新依赖(如mvn -U clean package)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样自动化Ubuntu Jenkins部署过程
本文地址: https://pptw.com/jishu/737526.html
