gitlab-ci docker maven 自动化流水线部署 springboot多模块项目

2023-11-03

一、准备

首先 需要两台服务器(这里为了下面方便理解,我们约定这两台服务器地址、名称和系统)
1、gitlab 服务器 服务器A(地址10.10.10.7)(内存大于4g不然会一直死)( CentOS Linux 7 (Core))
2、springboot服务部署服务器 服务器B(地址10.10.10.8)( CentOS Linux 7 (Core))

二、配置gitlab服务器

这个比较简单,或者可以直接用官方的gitlab应该都是可以的
参考 https://www.jianshu.com/p/7e6ea273833d

添加yum源

cat> /etc/yum.repos.d/gitlab-ce.repo<< EOF
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/  
gpgcheck=0
enabled=1
EOF

安装依赖包

yum install curl policycoreutils-python openssh-server

安装

yum makecache    #清楚缓存
yum install gitlab-ce

更改访问地址

vim /etc/gitlab/gitlab.rb
external_url 'http://10.10.10.7:9001'

重新加载配置,启动gitlab-ce

[root@gitlab ~]# gitlab-ctl reconfigure
[root@gitlab ~]# gitlab-ctl start 

之后就可以直接打开上面的url http://10.10.10.7:9001 开始访问了,然后就是修改密码,创建项目等等了,在此不赘述了(开的哪个端口别忘记打开防火墙)

三、安装gitlab-runner、并注册

gitlab-runner是安装在你的应用服务器上帮你完成自动化部署的一个工具
我是基于docker安装的所以首先服务器上要有docker,这里就不写了,因为有脚本了很简单 参考 https://cloud.tencent.com/developer/article/2061665

