搭建GItlab实现自动化部署Springboot项目(超详细)

提示:本例程中使用Docker搭建GItlab,Gitlab runner 通过编写CICD文件实现Springboot项目自动部署。

1、拉取GitLab镜像

命令:

docker pull gitlab/gitlab-ce

在这里插入图片描述

2、部署Gitlab:

我们通过docker搭建的gitlab部署项目的时候会出现一个问题:如果不指定external_url 会出现项目的地址是容器名的情况,而指定了external_url 对应的端口会出现gitlab无法访问的问题,这是因为当我们指定了端口就相当于修改了容器内的80端口为我们指定的端口。所以当我们需要指定端口的时候一定要注意:
1、指定external_url为xxxx则映射的时候需要将xxxx映射出来
2、不指定external_url端口则需要将80端口映射到宿主机的80,不能映射为别的端口否则会出现新的问题(项目的地址会出现不包含宿主机端口的情况),在ci过程中有bug,对应443、22端口映射到宿主机则没有限制。
3、对数据卷进行挂载的时候为了直观的查看日志我们可以直接将具体内容映射到vdata。

编写docker-compose.yml文件:

version: '3'
services:
  gitlab:
    image: gitlab/gitlab-ce:latest
    container_name: gitlab
    restart: always
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        external_url 'http://192.168.75.159:8888' #宿主机ip和gitlab端口
    ports:
      - "8888:8888"  #因为我们设置了external_url 端口8888所以这里需要将8888映射出去,
      - "443:443"
      - "22:22"
    volumes:
      - ./gitlab/config:/etc/gitlab
      - ./gitlab/logs:/var/log/gitlab
      - ./gitlab/data:/var/opt/gitlab






concurrent = 1
check_interval = 0
shutdown_timeout = 0

[session_server]
  session_timeout = 1800

[[runners]]
  name = "vue-blog"
  url = "http://192.168.75.159:8888"
  id = 2
  token = "glrt-cCF71zezuytEkjyo5_rk"
  token_obtained_at = 2024-03-14T05:44:44Z
  token_expires_at = 0001-01-01T00:00:00Z
  executor = "docker"
  [runners.cache]
    MaxUploadedArchiveSize = 0
  [runners.docker]
    tls_verify = false
    image = "docker:19.03.12"
    privileged = false
    disable_entrypoint_overwrite = false
    oom_kill_disable = false
    disable_cache = false
    volumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache","/root/.m2:/root/.m2"]
    pull_policy = "if-not-present"
    shm_size = 0
    network_mtu = 0



运行docker-comspoe.yml:

docker compose up -d

在这里插入图片描述gitlab的启动构建时间很长,并且要求电脑最好内存4G以上,如果构建失败可以查看具体日志:
构建成功的日志:
在这里插入图片描述

3、进入GItlab并查看

输入对应的地址进入到gitlab我们上文设置的external_url
历程中是:http://192.168.75.159:8888/users/sign_in
在这里插入图片描述

gilab的默认账号是:root
查看密码方式:

sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

登录进入:

如何设置中文:点击头像->Preferences->Language
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/09a2e64bbad94de7a9970306a51d7f5d.png
设置中文:在这里插入图片描述当然我们也可以设置自己喜欢的主题和头像等

在这里插入图片描述

4、将项目上传到Gitlab:

我们需要将我们的项目上传到gitlab,这个过程首先我们需要在IDEA中登录gitlab:
settings中搜索git:
在这里插入图片描述
server是我们的gitlab地址,token可以点击生成会跳转到浏览器自动生成,当然也可以在:访问令牌中自己生成一个:
在这里插入图片描述然后我们可以在命令行将代码推送到gitlab具体做法,但是我们需要先创建一个项目:
在这里插入图片描述
然后按照readme添加远程仓库,推送等,这里的步骤跟其他的gitee、gitalb一样不过多赘述了,最后我们查看我们推送完成的项目:
在这里插入图片描述

5、配置Gitlab-Runner

