温馨提示×

如何用Jenkins在Linux上构建项目

小樊
44
2025-12-27 22:56:57
栏目: 智能运维

在 Linux 上使用 Jenkins 构建项目的实操指南

一 环境准备与安装

  • 安装 Java:Jenkins 需要 Java 11+,以 OpenJDK 11 为例。
    • Ubuntu/Debian
      sudo apt update
      sudo apt install -y openjdk-11-jdk
      java -version
      
    • CentOS/RHEL
      sudo yum install -y java-11-openjdk-devel
      java -version
      
  • 安装 Jenkins(官方仓库方式)
    • Ubuntu/Debian
      curl -fsSL https://pkg.jenkins.io/debian/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 binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
      sudo apt update
      sudo apt install -y jenkins
      
    • CentOS/RHEL
      sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
      sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
      sudo yum install -y jenkins
      
  • 启动与开机自启
    sudo systemctl start jenkins
    sudo systemctl enable jenkins
    sudo systemctl status jenkins
    
  • 防火墙放行端口(默认 8080
    • Ubuntu(ufw)
      sudo ufw allow 8080/tcp
      sudo ufw enable
      
    • CentOS(firewalld)
      sudo firewall-cmd --permanent --add-port=8080/tcp
      sudo firewall-cmd --reload
      
  • 初始化解锁
    • 访问 http://<服务器IP>:8080
    • 获取初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
    • 进入向导,选择 Install suggested plugins,创建管理员账户。

二 基础配置

  • 全局工具配置(Manage Jenkins → Global Tool Configuration)
    • JDK:取消自动安装,指定路径(如 /usr/lib/jvm/java-11-openjdk-amd64
    • Maven:指定路径(如 /usr/share/maven/opt/maven
    • Git:指定路径(如 /usr/bin/git
  • 系统配置(Manage Jenkins → Configure System)
    • Jenkins URL:设置为 http://<服务器IP>:8080
  • 常用插件
    • Git plugin
    • Maven Integration plugin
    • Pipeline plugin
    • Email Extension plugin(可选,用于邮件通知)

三 创建任务与构建 Java Maven 项目

  • 新建任务:New Item → 输入名称 → 选择 Freestyle project → OK
  • 源码管理:选择 Git,填写仓库 URL(如 https://github.com/your/repo.git),添加 Credentials(用户名/密码或 SSH Key
  • 构建触发器(可选)
    • 定时拉取:Poll SCM,如 **H/5 * * * ***(每 5 分钟检查一次变更)
    • Webhook(GitLab 示例):勾选 GitLab webhook,在 GitLab 项目设置中添加 Webhook URL:http://<Jenkins服务器IP>:8080/project/<任务名>
  • 构建步骤
    • Maven 项目:Add build step → Invoke top-level Maven targets → Goals 填写 clean package
    • 或执行脚本:Add build step → Execute shell → 示例
      cd $WORKSPACE
      mvn -B clean package
      
  • 构建后操作(可选)
    • Archive the artifacts:如 target/*.jar
    • Email Extension:配置 SMTP,设置触发条件(如 AlwaysFailure
  • 保存并构建:点击 SaveBuild Now,在 Console Output 查看日志与结果。

四 使用 Pipeline 定义多阶段流程

  • 新建任务:New Item → 选择 Pipeline
  • 方式一:Pipeline script from SCM
    • 选择 Git,指定仓库与分支,设置 Jenkinsfile 路径(如根目录)
  • 方式二:直接在 UI 中编写脚本
  • 示例 Jenkinsfile(声明式)
    pipeline {
      agent any
      tools {
        maven 'Maven 3.6.3'   // 需在全局工具中预先配置
        jdk   'JDK 11'
      }
      environment {
        MAVEN_OPTS = "-Dmaven.repo.local=${env.WORKSPACE}/.m2"
      }
      stages {
        stage('Checkout') {
          steps { git branch: 'main', url: 'https://github.com/your/repo.git' }
        }
        stage('Build') {
          steps { sh 'mvn -B clean package' }
        }
        stage('Test') {
          steps { sh 'mvn test' }
        }
        stage('Archive') {
          steps { archiveArtifacts 'target/*.jar' }
        }
        stage('Deploy') {
          when { branch 'develop' }
          steps {
            sshagent(['staging-key']) {
              sh 'scp target/*.jar user@staging:/opt/app'
            }
          }
        }
      }
      post {
        always   { cleanWs() }
        success  { emailext body: 'Build succeeded: ${BUILD_URL}', subject: 'Jenkins Build Success', to: 'team@example.com' }
        failure  { emailext body: 'Build failed: ${BUILD_URL}', subject: 'Jenkins Build Failed', to: 'team@example.com' }
      }
    }
    
  • 说明
    • 使用 tools 引用全局配置的 JDK/Maven
    • 通过 archiveArtifacts 归档产物,便于部署或下载
    • post 块用于构建后通知与清理

五 常见问题与优化

  • 端口冲突或需变更端口
    • 修改配置文件中的 JENKINS_PORT(如 /etc/default/jenkins/etc/sysconfig/jenkins),将 8080 改为 8888 等,重启服务生效
  • JVM 内存调优
    • JAVA_OPTS 中设置堆大小(如 -Xms1024m -Xmx2048m),避免频繁内存溢出
  • 日志与排错
    • 实时查看日志:sudo journalctl -u jenkins -f
    • 构建问题优先查看 Console Output
  • 安全与权限
    • Configure Global Security 中配置 RBAC 权限模型,限制敏感操作
  • 备份与高可用(可选)
    • 定期备份 JENKINS_HOME(默认 /var/lib/jenkins
    • 规模扩大时可配置 主从节点 实现负载与容灾

0