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 脚本文件等等

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

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

后记

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

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

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

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

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


相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
存储 jenkins 持续交付
181 2
|
19天前
|
jenkins Java 持续交付
使用 Jenkins 和 Spring Cloud 自动化微服务部署
随着单体应用逐渐被微服务架构取代,企业对快速发布、可扩展性和高可用性的需求日益增长。Jenkins 作为领先的持续集成与部署工具,结合 Spring Cloud 提供的云原生解决方案,能够有效简化微服务的开发、测试与部署流程。本文介绍了如何通过 Jenkins 实现微服务的自动化构建与部署,并结合 Spring Cloud 的配置管理、服务发现等功能,打造高效、稳定的微服务交付流程。
使用 Jenkins 和 Spring Cloud 自动化微服务部署
|
1月前
|
Java jenkins 应用服务中间件
结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
200 0
|
2月前
|
Prometheus 监控 Cloud Native
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务
Docker 部署 Prometheus 和 Grafana 监控 Spring Boot 服务实现步骤
|
2月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
314 13
|
5月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
391 70
|
5月前
|
jenkins Java Linux
Jenkins环境的部署及任务构建
以上就是Jenkins环境的部署及任务构建的全部内容。希望可以帮助你轻松上手Jenkins,让你的CI/CD之旅更加顺畅!
405 68
|
Devops API
阿里云效流水线API简单使用
阿里云效流水线API简单使用
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之流水线构建出现问题,连接不到nuget,该如何处理
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
Java 应用服务中间件 测试技术
阿里云云效产品使用合集之云效流水线如何使用alb ingress的脚本
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

推荐镜像

更多