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)])
              }
          }
      }

    }



相关推荐
通往曙光的路上5 分钟前
发邮件1、创建邮箱
java
麦麦鸡腿堡1 小时前
Java_类的加载
java·开发语言
JIngJaneIL1 小时前
基于java + vue校园快递物流管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js
超级大只老咪1 小时前
数组的正向存储VS反向存储(Java)
java·开发语言·python
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 基于JSP的物流信息网的设计与实现为例,包含答辩的问题和答案
java·开发语言
Honmaple1 小时前
Spring AI 2.x 发布:全面拥抱 Java 21,Redis 史诗级增强
java·人工智能·spring
代码or搬砖2 小时前
Java集合-Set讲解
java·开发语言
渣娃-小晴晴2 小时前
java集合在并发环境下应用时的注意事项
java·后端
北极糊的狐2 小时前
若依系统报错net::ERR_CONNECTION_TIMED_OUT的原因
java·windows·sql·mybatis