怎样自动化Ubuntu Jenkins部署任务
一、环境准备(Ubuntu服务器)
-
安装Jenkins
更新系统并安装Java(Jenkins依赖Java环境),添加Jenkins官方APT仓库,安装Jenkins并启动服务:sudo apt update sudo apt install openjdk-11-jdk -y # 推荐OpenJDK 11 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 sudo apt update sudo apt install jenkins -y sudo systemctl start jenkins sudo systemctl enable jenkins # 设置开机自启访问
http://< 服务器IP> :8080,输入初始密码(位于/var/lib/jenkins/secrets/initialAdminPassword)完成初始化。 -
安装Docker(可选,用于容器化部署)
若需用Docker容器部署,需安装Docker并授权Jenkins用户操作:sudo apt install docker.io -y sudo systemctl enable docker sudo usermod -aG docker jenkins # 将jenkins用户加入docker组 sudo systemctl restart jenkins -
安装必要工具
根据项目需求安装Git、Maven/Gradle、Node.js等工具(如Java项目需Maven,前端项目需Node.js):sudo apt install git -y curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - # Node.js示例 sudo apt install -y nodejs
二、Jenkins配置
-
安装核心插件
登录Jenkins → Manage Jenkins → Manage Plugins,安装以下插件:- Pipeline(必需,用于定义流水线流程)
- Docker Pipeline(若用Docker,简化Docker操作)
- SSH Pipeline Steps(若需远程部署到Ubuntu服务器)
- Git(若代码托管在Git仓库)。
-
配置全局工具
进入Manage Jenkins → Global Tool Configuration,设置工具路径(Jenkins需知道工具的安装位置):- JDK:指定JDK安装路径(如
/usr/lib/jvm/java-11-openjdk-amd64) - Git:指定Git安装路径(如
/usr/bin/git) - Maven:指定Maven安装路径(如
/opt/maven/apache-maven-3.8.6)。
- JDK:指定JDK安装路径(如
-
添加凭证
进入Manage Jenkins → Manage Credentials,添加以下凭证:- Git凭证:若代码仓库需要认证,添加Username/Password或SSH密钥
- Docker Hub凭证:若推送镜像到Docker Hub,添加Docker Hub账号
- SSH凭证:若远程部署到Ubuntu服务器,添加服务器SSH私钥。
三、创建自动化部署任务(Pipeline方式)
-
新建Pipeline任务
进入Jenkins主页 → New Item → 输入任务名称(如ubuntu-app-deploy)→ 选择Pipeline → 点击OK。 -
配置Pipeline脚本
有两种方式定义流水线:- Pipeline script from SCM(推荐,代码与配置分离):
选择代码仓库类型(如Git),填写仓库URL(如https://github.com/your-repo/ubuntu-app.git),指定分支(如main),并在“Script Path”中填写Jenkinsfile(Jenkins会自动从仓库拉取该文件)。 - Pipeline script(直接编写脚本,适合简单任务):
在“Script”框中直接编写Pipeline脚本(见下文示例)。
- Pipeline script from SCM(推荐,代码与配置分离):
-
示例Jenkinsfile(Docker+SSH部署)
以下是一个完整的Jenkinsfile示例,包含代码拉取、Docker构建/推送、远程部署步骤:pipeline { agent any environment { DOCKER_IMAGE = "your-dockerhub-username/ubuntu-app:${ BUILD_NUMBER} " // 镜像名称(含构建编号) REMOTE_SERVER = "ubuntu@your-server-ip" // 远程服务器SSH地址 REMOTE_DIR = "/home/ubuntu/app" // 远程服务器部署目录 DOCKER_HUB_CREDENTIAL = credentials('dockerhub-credential-id') // Jenkins中配置的Docker Hub凭证ID SSH_CREDENTIAL = credentials('ssh-credential-id') // Jenkins中配置的SSH凭证ID } stages { // 1. 拉取代码 stage('Checkout') { steps { git branch: 'main', url: 'https://github.com/your-repo/ubuntu-app.git' } } // 2. 构建Docker镜像 stage('Build Image') { steps { script { docker.build(DOCKER_IMAGE) } } } // 3. 推送镜像到Docker Hub(可选,若需远程部署) stage('Push Image') { steps { script { docker.withRegistry('https://registry.hub.docker.com', DOCKER_HUB_CREDENTIAL) { docker.image(DOCKER_IMAGE).push() } } } } // 4. 远程部署到Ubuntu服务器 stage('Deploy to Ubuntu') { steps { script { // 停止旧容器(若存在) sshPublisher( publishers: [ sshPublisherDesc( configName: 'deploy', // Jenkins中配置的SSH服务器名称 transfers: [ sshTransfer( execCommand: """ cd ${ REMOTE_DIR} & & docker stop ubuntu-app || true & & docker rm ubuntu-app || true & & docker pull ${ DOCKER_IMAGE} & & docker run -d -p 8080:8080 --name ubuntu-app ${ DOCKER_IMAGE} """ ) ] ) ] ) } } } // 5. 健康检查(可选,确保部署成功) stage('Health Check') { steps { script { sshPublisher( publishers: [ sshPublisherDesc( configName: 'deploy', transfers: [ sshTransfer( execCommand: """ max_attempts=5 attempt=1 while [ $attempt -le $max_attempts ]; do response=\$(curl -s -o /dev/null -w "%{ http_code} " http://localhost:8080/health) if [ "$response" = "200" ]; then echo "Health check succeeded" exit 0 fi echo "Attempt $attempt failed, waiting... (Status code: $response)" sleep 10 attempt=$((attempt + 1)) done echo "Health check failed after $max_attempts attempts" exit 1 """ ) ] ) ] ) } } } } } -
配置SSH服务器(Pipeline中用到)
进入Manage Jenkins → Manage Credentials,添加SSH凭证(私钥),然后在Jenkins中配置SSH服务器:- 进入Manage Jenkins → Manage Nodes and Clouds → New Node,输入节点名称(如
ubuntu-server),选择“Permanent Agent”,填写远程工作目录(如/home/ubuntu/jenkins),选择凭证(SSH私钥),点击Save。
- 进入Manage Jenkins → Manage Nodes and Clouds → New Node,输入节点名称(如
四、触发自动化部署
-
代码提交触发
在Jenkins任务的Configure页面,勾选Poll SCM,设置触发频率(如H/5 * * * *表示每5分钟检查一次代码变更);或在Git仓库(如GitHub)配置Webhook,指向Jenkins的http://< 服务器IP> :8080/github-webhook/(需安装GitHub Integration插件)。 -
手动触发
在Jenkins任务页面点击Build Now,手动触发构建(适合测试或调试)。
五、常见问题解决
- 权限不足
若Jenkins无法操作Docker或SSH,需添加用户权限:sudo usermod -aG docker jenkins # 允许jenkins用户使用Docker sudo systemctl restart jenkins - 端口冲突
部署前停止旧容器(已在Jenkinsfile中体现),避免端口占用。 - 构建缓存问题
在Maven构建命令中添加-U参数,强制更新依赖:sh 'mvn clean package -DskipTests -U'
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 怎样自动化Ubuntu Jenkins部署任务
本文地址: https://pptw.com/jishu/742367.html
