Zzzxb's Blog

你要静心学习那份等待时机的成熟的情绪,也要你一定保有这份等待之外的努力和坚持。

Jenkins Feb 27, 2026

Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

安装

构建

1. 新建项目

image-20250904142442682

2. 使用官方推荐的Pipeline

image-20250904142550206

###

image-20250904142820516

4. 流水线语法编写

官方流水线语法生成器

image-20250904143021760

pipeline {
  agent any
  
  //这里是环境变量 - 变量尽量配置到这里
  environment {
    GIT_BRANCH = 'pro'
    GIT_URL = 'http://114.113.159.196:8090/rms/allinone.git'
    GIT_UNAME = 'gitlab[umcc]'
    JAVA_HOME = '/opt/app/jdk/1.8'
    MVN_HOME = '/home/jenkins/apache-maven-3.8.9'
    MVN_SETTINGS = '/home/jenkins/apache-maven-3.8.9/conf/ali-settings.xml'
    REMOTE_DIR = '/opt/app/rms/allinone-task'
    REMOTE_ADDRESS_CONFIG = '172-20-197-163'
  }
  
  // 这里是真正的的阶段步骤,按顺序执行
  stages {
    // 从git拉取代码
    stage('Pull') {
      steps {
        echo "拉取最新代码"
        git branch: "${env.GIT_BRANCH}", credentialsId: "${env.GIT_UNAME}", url: "${env.GIT_URL}"
      }
    }
    
    // 这里是构建步骤,子项目多的尽量不要使用项目中的pom进行构建,否则会特别慢
    stage('Build') {
      // 这个步骤里边直接执行bash命令就行,变量只对要用双引号生效,单引号不生效
      steps {
        sh "export JAVA_HOME=${env.JAVA_HOME}"
        echo "引入 JAVA_HOME"
        sh "export MVN_HOME=${env.MVN_HOME}"
        echo "引入 MVN_HOME"
        echo "准备进行打包"
        sh "mvn clean -DskipTests=true install -f pom.xml -s ${env.MVN_SETTINGS}"
        echo "打包完毕"
      }
    }

    // 这里是部署
    stage('Deploy') {
      steps {
        echo "准备推送远程服务器"
        script {
          sshPublisher(
            publishers: [
              sshPublisherDesc (
                // 配置 ssh 服务器地址名
                configName: "${env.REMOTE_ADDRESS_CONFIG}",
                usePromotionTimestamp: false,
                useWorkspaceInPromotion: false,
                // 是否展示执行脚本日志
                verbose: true,
                transfers: [
                  sshTransfer(
                    cleanRemote: false,
                    excludes: '',
                    // 展示日志就是展示这里执行命令时候的日志
                    execCommand: "cd ${env.REMOTE_DIR} && sh ${env.REMOTE_DIR}/no-off.sh stop && sh ${env.REMOTE_DIR}/no-off.sh start",
                    execTimeout: 120000,
                    flatten: false,
                    makeEmptyDirs: false,
                    noDefaultExcludes: false,
                    patternSeparator: '[, ]+',
                    // 需要部署服务器目录,要全路径
                    remoteDirectory: "${env.REMOTE_DIR}",
                    remoteDirectorySDF: false,
                    // 打完包后的包目录地址
                    sourceFiles: 'target/*SNAPSHOT.jar',
                    // 移除前缀, 在推送到远程目录时只保留上边的*SNAPSHOT.jar这个名字
                    removePrefix: 'target'
                  )
                ])])}
      echo "执行完毕"
      }
    }
  }
}

系统配置

1. 进入系统配置

image-20250904144840541

2. 进行 ssh 配置

image-20250904145244352

image-20250904145422091

凭证配置

1. 进入凭证配置

image-20250904145709424

2. 进行全局凭证

image-20250904145816947

3. 添加凭证

image-20250904150001731

image-20250904150140341

image-20250904150432953

⚠️注意!部署以后尽量使用 no-off.sh 启动文件、或者自己编写全路径脚本,否则各种路径会不对。

  • 启动: no-off.sh start
  • 停用: no-off.sh stop

这里没有重启命令, 防止勿操作脚本把服务给重启了