使用Gitlab CI/CD功能在本地部署 Spring Boot 项目
前提条件:
1.Docker安装Gitlab,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13814730.html
2.Docker安装Gitlab-runner,地址:https://www.cnblogs.com/sanduzxcvbnm/p/13815594.html
在Gitlab上创建项目
1.新建项目

2.选择springboot模板创建

3.创建项目

创建好项目后查看克隆的地址
我这边是根据前提条件来创建的,所以使用的克隆地址中会有端口号

4.添加本机ssh秘钥到项目设置中


5.本机克隆该项目到本机
使用git地址克隆

使用http地址克隆

项目修改
1.修改项目中自带的Dockerfile文件,具体内容如下
# 原先的内容
FROM maven:3-jdk-8-alpine
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN mvn package
ENV PORT 5000
EXPOSE $PORT
CMD [ "sh", "-c", "mvn -Dserver.port=${PORT} spring-boot:run" ]
# 修改后的内容
FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY /target/demo-0.0.1-SNAPSHOT.jar app.jar # 正常情况下target前面没有/,但是在这里需要有,不能省略,否则会报错。
ENV PORT 5000
EXPOSE $PORT
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dserver.port=${PORT}","-jar","/app.jar"]
按正常情况下target前面没有/的报错信息

target前面加上/后可以正确执行

