首页主机资讯怎样自动化Ubuntu Jenkins部署任务

怎样自动化Ubuntu Jenkins部署任务

时间2025-11-04 22:21:03发布访客分类主机资讯浏览675
导读:一、环境准备(Ubuntu服务器) 安装Jenkins 更新系统并安装Java(Jenkins依赖Java环境),添加Jenkins官方APT仓库,安装Jenkins并启动服务: sudo apt update sudo apt ins...

一、环境准备(Ubuntu服务器)

  1. 安装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)完成初始化。

  2. 安装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
    
  3. 安装必要工具
    根据项目需求安装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配置

  1. 安装核心插件
    登录Jenkins → Manage JenkinsManage Plugins,安装以下插件:

    • Pipeline(必需,用于定义流水线流程)
    • Docker Pipeline(若用Docker,简化Docker操作)
    • SSH Pipeline Steps(若需远程部署到Ubuntu服务器)
    • Git(若代码托管在Git仓库)。
  2. 配置全局工具
    进入Manage JenkinsGlobal 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)。
  3. 添加凭证
    进入Manage JenkinsManage Credentials,添加以下凭证:

    • Git凭证:若代码仓库需要认证,添加Username/Password或SSH密钥
    • Docker Hub凭证:若推送镜像到Docker Hub,添加Docker Hub账号
    • SSH凭证:若远程部署到Ubuntu服务器,添加服务器SSH私钥。

三、创建自动化部署任务(Pipeline方式)

  1. 新建Pipeline任务
    进入Jenkins主页 → New Item → 输入任务名称(如ubuntu-app-deploy)→ 选择Pipeline → 点击OK

  2. 配置Pipeline脚本
    有两种方式定义流水线:

    • Pipeline script from SCM(推荐,代码与配置分离):
      选择代码仓库类型(如Git),填写仓库URL(如https://github.com/your-repo/ubuntu-app.git),指定分支(如main),并在“Script Path”中填写Jenkinsfile(Jenkins会自动从仓库拉取该文件)。
    • Pipeline script(直接编写脚本,适合简单任务):
      在“Script”框中直接编写Pipeline脚本(见下文示例)。
  3. 示例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
                                            """
                                        )
                                    ]
                                )
                            ]
                        )
                    }
    
                }
    
            }
    
        }
    
    }
        
    
  4. 配置SSH服务器(Pipeline中用到)
    进入Manage JenkinsManage Credentials,添加SSH凭证(私钥),然后在Jenkins中配置SSH服务器:

    • 进入Manage JenkinsManage Nodes and CloudsNew Node,输入节点名称(如ubuntu-server),选择“Permanent Agent”,填写远程工作目录(如/home/ubuntu/jenkins),选择凭证(SSH私钥),点击Save

四、触发自动化部署

  1. 代码提交触发
    在Jenkins任务的Configure页面,勾选Poll SCM,设置触发频率(如H/5 * * * *表示每5分钟检查一次代码变更);或在Git仓库(如GitHub)配置Webhook,指向Jenkins的http://< 服务器IP> :8080/github-webhook/(需安装GitHub Integration插件)。

  2. 手动触发
    在Jenkins任务页面点击Build Now,手动触发构建(适合测试或调试)。

五、常见问题解决

  1. 权限不足
    若Jenkins无法操作Docker或SSH,需添加用户权限:
    sudo usermod -aG docker jenkins  # 允许jenkins用户使用Docker
    sudo systemctl restart jenkins
    
  2. 端口冲突
    部署前停止旧容器(已在Jenkinsfile中体现),避免端口占用。
  3. 构建缓存问题
    在Maven构建命令中添加-U参数,强制更新依赖:
    sh 'mvn clean package -DskipTests -U'
    

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 怎样自动化Ubuntu Jenkins部署任务
本文地址: https://pptw.com/jishu/742367.html
如何自定义Ubuntu Jenkins部署脚本 ubuntu spool兼容性问题怎么办

游客 回复需填写必要信息