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

    }



相关推荐
supingemail17 分钟前
面试之 Java 新特性 一览表
java·面试·职场和发展
星星点点洲23 分钟前
【Java】应对高并发的思路
java
LDM>W<26 分钟前
黑马点评-用户登录
java·redis
保利九里32 分钟前
数据类型转换
java·开发语言
Uranus^35 分钟前
使用Spring Boot与Spring Security构建安全的RESTful API
java·spring boot·spring security·jwt·restful api
Aiden Targaryen36 分钟前
Windows/MacOS WebStorm/IDEA 中开发 Uni-App 配置
java·uni-app·webstorm
啾啾Fun1 小时前
【Java微服务组件】分布式协调P1-数据共享中心简单设计与实现
java·分布式·微服务
神经毒素1 小时前
WEB安全--Java安全--shiro550反序列化漏洞
java·安全·web安全·shiro
hnlucky1 小时前
Windows 上安装下载并配置 Apache Maven
java·hadoop·windows·学习·maven·apache
forestsea3 小时前
Maven 插件扩展点与自定义生命周期
java·maven