2.创建.gitlab-ci.yml文件,具体内容如下
image: docker:latest #1
variables: #2
DOCKER_DRIVER: overlay2
# DOCKER_HOST: tcp://192.168.0.253:2375 # docker host,本地可不写,
TAG: root/hello-spring:v0.1 # 生成的镜像名称
cache: #3
paths:
- .m2/repository
services: #4
- docker:dind
stages: #5
- package
- deploy
maven-package: #6
image: maven:3.5-jdk-8-alpine
tags:
- maven # 使用的gitlab-runner需要有这个标签
stage: package
script:
- mvn clean package -Dmaven.test.skip=true
artifacts:
paths:
- target/*.jar
build-master: #7
tags:
- docker # 使用的gitlab-runner需要有这个标签
stage: deploy
script:
- docker build -t $TAG . # 根据Dockerfile文件构建镜像
- docker rm -f test || true # 删除测试容器
- docker run -d --name test -p 5000:5000 $TAG # 运行容器,$TAG是开头设置的变量,表示的是镜像
only:
- master
说明:
- 1:需要用到的镜像
- 2:必须配置的一些环境变量。如果本地可不配置 DOCKER_HOST。作用是生成的docker镜像是在本机上还是在其他主机上
- 3:配置缓存,配置后,maven 下载的依赖可以被缓存起来,下次不需要重复去下载了。
- 4:配置需要用到的额外的服务。docker:dind,这个貌似是用于在 docker 中运行 docker 的一种东西,在项目的构建中需要。
- 5:stages,这是 Gitlab CI 中的概念,Stages 表示构建阶段,就是一些按序执行的流程,具体执行是依赖于 Jobs 的。在CI/CD流水线中可以看到
- 6:定义的 Jobs 之一,用于构建 jar 包。内部又引入 maven 镜像来处理,负责执行 package 这一流程。script 为具体执行的脚本。
- 7:定义的 Jobs 之一,用于构建 Docker 镜像。负责执行 deploy 这一流程。具体执行 build 和 run。only 节点表示只监控 master 分支。


所有的配置工作都已经完成了,接下来 Git 执行 commit&push,自动构建就开始了。
整个项目的目录结构如下:

开始构建
在本机上修改上述俩文件后提交到Gitlab上,此时自动构建就开始了。
我这边已经操作过了,直接看结果



第一阶段的第一个jobs,可以查看到编译生成好的jar文件

其中生成的这个jar文件可以下载下来,下载下来一个artifacts.zip文件,解压缩后有个target文件夹,这个文件夹下也就是编译生成的项目jar文件


这个功能在.gitlab-ci.yml配置文件中的体现

第二阶段的第一个jobs

这个功能在.gitlab-ci.yml配置文件中的体现

再次提交内容,又会开始自动构建,生成的docker镜像会发生变化,运行的容器也发生变化.
根据这个情况,可以在提交代码的时候修改编译生成的docker镜像版本
# 第一次构建
~ # docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
root/hello-spring v0.1 35937b860369 8 minutes ago 121MB
~ # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b8ab41b5bbc7 root/hello-spring:v0.1 "java -Djava.securit…" 6 minutes ago Up 6 minutes 0.0.0.0:5000->5000/tcp
# 第二次构建
~ # docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
root/hello-spring v0.1 661f48a8d64c About a minute ago 121MB
~ # docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab619c680e77 root/hello-spring:v0.1 "java -Djava.securit…" About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp
继续延伸:
1.每次提交代码之前都得手动修改docker镜像版本,有没有其他更简便的办法
2.最后阶段的最后jobs可以把生成的docker镜像推动到镜像仓库,比如Harbor,Nexus等
3.跟k8s进行配置关联
4.多阶段,多jobs构建
使用Gitlab CI/CD功能在本地部署 Spring Boot 项目的更多相关文章
- Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目
在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...
- Docker Gitlab CI 部署 Spring Boot 项目
目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...
- 使用Jenkins部署Spring Boot项目
jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...
- 使用 Docker 部署 Spring Boot 项目,带劲!!
上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...
- Linux云服务部署Spring boot项目
Linux云服务部署Spring boot项目 背景: 之前经过两个周的时间,做了一个简单的博客网站,网址:点击进入,在本地可以正常使用以后,想着部署到服务器上,给大家伙看个乐呵,于是有了这篇部署文章 ...
- 从零部署Spring boot项目到云服务器(正式部署)
上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...
- 使用Docker部署Spring boot项目
Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...
- Windows Docker 部署 Spring Boot 项目
目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...
- Spring框架学习笔记(6)——阿里云服务器部署Spring Boot项目(jar包)
最近接外包,需要部署服务器,便是参考了网上的几篇博文,成功在阿里云服务器成功部署了Spring Boot项目,特记下本篇笔记 Spring Boot项目打包 这里说一下部署的一些问题 1.mysql驱 ...
随机推荐
- SQLZOO练习5--join(表的连接)
game表: id mdate stadium team1 team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 June 20 ...
- SpringBoot接口 - 如何生成接口文档之非侵入方式(通过注释生成)Smart-Doc?
通过Swagger系列可以快速生成API文档,但是这种API文档生成是需要在接口上添加注解等,这表明这是一种侵入式方式: 那么有没有非侵入式方式呢, 比如通过注释生成文档? 本文主要介绍非侵入式的方式 ...
- Solution -「ABC 217」题解
D - Cutting Woods 记录每一个切割点,每次求前驱后驱就好了,注意简单判断一下开闭区间. 考场上采用的 FHQ_Treap 无脑莽. #include <cstdio> #i ...
- OpenWrt之feeds.conf.default详解
目录 OpenWrt之feeds.conf.default详解 文件内容 命令解释 src-svn与src-gitsvn src-git与src-git-full src-cpy与src-link 其 ...
- reduce累加实现
与map端的模式类似,map端要重写Mapper方法,reduce端也要重写Reduce方法,这里有一个泛型,我们先看参数类型 分别对应输入keyin,valuein,keyout,valueout. ...
- 源码解析springbatch的job是如何运行的?
202208-源码解析springbatch的job是如何运行的? 注,本文中的demo代码节选于图书<Spring Batch批处理框架>的配套源代码,并做并适配springboot升级 ...
- Apache DolphinScheduler 2.0.1 来了,备受期待的一键升级、插件化终于实现
✎ 编 者 按:好消息!Apache DolphinScheduler 2.0.1 版本正式发布! 本版本中,DolphinScheduler 经历了一场微内核+插件化的架构改进,70% 的代码被重构 ...
- POJ3903Stock Exchange (LIS)
学了下BIT,炸了... #include <iostream> #include <cstdio> #include <cstring> #include < ...
- Go语言 context包源码学习
你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数 ...
- Mybatis框架--优化过程
0. 原代码预览 简单实现在数据库中插入数据 public void testInsert() throws IOException { //获取核心配置文件的输入流 InputStream is = ...