搭建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:latestcontainer_name: gitlabrestart: alwaysenvironment: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/gitlabconcurrent = 1
check_interval = 0
shutdown_timeout = 0[session_server]session_timeout = 1800[[runners]]name = "vue-blog"url = "http://192.168.75.159:8888"id = 2token = "glrt-cCF71zezuytEkjyo5_rk"token_obtained_at = 2024-03-14T05:44:44Ztoken_expires_at = 0001-01-01T00:00:00Zexecutor = "docker"[runners.cache]MaxUploadedArchiveSize = 0[runners.docker]tls_verify = falseimage = "docker:19.03.12"privileged = falsedisable_entrypoint_overwrite = falseoom_kill_disable = falsedisable_cache = falsevolumes = ["/var/run/docker.sock:/var/run/docker.sock","/cache","/root/.m2:/root/.m2"]pull_policy = "if-not-present"shm_size = 0network_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.0https://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中进行项目的修改然后推送:
在这里插入图片描述
可以看见正在构建:
在这里插入图片描述
可以正常访问:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python Flask框架 -- 模版继承

一个网站中&#xff0c;大部分网页的模块是重复的&#xff0c;比如顶部的导航栏&#xff0c;底部的备案信息。如果在每个页面中都重复的去写这些代码&#xff0c;会让项目变得臃肿&#xff0c;提高后期维护成本。比较好的做法是&#xff0c;通过模板继承&#xff0c;把一些重复…

DP:斐波那契数列模型

创作不易&#xff0c;感谢三连支持 &#xff01; 斐波那契数列用于一维探索的单峰函数之中&#xff0c;用于求解最优值的方法。其主要优势为&#xff0c;在第一次迭代的时候求解两个函数值&#xff0c;之后每次迭代只需求解一次 。 一、第N个泰波那契数 . - 力扣&#xff08;…

[LLM] 大模型基础|预训练|有监督微调SFT | 推理

现在的大模型在进行预训练时大部分都采用了GPT的预训练任务&#xff0c;即 Next token prediction。 要理解大语言模型&#xff08;LLM&#xff09;&#xff0c;首先要理解它的本质&#xff0c;无论预训练、微调还是在推理阶段&#xff0c;核心都是next token prediction&#…

Wireshark 抓包工具与长ping工具pinginfoview使用,安装包

一、Wireshark使用 打开软件&#xff0c;选择以太网 1、时间设置时间显示格式 这个时间戳不易直观&#xff0c;我们修改 2、抓包使用的命令 1&#xff09;IP地址过滤 ip.addr192.168.1.114 //筛选出源IP或者目的IP地址是192.168.1.114的全部数据包。 ip.sr…

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

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

显卡基础知识及元器件原理分析

显卡应该算是是目前最为火热的研发方向了&#xff0c;其中的明星公司当属英伟达。 当地时间8月23日&#xff0c;英伟达发布截至7月30日的2024财年第二财季财报&#xff0c;营收和利润成倍增长&#xff0c;均超市场预期。 财报显示&#xff0c;第二财季英伟达营收为135.07 亿美…

leetcode 3075

leetcode 3075 题目 例子 思路 孩子的幸福值最低也是0&#xff0c;所以选择最大的值&#xff0c;被选孩子的幸福值最高。需要使用排序算法 代码实现 class Solution { public:long long maximumHappinessSum(vector<int>& happiness, int k) {//升序sort(happine…

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

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

Robot Framework 入门指南:高效学习接口自动化测试

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用…

移远通信,开启透明天线中的“创新密码”

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信正式对外宣布&#xff0c;其以远远领先行业的速度推出前沿技术成果——5G透明天线。该天线主体选用透明薄膜材质&#xff0c;具有性能优、重量轻、尺寸灵活、透明度高、环境融合度好等优势&#xff0c;特别适用于智…

处理器方法的返回值--返回对象Object

处理器方法也可以返回Object对象。这个Object可以是Integer&#xff0c;String&#xff0c;自定义对象&#xff0c; Map&#xff0c;List 等。但返回的对象不是作为逻辑视图出现的&#xff0c;而是作为直接在页面显示的数据出现的。 返回对象&#xff0c;需要使用ResponseBody注…

python第三次项目作业

打印课堂上图案 判断一个数是否是质数&#xff08;素数&#xff09; 设计一个程序&#xff0c;完成(英雄)商品的购买&#xff08;界面就是第一天打印的界面&#xff09; 展示商品信息(折扣)->输入商品价格->输入购买数量->提示付款 输入付款金额->打印购买小票&a…

九州家庭教育:关注孩子心理健康,增强亲子沟通

家庭教育现在越来越受重视&#xff0c;尤其孩子心理健康&#xff0c;当下社会&#xff0c;孩子心理健康问题频出&#xff0c;很多地方不时传出孩子轻生的新闻&#xff0c;这就是在教育过程中&#xff0c;沟通出现了严重问题&#xff0c;随着心理变化产生&#xff0c;孩子这时候…

FCN(全卷积神经网络)

目录 一、什么是FCN 1、FCN简介 2、核心思想 二、代码实现 1、FCN结构介绍 2、ResNet-18提取图像特征 3、11卷积层将通道数变换为类别个数 4、转置卷积还原输入图像的高和宽 5、初始化转置卷积层 6、读取数据集 7、训练 8、预测 三、总结 一、什么是FCN 1、FCN简介…

CSDN个人简介优化 html font属性

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

Django日志(四)

一、Filters介绍 过滤器用于从logger传递给handler的哪些日志要做额外控制 默认情况下,满足日志级别的任何消息都将处理。只要级别匹配,任何日志消息都会被处理。不过,也可以通过添加 filter 来给日志处理的过程增加额外条件。例如,可以添加一个 filter 只允许某个特定来源…

产品说明书怎么制作?学会用模板事半功倍!

产品说明书常常被低估&#xff0c;但其实它是一个企业的名片&#xff0c;在阐述你的产品服务时大有作用。如果你在制作产品说明书上面花费大量的时间和精力&#xff0c;那么今天的文章可能会对你有所帮助。此文将会引领你了解如何制作产品说明书&#xff0c;以及推荐几款高效的…

Redis 不再“开源”,对中国的影响及应对方案

Redis 不再“开源”&#xff0c;使用双许可证 3 月 20 号&#xff0c;Redis 的 CEO Rowan Trollope 在官网上宣布了《Redis 采用双源许可证》的消息。他表示&#xff0c;今后 Redis 的所有新版本都将使用开源代码可用的许可证&#xff0c;不再使用 BSD 协议&#xff0c;而是采用…

【Web】记录巅峰极客2023 BabyURL题目复现——Jackson原生链

目录 前言 分析 EXP SignedObject打二次反序列化 打TemplatesImpl加载恶意字节码 前文&#xff1a;【Web】浅聊Jackson序列化getter的利用——POJONode 前言 题目环境:2023巅峰极客 BabyURL 之前AliyunCTF Bypassit I这题考查了这样一条链子&#xff1a; BadAttributeV…

通过rmi实现远程rpc(可以认为java自带Dubbo RPC)

背景&#xff1a; 发现公司几个运行10年的游戏&#xff0c;用的竟然是rmi&#xff0c;而我只听说过dubbo 和 基于netty的rpc&#xff0c;于是就补充了下rmi。 其次&#xff0c;是最近对于跨服的思考&#xff0c;如何避免回调也需要用同步写法&#xff0c;rmi比较适合。 1)api…