Jenkins Pipeline 流水线方式部署 SpringBoot 项目2

简介: Jenkins Pipeline 流水线方式部署 SpringBoot 项目

Jenkins Pipeline 流水线方式部署 SpringBoot 项目1:https://developer.aliyun.com/article/1394466

四、Git Pull Code

我们做第一步,就是编写一个Jenkins 脚本,拉取 Github 上的代码。

 pipeline {
     agent any
     stages {
        stage('git pull 拉取代码') {
             steps {
               // Get some code from a GitHub repository
               git branch: 'main', credentialsId: 'b6013989-c0b0-4511111111f7', url: 'https://github.com/ningzaichun/hello-springboot'
            }
         }
         stage('编译构建') {
             steps {
              echo '编译构建'
             }
         }
          stage('项目部署') {
               steps {
                 echo '项目部署'
             }
         }
     }
 }

这样的执行结果应当如下:

image.png

相关日志说明:

image.png

但其实这一栏还有许多可以配置的东西,但是目前没用上,就暂且不说,等到后来用上,再去查文档和检索。

五、Maven 编译

我们在上一个步骤中增加一个步骤,即增加一个 stage(){}

最简单的编译构建方式莫过于maven clean package 哈哈

 pipeline {
     agent any
     stages {
        stage('git pull 拉取代码') {
             steps {
               // Get some code from a GitHub repository
               git branch: 'main', credentialsId: 'b6013989-c0b0-11-b11133bf7', url: 'https://github.com/ningzaichun/hello-springboot'
            }
         }
        stage('编译构建') {
             steps {
                 sh label: '', script: 'mvn clean package'
             }
         }
          stage('项目部署') {
               steps {
                 echo '项目部署'
             }
         }
     }
 }

执行结果应当如下:

image.png

在日志中也是可以看到我们已经构建成功啦

image.png

六、打包镜像,发布至镜像仓库

编译成功后,就是打包成镜像

