Jenkins流水线部署springboot项目

文章目录

Jenkins流水线任务介绍

之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。

Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。

所以Pipeline相对自由风格或者其他的项目风格更容易操作。

Jenkins流水线任务

构建Jenkins流水线任务

  • 构建Jenkins流水线任务
  • 生成Groovy脚本
  • 构建后查看视图

Groovy脚本

  • Groovy脚本基础语法

    // 所有脚本命令包含在pipeline{}中
    pipeline {
    // 指定任务在哪个节点执行(Jenkins支持分布式)
    agent any

      // 配置全局环境,指定变量名=变量值信息
      environment{
      	host = '192.168.11.11'
      }
    
      // 存放所有任务的合集
      stages {
      	// 单个任务
          stage('任务1') {
          	// 实现任务的具体流程
              steps {
                  echo 'do something'
              }
          }
      	// 单个任务
          stage('任务2') {
          	// 实现任务的具体流程
              steps {
                  echo 'do something'
              }
          }
          // ......
      }
    

    }

  • 编写例子测试

    pipeline {
    agent any

      // 存放所有任务的合集
      stages {
          stage('拉取Git代码') {
              steps {
                  echo '拉取Git代码'
              }
          }
    
          stage('检测代码质量') {
              steps {
                  echo '检测代码质量'
              }
          }
    
          stage('构建代码') {
              steps {
                  echo '构建代码'
              }
          }
    
          stage('制作自定义镜像并发布Harbor') {
              steps {
                  echo '制作自定义镜像并发布Harbor'
              }
          }
    
          stage('基于Harbor部署工程') {
              steps {
                  echo '基于Harbor部署工程'
              }
          }
      }
    

    }

  • 查看效果

Ps:涉及到特定脚本,Jenkins给予了充足的提示,可以自动生成命令

Jenkinsfile实现

Jenkinsfile方式需要将脚本内容编写到项目中的Jenkinsfile文件中,每次构建会自动拉取项目并且获取项目中Jenkinsfile文件对项目进行构建

  • 配置pipeline
  • 准备Jenkinsfile
  • 测试效果

Jenkins流水线任务实现

参数化构建

添加参数化构建,方便选择不的项目版本

拉取Git代码

通过流水线语法生成Checkout代码的脚本

将*/master更改为标签${tag}

pipeline {
    agent any
    stages {

        stage('拉取Git代码') {
            steps {
                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
            }
        }
    }
}

构建代码

pipeline {
    agent any
    stages {

        stage('拉取Git代码') {
            steps {
                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
            }
        }

        stage('构建代码') {
            steps {
                sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }
    }
}

制作自定义镜像并发布

pipeline {
    agent any
    environment{
            harborHost = '192.168.56.112:80'
            harborRepo = 'repository'
            harborUser = 'admin'
            harborPasswd = 'Harbor12345'
    }
    stages {

        stage('拉取Git代码') {
            steps {
                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
            }
        }

        stage('构建代码') {
            steps {
                sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests'
            }
        }

        stage('制作自定义镜像并发布Harbor') {
                    steps {
                        sh '''cd arthas-study/docker
                              mv ../target/arthas-study.jar ./arthas-study.jar
                        docker build -t ${JOB_NAME}:${tag} ./'''

                        sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
                        docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
                        docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}'''
                    }
        }
    }
}


  • 生成Publish Over SSH脚本

    pipeline {
    agent any
    environment{
    harborHost = '192.168.56.112:80'
    harborRepo = 'repository'
    harborUser = 'admin'
    harborPasswd = 'Harbor12345'
    port = 8080
    host_port = 8888
    }
    stages {

          stage('拉取Git代码') {
              steps {
                  checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/qfxcoffee/shield.git']])
              }
          }
    
          stage('构建代码') {
              steps {
                  sh 'cd arthas-study && /var/jenkins_home/maven/bin/mvn clean package -DskipTests'
              }
          }
    
          stage('制作自定义镜像并发布Harbor') {
              steps {
                  sh '''cd arthas-study/docker
                        mv ../target/arthas-study.jar ./arthas-study.jar
                  docker build -t ${JOB_NAME}:${tag} ./'''
    
                  sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborHost}
                  docker tag ${JOB_NAME}:${tag} ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}
                  docker push ${harborHost}/${harborRepo}/${JOB_NAME}:${tag}'''
              }
          }
    
          stage('目标服务器拉取镜像并运行') {
              steps {
                  sshPublisher(publishers: [sshPublisherDesc(configName: 'testEnv', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/usr/bin/deploy.sh $harborHost $harborRepo $JOB_NAME $tag $port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
              }
          }
      }
    

    }



相关推荐
_GR8 分钟前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
无限大.21 分钟前
c语言200例 067
java·c语言·开发语言
余炜yw22 分钟前
【Java序列化器】Java 中常用序列化器的探索与实践
java·开发语言
攸攸太上23 分钟前
JMeter学习
java·后端·学习·jmeter·微服务
Kenny.志26 分钟前
2、Spring Boot 3.x 集成 Feign
java·spring boot·后端
不修×蝙蝠28 分钟前
八大排序--01冒泡排序
java
sky丶Mamba43 分钟前
Spring Boot中获取application.yml中属性的几种方式
java·spring boot·后端
数据龙傲天1 小时前
1688商品API接口:电商数据自动化的新引擎
java·大数据·sql·mysql
带带老表学爬虫2 小时前
java数据类型转换和注释
java·开发语言
千里码aicood2 小时前
【2025】springboot教学评价管理系统(源码+文档+调试+答疑)
java·spring boot·后端·教学管理系统