前提条件:

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. SQLZOO练习5--join(表的连接)

    game表: id mdate stadium team1 team2 1001 8 June 2012 National Stadium, Warsaw POL GRE 1002 8 June 20 ...

  2. SpringBoot接口 - 如何生成接口文档之非侵入方式(通过注释生成)Smart-Doc?

    通过Swagger系列可以快速生成API文档,但是这种API文档生成是需要在接口上添加注解等,这表明这是一种侵入式方式: 那么有没有非侵入式方式呢, 比如通过注释生成文档? 本文主要介绍非侵入式的方式 ...

  3. Solution -「ABC 217」题解

    D - Cutting Woods 记录每一个切割点,每次求前驱后驱就好了,注意简单判断一下开闭区间. 考场上采用的 FHQ_Treap 无脑莽. #include <cstdio> #i ...

  4. OpenWrt之feeds.conf.default详解

    目录 OpenWrt之feeds.conf.default详解 文件内容 命令解释 src-svn与src-gitsvn src-git与src-git-full src-cpy与src-link 其 ...

  5. reduce累加实现

    与map端的模式类似,map端要重写Mapper方法,reduce端也要重写Reduce方法,这里有一个泛型,我们先看参数类型 分别对应输入keyin,valuein,keyout,valueout. ...

  6. 源码解析springbatch的job是如何运行的?

    202208-源码解析springbatch的job是如何运行的? 注,本文中的demo代码节选于图书<Spring Batch批处理框架>的配套源代码,并做并适配springboot升级 ...

  7. Apache DolphinScheduler 2.0.1 来了,备受期待的一键升级、插件化终于实现

    ✎ 编 者 按:好消息!Apache DolphinScheduler 2.0.1 版本正式发布! 本版本中,DolphinScheduler 经历了一场微内核+插件化的架构改进,70% 的代码被重构 ...

  8. POJ3903Stock Exchange (LIS)

    学了下BIT,炸了... #include <iostream> #include <cstdio> #include <cstring> #include < ...

  9. Go语言 context包源码学习

    你必须非常努力,才能看起来毫不费力! 微信搜索公众号[ 漫漫Coding路 ],一起From Zero To Hero ! 前言 日常 Go 开发中,Context 包是用的最多的一个了,几乎所有函数 ...

  10. Mybatis框架--优化过程

    0. 原代码预览 简单实现在数据库中插入数据 public void testInsert() throws IOException { //获取核心配置文件的输入流 InputStream is = ...