要实现CICD我们需要使用Gitlab-Runner来搭建项目需要的运行环境,我们这里使用Docker搭建GItlabRunner:

docker run -d --name gitlab-runner --restart always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v ./gitlab-runner/vdata/gitlab-runner/config:/etc/gitlab-runner \
    gitlab/gitlab-runner:latest

-v /var/run/docker.sock:/var/run/docker.sock \这一行代码不能修改
运行完成之后:
在这里插入图片描述一共两个容器gitlab、gitlab-runner
之后我们可以进行runner的配置,跟我们的项目关联起来:
在这里插入图片描述这里我之前已经建立过Runner了,构建Runner的方式也很简单填写一些基本信息即可,记住要勾选住:运行未打标签的作业,然后回生成一个Runner的令牌:

在这里插入图片描述
在这里插入图片描述
创建完Runner后:
在这里插入图片描述之后我们通过docker进入到gitlab-runner:

docker exec -it <容器id> /bin/bash

进入容器后运行命令gitlab-runner register即可,会让我们填写一些基本的信息,
name随便填写, url、token填写上文界面提供的执行器executer填写dokcer,因为我们使用docker构建
image填写一个dokcer发行版就行这里是:docker:19.03,12
最后我们填写完成之后退出容器,进入我们部署docker-runner的配置文件:
上文中我的地址是:./gitlab-runner/vdata/gitlab-runner/config,这个地址根据自己的配置来:会有一个配置文件:
config.toml
在这里插入图片描述
这里对配置文件讲解一下,我们使用docker构建项目volumes一定要对,另外我们CICD过程中需要指定maven缓存,如果不指定Maven缓存,会出现每次构建项目都需要下载依赖的情况,非常耗时,同时我们需要指定maven镜像仓库,加快第一次构建速度
在这里插入图片描述上述文件的/root/.m2是容器内的maven仓库地址,我们将其映射到xxxxx/maven/ 这个路径按照需求自定义,同时我们要将settings.xml放到xxxxx/maven/ 下对于宿主机路径xxxxx/maven/ 我们在CICD的时候还需要使用最好写成跟容器内一致的地址,
settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          https://maven.apache.org/xsd/settings-1.0.0.xsd">
    <mirrors>
        <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>central</mirrorOf>
            <name>阿里云公共仓库</name>
            <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
    </mirrors>

</settings>

到此设置Runner结束

6、配置编写Dockerfile、CICD文件

要实现自动化构建需要项目的镜像:
在这里插入图片描述上面的三个阶段当然我们可以使用但是耗时长,我们可以直接使用maven的clean然后打包,在进行构建:
在这里插入图片描述
首先提供Dockerfile:

#基础镜像
FROM openjdk:8

#作者
MAINTAINER hery

# 设置工作目录
WORKDIR /app

# 复制编译后的 Spring Boot 可执行 Jar 文件到容器中其中blog-springboot-1.0.jar是package生产的具体名字是pom.xml决定
COPY target/blog-springboot-1.0.jar /app/

# 暴露 Spring Boot 应用程序的端口号
EXPOSE 8989

# 设置容器启动时运行的命令
CMD ["java", "-jar", "blog-springboot-1.0.jar"]

命令很详细具体不在解释

CICD文件:

stages:  # 定义构建阶段
  # - build  # 构建阶段
  - package  # 打包阶段
  - deploy  # 部署阶段

variables:  # 定义变量
  DOMAIN: "vue-blog-api"  # 定义域名变量
  PORT: "8093"  # 定义端口变量
  IMAGE_NAME: "blog:latest"  # 定义镜像名称变量
  MAVEN_IMAGE: "maven:3.8.4-jdk-11"  # 定义 Maven 镜像变量

cache:  # 配置缓存
  key: "$CI_COMMIT_REF_NAME"  # 缓存键
  paths:  # 缓存路径
    - /home/桌面/gitlab-runner/vdata/gitlab-runner/maven  # Maven 缓存路径

