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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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 应用服务中间件
SpringBoot获取项目文件的绝对路径和相对路径
SpringBoot获取项目文件的绝对路径和相对路径
61 1
SpringBoot获取项目文件的绝对路径和相对路径
|
11天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
23 2
|
16天前
|
分布式计算 关系型数据库 MySQL
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型
SpringBoot项目中mysql字段映射使用JSONObject和JSONArray类型 图像处理 光通信 分布式计算 算法语言 信息技术 计算机应用
36 8
|
23天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
42 2
|
23天前
|
前端开发 Java Spring
SpringBoot项目thymeleaf页面支持词条国际化切换
SpringBoot项目thymeleaf页面支持词条国际化切换
52 2
|
23天前
|
JSON Java 数据库
SpringBoot项目使用AOP及自定义注解保存操作日志
SpringBoot项目使用AOP及自定义注解保存操作日志
34 1
|
7天前
|
JavaScript 前端开发 Java
SpringBoot项目的html页面使用axios进行get post请求
SpringBoot项目的html页面使用axios进行get post请求
23 0
|
22天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
44 2
|
3月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
10天前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
下一篇
无影云桌面