在helloSpringBoot的项目中,我有编写了一个十分简单的Dockerfile文件的,如下:

 FROM java:8
 ​
 WORKDIR app
 ​
 COPY target/*.jar app.jar
 ​
 CMD ["java", "-jar", "app.jar"]

我们可以利用这个Dockerfile 来进行Docker打包

docker 一些基础命令,我就不再提起了,

如果有不太了解Dockerfile编写的小伙伴,可以看看这篇文章☞:Dockerfile

如果是对docker 一些命令不是非常熟悉的小伙伴,可以看这篇☞:Docker 基本命令

 pipeline {
     agent any
     stages {
        stage('git pull 拉取代码') {
             steps {
               // Get some code from a GitHub repository
               git branch: 'main', credentialsId: 'b6013111113bf7', url: 'https://github.com/ningzaichun/hello-springboot'
            }
         }
        stage('编译构建') {
             steps {
                 sh label: '', script: 'mvn clean package'
             }
         }
          stage('清除旧镜像及容器') {
               steps {
                  //定义镜像名称
                 // 构建之前,需要先删除原有的镜像
                 sh "docker rm -f hellonzc"
                 sh "docker rmi -f hellospringboot:v0.0.1"
                 sh "docker rmi -f registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
             }
         }
           stage('构建与发布镜像') {
               steps {
    //编译,构建本地镜像
                 sh "mvn clean package"
                 sh "docker build -t hellospringboot:v0.0.1 . "
                 // 登录阿里云镜像
                 sh "docker login --username=nzc1115 --password=1111111 registry-vpc.cn-heyuan.aliyuncs.com"
                 sh " docker tag hellospringboot:v0.0.1 registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
                 //发布镜像
                 sh " docker push registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
             }
         }
     }
 }

执行结果:

image.png

相关日志:

image.png

七、拉取镜像,运行容器

就是再多个步骤罢了~

pipeline {
    agent any
    stages {
       stage('git pull 拉取代码') {
            steps {
              // Get some code from a GitHub repository
              git branch: 'main', credentialsId: 'b60111111133bf7', url: 'https://github.com/ningzaichun/hello-springboot'
           }
        }
       stage('编译构建') {
            steps {
                sh label: '', script: 'mvn clean package'
            }
        }
         stage('清除旧镜像及容器') {
              steps {
                 //定义镜像名称
              // 构建之前,需要先删除原有的镜像
        sh "docker rm -f hellonzc"
        sh "docker rmi -f hellospringboot:v0.0.1"
            }
        }
          stage('构建与发布镜像') {
              steps {
   //编译,构建本地镜像
                sh "mvn clean package"
                sh "docker build -t hellospringboot:v0.0.1 . "
                // 登录阿里云镜像
                sh "docker login --username=nzc15 --password=11113 registry-vpc.cn-heyuan.aliyuncs.com"
                sh " docker tag hellospringboot:v0.0.1 registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
                //发布镜像
                sh " docker push registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
            }
        }
         stage('运行容器') {
              steps {
      sh "docker rmi -f registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
         sh " docker pull registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
         sh "docker run -d -p 8080:8080 --name hellonzc registry-vpc.cn-heyuan.aliyuncs.com/ningzaichun/jenkins:v0.0.1"
            }
        }
    }
}

补充

关于脚本中构建好本地镜像,在拉取前又删除本地镜像,再拉取的矛盾问题,

  • 其实我就是将命令效果全部展示出来,
  • 另一方面就是如果是要部署到其他服务器上的话,
  • 这条命令再加上另一台服务器的信息,就是可以用上的啦。

执行结果:

image.png

相关日志:

image.png

小结

其实如果是看过我那篇Maven部署的朋友,应该能够感受到,在这篇文章中,好像pipeline好像和那篇文章差不多,可能这篇还更显繁琐。

我要说明,这篇文章顶多是pipeline流水线任务的入门篇,看一眼大概,知道有pipeline任务,它的优势更多的体现在多任务构建,微服务构建,还有源码存储jenkins Pipeline 脚本文件等等

以单体项目来执行,可能没法完全体现它的优势,并且我也没有弄它的最佳实践,所以可能看完会略显失望

慢慢来啦~,这个东东详细说起来,也没有大家想象的那么简短

后记

首先还是要对之前到这个系列文章的小伙伴,说一句抱歉,非常不好意思。

因为我个人的疏忽错误,导致对照着前面文章安装环境的小伙伴,来看这篇文章进行实操时,仍然需要重新搭建一遍实操环境

对此感到十分抱歉,希望各位读者能够见谅,前文我也已经修正错误,同时也希望大家继续支持这个专栏,给予我一些正向反馈

做的不好的地方也请各位读者、朋友、小伙伴能够及时指出,非常感谢各位!

如存有疑问,也请大家友善留言,我会在看到的第一时间尽快回复你。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
21天前
|
Java Linux
Springboot 解决linux服务器下获取不到项目Resources下资源
Springboot 解决linux服务器下获取不到项目Resources下资源
|
28天前
|
Java API Spring
SpringBoot项目调用HTTP接口5种方式你了解多少?
SpringBoot项目调用HTTP接口5种方式你了解多少?
84 2
|
28天前
|
前端开发 JavaScript Java
6个SpringBoot 项目拿来就可以学习项目经验接私活
6个SpringBoot 项目拿来就可以学习项目经验接私活
35 0
|
2天前
|
jenkins Java 持续交付
Jenkins离线安装部署教程简记
Jenkins离线安装部署教程简记
11 0
|
5天前
|
Java Docker 容器
SpringBoot项目集成XXL-job
SpringBoot项目集成XXL-job
|
18天前
|
JSON 前端开发 Java
统一异常处理:让Spring Boot项目异常更优雅
统一异常处理:让Spring Boot项目异常更优雅
26 1
|
22天前
|
JSON 前端开发 Java
Springboot前后端分离项目统一封装返回结果
Springboot前后端分离项目统一封装返回结果
|
4月前
|
jenkins Java 持续交付
【项目集成工具】Jenkins
【项目集成工具】Jenkins
|
1月前
|
jenkins Java 持续交付
Docker Swarm总结+Jenkins安装配置与集成(5/5)
Docker Swarm总结+Jenkins安装配置与集成(5/5)
56 0