用docker的话可以用一个非常好用的图形化管理工具Portainer,是docker官方的,安装非常简单 两步走
(参考 https://blog.csdn.net/asenseof/article/details/107895383)

docker pull portainer/portainer
docker run -d -p 9000:9000 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /mnt/docker/portainer:/data portainer/portainer

然后访问服务器地址+上面映射的端口号了http://10.10.10.8:9000,就可以了
开始安装runner

也是非常简单
1、拉取镜像,启动容器

sudo docker pull gitlab/gitlab-runner
sudo docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest

2、进入容器

sudo docker exec -it gitlab-runner bash

3、注册runner
首先输入下面的命令开始注册

gitlab-runner register

输入Gitlab实例的地址
地址是你手动设置Runner区域里面的URL

> Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://xxx

输入token
token是你手动设置Runner区域里面的令牌

> Please enter the gitlab-ci token for this runner
xxx

输入Runner的描述

> Please enter the gitlab-ci description for this runner
[hostname] my-runner

输入与Runner关联的标签
标签是为了让后期在CI脚本中指定选择某个或者多个Runner

> Please enter the gitlab-ci tags for this runner (comma separated):
test

输入Runner的执行器
由于我们都是基于Docker,所以这里选择执行器为Docker

> Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker

设置执行器的版本

> Please enter the Docker image (eg. ruby:2.1):
alpine:latest

退出容器

exit

通过以上命令后,就创建成功runner啦,这时候我们去GitLab中我们创建Runner的区域刷新就能看到了

3、修改Runner配置文件

vim /srv/gitlab-runner/config/config.toml

找到volumes配置,修改结果为如下,分别是挂载了宿主机docker的sock文件和Maven的缓存,减少拉取Jar包的时间消耗,其中
"/home/gitlab-runner/.m2:/root/.m2"这块为Maven的Jar包存放地址,左边为宿主机目录,右边为容器内的Jar包存储路径,这个需要根据自己使用的Maven镜像而定,在volumes配置下方增加一行配置,防止Runner重复拉取镜像

pull_policy = "if-not-present"
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock", "/home/gitlab-runner/.m2:/root/.m2"]

这个目录后面写ci文件的时候我们会讲到
最后重启Runner

docker restart gitlab-runner

四、编写.gitlab-ci.yml、docker文件

1、.gitlab-ci.yml文件的编写
.gitlab-ci.yml是在git的root目录下面的一个脚本文件,用来执行自动化部署的
在这里插入图片描述
这里放个例子

image: docker:stable
variables:
  TAG: root/app:v0.1
  MAVEN_OPTS: "-Dmaven.repo.local=/root/.m2/repository"
cache:
  key: dockerlayer-ci-cache
  paths:
    - .m2/repository
    - /dafeng-official/target/*.jar


stages:
  - package
  - deploy
maven-package:
  image: maven:3.5-jdk-8-alpine
  stage: package
  tags:
    - build_docker
  script:
    - mvn clean package -Dmaven.test.skip=true $MAVEN_OPTS --settings=/root/.m2/settings.xml
  cache:
    key: dockerlayer-ci-cache
    paths:
      - dafeng-official/target/official.jar

  only:
    - main
build-master:
  stage: deploy
  tags:
    - deploy_docker
  cache:
    key: dockerlayer-ci-cache
    paths:
      - .m2/repository/
      - dafeng-official/target/*.jar
  script:
    - cd dafeng-official
    - docker build -t $TAG .
    - docker rm -f ohmy || true
    - docker run -d --name ohmy -p 2200:2200 $TAG
  only:
    - main

这里注意我是用了自己的maven仓库和配置文件,这里要自己配置一下在自己的宿主机上面新建文件夹home->gitlab-runner->.m2 创建如下文件
在这里插入图片描述
2、docker文件的编写
我用来测试的这个项目使用了springboot 多模块的方式编写的
我的dockerfile 写在了子模块的根目录下
在这里插入图片描述
然后我的dockerfile内容为

FROM openjdk:8-jdk-alpine
VOLUME /tmp
COPY target/official.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

五、测试使用

然后基本上就是提交代码到dev 合并到main分支上,触发流水线
在这里插入图片描述
显示上面的样式就是完成了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gitlab-ci docker maven 自动化流水线部署 springboot多模块项目 的相关文章

随机推荐

  • STM32+LZMA的移植经历

    连续一天加一个晚上 查资料 发现无解 压缩不可能在STM32上进行的 因为代码中那个内存分配的结构体占内存太大了 解压是可以实现的 因此这个算法在STM32上也是有一些作用 在某些场合可以在PC机进行压缩存入ARM中 然后ARM解压 比如某
  • Sql Server判断数据库、表、存储过程、函数是否存在

    判断数据库是否存在 if exists select from sys databases where name 数据库名 drop database 数据库名 判断表是否存在 if exists select from sysobject
  • 【无标题】vxworks ARM Pl330DMA 数据传输指令流创建

    pl330DmaChanMicroCodeCreate create micro code for dma transfer This routine create micro code for dma transfer RETURNS O
  • Linux chromium 源码下载及编译

    1 Chromium Souce Code Download 1 1 download source code 1 gt 方法一 获得所有发布tag的信息 git fetch tags 根据37 0 2062 103版本建立一个你自己的分支
  • 实现一款高可用的 TCP 数据传输服务器(Java版)

    1 netty能做什么 首先netty是一款高性能 封装性良好且灵活 基于NIO 真 非阻塞IO 的开源框架 可以用来手写web服务器 TCP服务器等 支持的协议丰富 如 常用的HTTP HTTPS WEBSOCKET 并且提供的大量的方法
  • STM32 之五 Core Coupled Memory(CCM)内存

    写在前面 今天在搞STM32F4时 用到了一部分特殊内存 CCM 搜了搜网上没多少介绍 索性自己查手册 某些芯片没有CCM 基本架构 废话少说 先看看这块内存特殊在哪里 官方的基本架构说明如下 The main system consist
  • VSCode 菜单栏不见了,该怎么办

    问题描述 某一天 自己独自一人使用VSCode写代码正嗨的时候 不晓得按到哪个快捷键了 导致菜单栏不见了 这下可慌了 以前从未遇到过这样的事情 界面如下 问题解决办法 经过各种尝试 终于找到了 解决办法 先将解决办法贴在下面 第一步 使用快
  • 华为OD机试 - 阿里巴巴找黄金宝箱(III) (Java & JS & Python)

    题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地有编号从0 N的箱子 每个箱子上面贴有一个数字 阿里巴巴念出一个咒语数字 查看宝箱是否存在两个不同箱子 这两个箱子上贴的数字相同 同时这两个箱了的编号之差的
  • Java小练习01

    猜数字0 9 package day2 import java util Random import java util Scanner public class day2 4 public static void main String
  • python中函数和属性的区别

    函数 有括号 属性 没有括号
  • 二维码Data Matrix编码、解码使用举例

    二维码Data Matrix的介绍见 http blog csdn net fengbingchun article details 44279967 这里简单写了个生成二维码和对二维码进行识别的测试例子 如下 int test data
  • 服务器要如何提高性能

    服务器要如何提高性能 一 将服务器虚拟化 如果同期拥有多个项目 增加额外服务器会显得浪费 成本费用也会大幅度上升 这时不妨通过技术将其划分成多个虚拟空间 而每个空间又可以使用不同操作系统 运行不同应用程序 使得符合项目要求 这种方式通常能增
  • Java 多线程 线程8锁(含示例代码)

    以下内容根据视频https www bilibili com video BV1vE411D7KE p 6学习整理 线程8锁 目录 1 标准访问 2 线程休眠 3 新增普通方法 4 两个对象调用两个线程 5 一个对象调用两个静态同步方法 6
  • Unity中加入虚拟按钮不可见

    忙活了一个多小时 按钮老是看不到 调整了半天按钮坐标 最后发现首先将主角 first person control 的x y轴坐标调整到 0 0 Z轴坐标无所谓 再将按钮坐标调整到 0 0 就会在屏幕出现按钮了 此时再随意调整主角坐标 按钮
  • Android OTA 相关工具(八) 使用 lpadd 添加镜像到 super.img

    文章目录 1 lpadd 的编译 2 lpadd 的帮助信息 3 lpadd 的用法 3 1 准备工作 empty 的 super 设备镜像 raw 格式的 super 设备镜像 sparse 格式的 super 设备镜像 3 1 lpad
  • [Android5.1][RK3288] LCD Mipi 调试方法及问题汇总

    调试流程 设置 dts 中的参数 并 配置管脚 背光部分 LCD 初始化序列 cmds 打开 config 检查电压 调试顺序 1 背光有没有亮 2 开机 以及 从休眠状态唤醒 都没有显示内容 3 我碰到的 cmds 问题 问题集锦 我调试
  • (Redis) RDB与AOP持久化的实现与本质区别

    Redis服务器 Redis是一个键值对数据库服务器 服务器中通常包含着任意个非空数据库 而每个非空数据库中又可以包含任意个键值对 我们将服务器中的非空数据库以及它们的键值对统称为数据库状态 例如 下图就是一个包含三个数据库以及数据控中的键
  • 数组扁平化和去重

    数组扁平化和去重 引入题目 已知有数组 1 2 2 3 4 5 5 6 7 8 9 11 12 12 13 14 10 扁平化数组后应该得到的数组为 1 2 2 3 4 5 5 6 7 8 9 11 12 12 13 14 10 一 数组扁
  • Android Studio基础输入文本框EditText

    Android Studio基础输入文本框EditText 接续上一节 Android Studio 基础按钮使用 1 提示文本框 输入文本框 在布局xml编写
  • gitlab-ci docker maven 自动化流水线部署 springboot多模块项目

    一 准备 首先 需要两台服务器 这里为了下面方便理解 我们约定这两台服务器地址 名称和系统 1 gitlab 服务器 服务器A 地址10 10 10 7 内存大于4g不然会一直死 CentOS Linux 7 Core 2 springbo