温馨提示×

Java项目在Linux如何进行持续集成

小樊
38
2025-12-27 20:42:43
栏目: 编程语言

在 Linux 上搭建 Java 项目的持续集成

一 环境准备

  • 安装 JDK 11+(以 Ubuntu/Debian 为例):sudo apt update && sudo apt install openjdk-11-jdk;在 CentOS/RHEL:sudo yum install java-11-openjdk-devel。验证:java -version。建议同时安装 Maven:sudo apt install maven(或 yum 对应包)。如使用 Jenkins,需先安装 JDK 再安装 Jenkins。以上步骤完成后即可作为 CI 运行环境使用。

二 安装与初始化 Jenkins

  • 安装 Jenkins(Ubuntu/Debian 示例):
    • wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
    • sudo sh -c ‘echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list’
    • sudo apt update && sudo apt install jenkins
    • sudo systemctl start jenkins && sudo systemctl enable jenkins
  • 访问 http://服务器IP:8080,首次解锁输入初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 安装常用插件:GitPipelineMaven/GradlePublish Over SSH(用于远程部署)、通知类插件(邮件/Slack)。在 Manage Jenkins → Global Tool Configuration 配置 JDK/Git/Maven 路径或使用自动安装。

三 创建任务与流水线

  • 方式一(推荐)— Pipeline 项目:在项目根目录创建 Jenkinsfile,在 Jenkins 中选择 “Pipeline script from SCM”,指定 Git 仓库 URL、凭证与 Jenkinsfile 路径。
  • 方式二— Freestyle 项目:源码管理选择 Git 并配置凭证;构建步骤选择 “Invoke top-level Maven targets”(如 mvn clean package)或 “Execute shell”;构建触发器可配置 轮询 SCM(如 H/5 * * * *)或 Webhook 实现提交即构建。

四 示例 Jenkinsfile

  • 示例一(Maven + 测试报告 + SSH 远程部署)
    pipeline {
      agent any
      tools { maven 'Maven-3' } // 在 Global Tool Configuration 中定义的 Maven 名称
      stages {
        stage('Checkout') {
          steps { git branch: 'main', url: 'https://github.com/your-org/your-java-project.git' }
        }
        stage('Build') {
          steps { sh 'mvn clean package -DskipTests' }
        }
        stage('Test') {
          steps { sh 'mvn test' }
        }
        stage('Deploy') {
          steps {
            sshPublisher(
              publishers: [
                sshPublisherDesc(
                  configName: 'test-server',
                  transfers: [
                    sshTransfer(
                      sourceFiles: 'target/*.jar',
                      removePrefix: 'target',
                      remoteDirectory: '/opt/app',
                      execCommand: 'nohup java -jar /opt/app/app.jar > /opt/app/app.log 2>&1 &'
                    )
                  ]
                )
              ]
            )
          }
        }
      }
      post {
        always { junit 'target/surefire-reports/*.xml' } // 收集测试报告
        success { echo 'Build and deploy SUCCESS' }
        failure { echo 'Build FAILED' }
      }
    }
    
    说明:需在 Jenkins 中预先配置名为 test-serverSSH 服务器(IP、用户、私钥)。
  • 示例二(Freestyle 常用命令)
    • 构建步骤:mvn clean package
    • 测试步骤:mvn test
    • 部署步骤(SCP 示例):scp target/*.jar user@remote:/opt/app/
    • 构建后操作:归档构件(如 target/*.jar),收集测试报告(如 target/surefire-reports/*.xml)。

五 触发与优化

  • 触发策略
    • Webhook:在 GitHub/GitLab 仓库 Webhooks 中添加 Jenkins 地址(如 http://服务器IP:8080/github-webhook/ 或项目级 Webhook),选择 application/jsonpush 事件,实现提交即触发。
    • 轮询 SCM:在 Jenkins 任务中配置 “Poll SCM”,如 **H/5 * * * *** 表示每 5 分钟检查一次变更。
  • 质量与效率优化
    • 代码质量:集成 SonarQube 进行静态扫描与质量门禁。
    • 制品仓库:搭建 Nexus 管理 Maven 依赖与发布构件(默认端口 8081)。
    • 容器化:在流水线中构建 Docker 镜像 并推送到镜像仓库,再部署到测试/生产环境,降低环境差异风险。
    • 多环境部署:使用 参数化构建 区分 dev/test/prod 环境配置与部署目标。

0