前提条件:

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 项目的更多相关文章

  1. Gitlab CI 集成 Kubernetes 集群部署 Spring Boot 项目

    在上一篇博客中,我们成功将 Gitlab CI 部署到了 Docker 中去,成功创建了 Gitlab CI Pipline 来执行 CI/CD 任务.那么这篇文章我们更进一步,将它集成到 K8s 集 ...

  2. Docker Gitlab CI 部署 Spring Boot 项目

    目前在学习这一块的内容,但是可能每个人环境都不同,导致找不到一篇博客能够完全操作下来没有错误的,所以自己也写一下,记录一下整个搭建的过程. Docker 的安装这里就不赘述了,基本上几行命令都可以了, ...

  3. 使用Jenkins部署Spring Boot项目

    jenkins是devops神器,本篇文章介绍如何安装和使用jenkins部署Spring Boot项目 jenkins搭建 部署分为三个步骤: 第一步,jenkins安装 第二步,插件安装和配置 第 ...

  4. 使用 Docker 部署 Spring Boot 项目,带劲!!

    上一篇:年轻人的第一个 Docker 应用 Docker 一次构建.处处运行及快速启停的特性,在微服务架构中有着举足轻重的地位,具体的概念性的东西就不介绍了,不懂的点击这里阅读 Docker 基础教程 ...

  5. Linux云服务部署Spring boot项目

    Linux云服务部署Spring boot项目 背景: 之前经过两个周的时间,做了一个简单的博客网站,网址:点击进入,在本地可以正常使用以后,想着部署到服务器上,给大家伙看个乐呵,于是有了这篇部署文章 ...

  6. 从零部署Spring boot项目到云服务器(正式部署)

    上一篇文章总结了在Linux云服务器上部署Spring Boot项目的准备过程,包括环境的安装配置,项目的打包上传等. 链接在这里:http://www.cnblogs.com/Lovebugs/p/ ...

  7. 使用Docker部署Spring boot项目

    Docker是一个使用广泛的Linux容器管理工具包,它允许用户创建镜像,并将其容器实例化.通过本指南,我们可以学习到如何使用Docker部署Spring Boot项目. 先决条件 开发之前,你必须具 ...

  8. Windows Docker 部署 Spring Boot 项目

    目录 Docker Configuration Config IDEA Plugin Create Spring Boot Project Containerize It Use Dockerfile ...

  9. Spring框架学习笔记(6)——阿里云服务器部署Spring Boot项目(jar包)

    最近接外包,需要部署服务器,便是参考了网上的几篇博文,成功在阿里云服务器成功部署了Spring Boot项目,特记下本篇笔记 Spring Boot项目打包 这里说一下部署的一些问题 1.mysql驱 ...

随机推荐

  1. .Net下极限生产力之efcore分表分库全自动化迁移CodeFirst

    .Net下极限生产力之分表分库全自动化Migrations Code-First ## 介绍 本文ShardinfCore版本x.6.x.x+ 本期主角: - [`ShardingCore`](htt ...

  2. go-zero微服务实战系列(十、分布式事务如何实现)

    在分布式应用场景中,分布式事务问题是不可回避的,在目前流行的微服务场景下更是如此.比如在我们的商城系统中,下单操作涉及创建订单和库存扣减操作两个操作,而订单服务和商品服务是两个独立的微服务,因为每个微 ...

  3. 智能指针思想实践(std::unique_ptr, std::shared_ptr)

    1 smart pointer 思想 ​ 个人认为smart pointer实际上就是一个对原始指针类型的一个封装类,并对外提供了-> 和 * 两种操作,使得其能够表现出原始指针的操作行为. ​ ...

  4. 图扑 Web 可视化引擎在仿真分析领域的应用

    ​ 前言 在数字孪生和仿真研究过程中,会产生大量和三维空间相关的数值信息,比如设备外观的扫描数据.地形扫描数据.生产设备温度场/压力场.流体的速度场.流体扩散,以及各种仿真数据:速度,压力,应力,温度 ...

  5. DHCP原理及配置

    DHCP工作原理 集中的管理.分配IP地址,使client动态的获得IP地址.Gateway地址.DNS服务器地址等信息,并能够提升地址的使用率. 简单来说,DHCP就是一个不需要账号密码登录的.自动 ...

  6. InputStreamReader介绍&代码实现和转换文件编码_练习

    InputStreamReader介绍&代码实现 package com.yang.Test.ReverseStream; import java.io.FileInputStream; im ...

  7. 理解vue中v-for循环中得key原理及一些错误

    作用:给节点做一个标识,相当于人类的身份证号,虚拟DOM中的标识 下列是key值的一些使用场景和带来的问题:   js:    const vm = new Vue({             el: ...

  8. List的同步类比较

    TL;NRs CopyOnWriteArrayList类在多线程顺序读取上有很大的优势,但在随机读取上反而有较大的劣势,且在写入方面性能极差. Vector类在顺序读取方面性能较差,但在随机读取方面有 ...

  9. Luogu3092 [USACO13NOV]没有找零No Change (状压DP)

    将金币状压,然后就没多说的了. #include <iostream> #include <cstdio> #include <cstring> #include ...

  10. 计算机的主存储器(RAM)

    主存储器是存放指令和数据的,并能由 CPU 直接随机存取的存储器.主要由存储体.控制线路.地址寄存器.数据寄存器和地址译码电路五部分组成.