搭建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中进行项目的修改然后推送:
在这里插入图片描述
可以看见正在构建:
在这里插入图片描述
可以正常访问:
在这里插入图片描述

  • 25
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

原首

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值