# build:  # 构建阶段
#   stage: build  # 设置阶段
#   image: $MAVEN_IMAGE  # 使用 Maven 镜像
#   script:  # 执行脚本
#     - echo "项目开始构建......"  # 开始构建阶段
#     - mvn clean compile -DskipTests=true -Dmaven.javadoc.skip=true  # 编译项目代码并跳过测试和 Javadoc 生成
#     - echo "跳过测试......"  # 打印测试跳过消息
#     - echo "跳过文档生成......"  # 打印 Javadoc 生成跳过消息
#     - echo "构建完成......"

package:  # 打包阶段
  stage: package  # 设置阶段
  image: $MAVEN_IMAGE  # 使用 Maven 镜像
  script:  # 执行脚本
    - echo "开始打包阶段......"  # 开始打包阶段
    - echo "打包中......"  # 打印打包项目的消息
    - mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true # 打包项目
  artifacts:  # 配置构建产物
    paths:  # 产物路径
      - target/*.jar  # 将打包的 JAR 文件作为构件发布

deploy:  # 部署阶段
  stage: deploy  # 设置阶段为部署阶段
  script:  # 执行脚本
    - echo "开始部署阶段......"  # 开始部署阶段
    # - apk add --no-cache mpg123  #安装 mpg123
    # - apk add --no-cache curl  # 安装 curl
    - docker stop $DOMAIN || true  # 停止同名容器,如果不存在则忽略错误
    - docker rm $DOMAIN || true    # 删除同名容器,如果不存在则忽略错误
    - echo "开始构建 Docker 镜像文件......"
    - docker build -t $IMAGE_NAME .  # 构建 Docker 镜像
    - echo "正在启动 Docker 容器......"
    - docker run -d -p $PORT:8989 --name $DOMAIN $IMAGE_NAME  # 运行 Docker 容器


接下来进行一次测试,我们在IDEA中进行项目的修改然后推送:
在这里插入图片描述
可以看见正在构建:
在这里插入图片描述
可以正常访问:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/479279.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Springboot+Vue前后端分离的在线商城系统

项目介绍 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本ONLY在线商城系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

PHP页面如何实现设置独立访问密码

PHP网页如果需要查看信息必须输入密码&#xff0c;验证后才可显示出内容的代码如何实现&#xff1f; 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密。 如何实现这个效果&#xff0c;详细教程可以参考&#xff1a;PHP页面如何实现…

从零开始学习在VUE3中使用canvas(二):fillStyle(填充样式)

一、fillStyle概念 在canvas中我们可以用fillStyle定义接下来的图像的样式&#xff0c;默认为黑色#000。 我们可以使用纯色、渐变、和纹理&#xff08;例如图片&#xff09;进行填充&#xff0c;来达到自己想要的效果。 二、代码 <template><div class"canva…

ideaSSM 工厂效能管理系统bootstrap开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea 开发 SSM 工厂效能管理系统是一套完善的信息管理系统&#xff0c;结合SSM框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff…

测试开发工程师(QA)职业到底需要干些什么?part2:服务端QA

服务端QA测试开发工作主要涉及测试和确保服务端应用程序的质量、稳定性和性能。以下是服务端QA测试开发人员在工作中可能涉及的任务和职责 编写测试计划和测试用例&#xff1a;QA测试开发人员负责编写详细的测试计划和测试用例&#xff0c;以覆盖服务端应用程序的各个功能和场景…

MYSQL索引、事务、存储引擎(一)

目录 一、索引 1、索引的概念 2、索引的作用 3、索引的副作用 4、创建索引的原则依据 二、索引的分类 1、普通索引 1.直接创建索引 2.修改方式创建索引 3.创建表的时候指定索引 2、唯一索引 1.直接创建唯一索引 2.修改表方式创建索引 3.创建表的时候指定索引 3、…

C# Onnx Yolov9 Detect 物体检测

目录 介绍 效果 项目 模型信息 代码 下载 C# Onnx Yolov9 Detect 物体检测 介绍 yolov9 github地址&#xff1a;https://github.com/WongKinYiu/yolov9 Implementation of paper - YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information …

【LeetCode-74.搜索二维矩阵】

题目详情&#xff1a; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&am…

HTML小游戏27 - Chuck Chicken 魔法蛋网页游戏(附完整源码)

&#x1f482; 网站推荐:【神级源码资源网】【摸鱼小游戏】 【工具大全】&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;【轻量化工具创作平台】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【学习交流群】 本节教程我会带大家使用 HTML 、…

技术分享|揭秘第三代指标平台如何解决复杂指标的定义与计算问题

本文根据 Aloudata 直播专栏 “NoETL 公开课&#xff5c;第三代指标平台如何解决复杂指标的定义与计算问题&#xff1f;”的演讲内容整理发布。 讲师简介&#xff1a;张乐&#xff0c;Aloudata CAN 指标平台技术负责人。8 年互联网技术架构和数据平台产品相关经验&#xff0c;…

预约陪诊服务app开发的运营模式分析详解

一、引言 随着社会的发展和人们生活水平的提高&#xff0c;人们对健康的需求越来越高&#xff0c;预约陪诊服务应运而生。预约陪诊服务app作为一种便捷的就医工具&#xff0c;为患者提供了更加人性化的就医体验。本文将对预约陪诊服务app开发的运营模式进行分析&#xff0c;以期…

鸿蒙Harmony应用开发—ArkTS(@BuilderParam装饰器:引用@Builder函数)

当开发者创建了自定义组件&#xff0c;并想对该组件添加特定功能时&#xff0c;例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法&#xff0c;将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题&#xff0c;ArkUI引入了BuilderParam装饰器&…

多ip多进程代理的实现方法

目录 写在前面 一、背景 二、实现方法 1. 使用多线程处理代理请求 2. 使用多进程处理代理请求 3. 实现多IP代理 三、总结 写在前面 实现多IP多进程代理需要使用Python的多线程和多进程模块。本文将介绍如何使用这些模块来实现多IP多进程代理&#xff0c;并提供相关的代…

基于SSM+Jsp+Mysql的高校二手交易平台

基于SSMJspMysql的高校二手交易平台 基于SSMJspMysql的高校二手交易平台的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff0…

API 接口渗透测试

1 API 接口介绍 1.1 RPC&#xff08;远程过程调用&#xff09; 远程过程调用&#xff08;英语&#xff1a;Remote Procedure Call&#xff0c;缩写为 RPC&#xff09;是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序&#xff0c;而程序员无…

一个案例,看懂AI Agent厂商的商业落地路径

随着大语言模型技术的日益成熟&#xff0c;国内科技巨头纷纷加快在AI Agent领域的布局和应用落地。凭借自身强大的技术积累和丰富的应用场景&#xff0c;推动AI Agent技术在各行各业的深度融合与创新应用。 在AI Agent的落地应用上&#xff0c;目前科技巨头正借助已有AI技术平…

CSDN个人简介优化 html font属性

CSDN个人简介优化 html font属性 个人简介个人简介优化字体21种样式选择字体大小设置4号字体 字体颜色设计渐变色&#xff08;可惜不能显示&#xff09; 字体加粗设置 <b>标签 个人简介 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光…

spring cloud项目微服务间互相调用使用自定义标注进行鉴权方案

来吧&#xff0c;贴代码。 一、背景 我们有一个项目使用了spring cloud&#xff0c;有的微服务需要调用别的微服务&#xff0c;但这些调用没有鉴权&#xff1b;当初项目时间非常紧&#xff0c;同时这部分微服务有的对外也没有鉴权&#xff0c;在代码中设置了无须鉴权&#xf…

三连杆滑块机构运动学仿真 | 【Matlab源码+理论公式文本】|曲柄滑块 | 曲柄连杆 | 机械连杆

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了三连杆滑块机构的运动学仿真编程&#xff0c;动态展现了三连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档…

【MySQL】MySQL用户管理

文章目录 一、用户1.用户信息2.创建用户3.删除用户4.修改用户密码 二、数据库的权限1.给用户授权2.回收权限 一、用户 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 1.用户信息 我们安装mysql之后&#xff0c;会自动…