gitlab-runner结合docker部署项目全过程
前提
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,这个网上大部分教程都有)
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果
这篇文章主要介绍了JavaWeb开发之使用jQuery与Ajax实现动态联级菜单效果的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-10-10
Java的MyBatis框架中对数据库进行动态SQL查询的教程
这篇文章主要介绍了Java的MyBatis框架中对数据库进行动态SQL查询的教程,讲解了MyBatis中一些控制查询流程的常用语句,需要的朋友可以参考下2016-04-04
Spring Boot 自定义数据源DruidDataSource代码
这篇文章主要介绍了Spring Boot 自定义数据源DruidDataSource代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2019-10-10
浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现)
这篇文章主要介绍了浅谈SpringBoot集成Redis实现缓存处理(Spring AOP实现),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-12-12


最新评论