gitlab-runner结合docker部署项目

使用gitlab-runner集成doker自动化部署实例

前提

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,这个网上大部分教程都有)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GitLab-RunnerGitLab提供的一个开源工具,可以用于在GitLab上运行CI/CD任务。通过GitLab-Runner,可以方便地实现自动化的构建、测试、集成和部署等任务。 下面是一些使用GitLab-Runner打造锋利的CI/CD的方法: 1. GitLab-Runner安装和配置:首先需要安装GitLab-Runner,并将其配置到GitLab服务器上。可以通过Docker容器、二进制包或源码编译的方式安装GitLab-Runner,然后在GitLab服务器上注册Runner,并设置Runner的执行环境和权限等参数。 2. 编写CI/CD脚本:在GitLab上创建项目,并在项目中编写CI/CD脚本,定义任务的执行流程和步骤。可以使用GitLab提供的CI/CD工具和插件,也可以使用第三方工具和脚本库。 3. 构建、测试和集成:通过GitLab-Runner执行CI/CD任务,自动化构建、测试和集成代码,并生成测试报告和代码覆盖率报告等文档。可以使用各种编程语言和框架,如Java、Python、Ruby、Node.js等。 4. 部署和发布:通过GitLab-Runner将代码部署到目标服务器上,并执行自动化发布流程。可以使用容器化技术、配置管理工具、自动化部署工具等实现高效、可靠的部署和发布。 5. 监控和反馈:通过GitLab的监控和反馈机制,及时发现和解决CI/CD任务中的问题和错误,并持续优化任务的执行效率和稳定性。可以使用各种监控工具和日志分析工具,如Prometheus、Grafana、ELK等。 总之,使用GitLab-Runner打造锋利的CI/CD,可以提高开发和运维的效率和质量,降低项目的风险和成本,实现持续交付和快速迭代的目标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值