gitlab-runner结合docker部署项目全过程

 更新时间:2026年05月13日 09:49:46   作者:Jurzis  
本文介绍了使用GitLab和GitLab Runner自动化构建Spring Boot项目的方法,搭建好GitLab和GitLab Runner后,在Spring Boot项目中创建.gitlab-ci.yml文件,配置脚本准备Maven编译项目、打包JAR包及运行JAR包,并在设置中配置CI/CD,这样,点击项目CI/CD即可自动化运行

前提

1.搭建好gitlab(直接拉下来安装就好)

2.搭建好gitlab-runner(直接拉下来安装就好)

3.安装docker

使用gitlab创建一个springboot的工程

项目中会有一个.gitlab-ci.yml的文件

我根据我的要求更改文件如下:

variables:
  PROJECT_NAME: "ruoyi_test" #项目名称,所有项目必须唯一  必填
  PORT: "8453" #运行在服务器的端口
  JAVA_OPTS: "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" #jvm的参数,可不设置
  SPRING_OPTS: "" #spring的参数,可不设置
  JAR_PATH: "/ruoyi-admin"#打包jar的路径 
  JAR_NAME: "ruoyi-admin.jar" #编译出的jar文件名称 必填
  PROJECT_PATH: "/project/ruoyi_admin" #项目运行的目录 必填
stages:
- auto_deploy
- restart
build_and_start:
  stage: auto_deploy
  tags: 
  - local
  script:
  - echo "============上传代码============"
  - bash /home/gitlab-runner/script/prepare.sh "$PROJECT_NAME" "$JAR_NAME" "$PROJECT_PATH"
  - echo "============上传代码完毕,开始打包============"
  - bash /home/gitlab-runner/script/package.sh "$PROJECT_NAME" "$JAR_NAME" "$PROJECT_PATH" "$JAR_PATH"
  - echo "============打包完毕,开始运行============"
  - bash /home/gitlab-runner/script/run.sh "$JAR_NAME" "$PROJECT_PATH" "$PORT" "$JAVA_OPTS" "$SPRING_OPTS"
  when: manual
just_restart:
 stage: restart
 tags: 
 - local
 script:
 - bash /home/gitlab-runner/script/run.sh "$JAR_NAME" "$PROJECT_PATH" "$PORT" "$JAVA_OPTS" "$SPRING_OPTS"
 # 手动执行
 when: manual

步骤

1.主要的逻辑都在脚本中,主要流程是,docker中使用maven镜像,先从自己本地copy一份setting文件到/home/gitlab-runner/script目录下(需要配置加速),方便maven打包更快。

2.prepare.sh脚本内容,用于准备maven编译项目

#!/bin/bash
if [ -z "$1" ]; then 
  echo "未传入项目名"
  exit 1
fi

if [ -z "$2" ]; then 
  echo "未传入jar包名"
  exit 1
fi

if [ -z "$3" ]; then 
  echo "未传入运行路径"
  exit 1
fi

docker_name="$1"_maven
echo 即将创建docker-"$docker_name"
existflag=$(docker ps -a | grep "$docker_name")
echo $existflag
if [ -z "$existflag" ]; then
  docker run -itd --name $docker_name maven:3.6.0-jdk-8-alpine /bin/bash
else
  docker stop $docker_name
  docker rm $docker_name
  docker run -itd --name $docker_name maven:3.6.0-jdk-8-alpine /bin/bash
fi
docker cp /home/gitlab-runner/script/settings.xml "$docker_name":/usr/share/maven/conf/settings.xml;
docker cp ./ "$docker_name":/home/"$1";

2.package.sh脚本内容,用户编译出jar包

#!/bin/bash

if [ -z "$1" ]; then 
  echo "未传入项目名"
  exit 1
fi

if [ -z "$2" ]; then 
  echo "未传入jar包名"
  exit 1
fi

if [ -z "$3" ]; then 
  echo "未传入运行路径"
  exit 1
fi
docker exec "$1"_maven bash -c "cd /home/$1; mvn clean; mvn package";
run_path=/ziyi"$3"
if [ ! -e $run_path ]; then
  mkdir -p $run_path
fi
docker cp "$1"_maven:/home/"$1""$4"/target/"$2" "$run_path"/"$2"
docker stop "$1"_maven
docker rm "$1"_maven

3.run.sh脚本内容,用于执行jar包。

#!/bin/bash

if [ -z "$1" ]; then 
  echo "未传入jar包名"
  exit 1
fi

if [ -z "$2" ]; then 
  echo "未传入运行路径"
  exit 1
fi
if [ -e "/ziyi$2/pidfile.txt" ]; then
  process=$(ps aux | grep `cat "/ziyi$2/pidfile.txt"`)
  if [ ! -z process ]; then
    echo "关闭之前的"`cat "/ziyi$2/pidfile.txt"`
    kill -9 `cat "/ziyi$2/pidfile.txt"`
  fi
fi
echo "启动-$2/$1-$4"
nohup java $4 -jar /ziyi$2/$1 --server.port=$3 $5 > /ziyi$2/logs.txt 2>&1 & echo $! > /ziyi$2/pidfile.txt

到这里点击项目的CI/DI,项目就可以自动化运行了。(前提,需要在setting中设置一个ci/di,这个网上大部分教程都有)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 全面解析java final关键字

    全面解析java final关键字

    这篇文章主要介绍了java final关键字的使用,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下
    2021-01-01
  • JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果

    这篇文章主要介绍了JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • idea更换jdk版本的完整步骤(附详细图文)

    idea更换jdk版本的完整步骤(附详细图文)

    idea很多地方都设置了jdk版本,不同模块的jdk版本也可能不一样,这篇文章主要介绍了idea更换jdk版本的完整步骤,通过文中介绍的步骤可以成功更换jdk版本,需要的朋友可以参考下
    2025-04-04
  • Java的MyBatis框架中对数据库进行动态SQL查询的教程

    Java的MyBatis框架中对数据库进行动态SQL查询的教程

    这篇文章主要介绍了Java的MyBatis框架中对数据库进行动态SQL查询的教程,讲解了MyBatis中一些控制查询流程的常用语句,需要的朋友可以参考下
    2016-04-04
  • Mybatis映射文件根标签与子标签示例讲解

    Mybatis映射文件根标签与子标签示例讲解

    这篇文章主要介绍了Mybatis映射文件根标签与子标签,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • Spring Boot 自定义数据源DruidDataSource代码

    Spring Boot 自定义数据源DruidDataSource代码

    这篇文章主要介绍了Spring Boot 自定义数据源DruidDataSource代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • pageHelper分页失效问题及解决方案

    pageHelper分页失效问题及解决方案

    文章介绍了Mybatis分页插件pageHelper的一个bug,即在一对多查询时会出现分页错误,作者提供了解决方案,包括方案一、方案二和方案三,方案一通过在服务层进行额外查询来解决分页问题,方案二利用mybatis的嵌套子查询来解决,但可能产生'1+N'问题
    2025-01-01
  • Nacos集群数据同步方式

    Nacos集群数据同步方式

    文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用
    2024-12-12
  • 浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)

    浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)

    这篇文章主要介绍了浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • spring 和 spring boot 中的属性配置方式

    spring 和 spring boot 中的属性配置方式

    这篇文章主要介绍了spring 和 spring boot 中的属性配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论