结合docker发布后端项目(基于gradle包管理)的shell脚本


本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记。

注:基于linux操作系统(敏感信息都进行了处理)

目前主流的前后端分离的项目中,常常在部署上线这个环节会遇到很多麻烦,这里我使用了docker进行部署,这段shell脚本我放在前端工程目录下,每次要部署上线时运行这个文件,可以很方便的帮助上线。注解都写在了代码中。
#!/usr/bin/env bash

// 以下使用变量存放配置信息
jarName="your_name-0.0.1-SNAPSHOT.jar"
BUILD_PROFILE="prod"
port=7006
LOGIN_COMMAND="login --username=... -p=... registry.cn-shenzhen.aliyuncs.com"
DOCKER_NAME="your_name"
repo="registry.cn-shenzhen.aliyuncs.com/your_name/${DOCKER_NAME}:latest"
JOB_NAME=${DOCKER_NAME}
REMOTE_SERVER="root@100.100.100.100" # Compile
echo Start to compile... // 开始打包
./gradlew clean&& ./gradlew build -x test // 使用gradle进行打包 cd ci // 脚本存放在ci目录下,进入该目录
jarPath=../build/libs/${jarName} // 定位打包出来的路径
cp -rf ${jarPath} app.jar // 将打包后的jar包拷贝到ci目录下,同时更名为app.jar # Docker
echo Start to build docker... // 开始构建docker镜像 // 以下通过Dockerfile文件构建镜像,Dockerfile会在另一篇博客中讲到
docker build \
-t ${DOCKER_NAME} \
--build-arg JAR_FILE="app.jar" \
--build-arg PROFILE=${BUILD_PROFILE} \
--no-cache . // 推送镜像到远程仓库
docker ${LOGIN_COMMAND}
docker tag ${DOCKER_NAME} ${repo}
docker push ${repo} // 删除临时产生的jar包
rm -rf app.jar # Deploy
echo deploy to remote server... // 通过ssh登录远程服务器,并执行命令:拉取镜像,构建容器
ssh ${REMOTE_SERVER} "
docker ${LOGIN_COMMAND};
docker pull ${repo};
docker rm -f $JOB_NAME || true;
docker run -d -p ${port}:${port} --name ${JOB_NAME} ${repo};"

结合docker发布后端项目(基于gradle包管理)的shell脚本的更多相关文章

  1. 结合docker发布前端项目(基于npm包管理)的shell脚本

    结合docker发布前端项目(基于npm包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 目前主流的前后端分离的项目中,常常在部署 ...

  2. 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目

    jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...

  3. 【linux】【jenkins】自动化运维三 整合gitlab、docker发布vue项目

    由于工作需要,这里我先创建一个vue的工程. 1.首先安装好gitlab相关插件:GitLab.GitLab Hook.NodeJS 插件安装参考:https://www.cnblogs.com/jx ...

  4. 使用Docker发布DNC项目

    项目结构 可以忽略中间三个Console项目 ApiCenter 是一个WebAPI项目,引用了NLog.MQ项目 ApiCenter使用5001端口 public static IWebHost B ...

  5. vmware14中安装centos7并使用docker发布spring-boot项目

    1.vmare中centos7安装(同一路由器无线网络下) 1.1选择桥接模式 1.2修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33(这里不一 ...

  6. Rust 之 cargo(项目构建和包管理工具)

    如果食用cargo来进行项目构建: 1. 执行 cargo new hello_cargo --bin ,执行完上面的操作之后,我们切换到hell_cargo目录下,可以看到一个文件(Cargo.to ...

  7. Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain

    神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0 Mac OS X用户,qt5keychain可以使用homebr ...

  8. Homebrew 1.0.0 发布,MacOS 上的包管理器

    神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0

  9. 原创-公司项目部署交付环境预检查shell脚本

    大型项目环境预检查脚本,根据自己实际情况修改脚本中变量,给大家一个思路~ #!/usr/bin/env bash root=$( cd $(dirname $0) pwd ) source " ...

随机推荐

  1. [转]Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

    Redis的集群方案大致有三种:1)redis cluster集群方案:2)master/slave主从方案:3)哨兵模式来进行主从替换以及故障恢复. 一.sentinel哨兵模式介绍Sentinel ...

  2. git卡在Resolving deltas 100%的解决办法

    很多同学都有这样的问题.不知道是git的问题,还是tortoisegit的问题. 我的版本: Git-1.8.4-preview20130916 TortoiseGit-1.8.6.0-32bit 已 ...

  3. P1087 N个数的最大公约数

    题目描述 今天灵灵学习了使用欧几里得算法(即:辗转相除法)求解两个数的最大公约数.于是他决定用这个方法求解 \(N\) 个数的最大公约数. 输入格式 输入的第一行包含一个整数 \(N(1 \le N ...

  4. 2018-8-10-win10-uwp-绑定-OneWay-无法使用

    title author date CreateTime categories win10 uwp 绑定 OneWay 无法使用 lindexi 2018-08-10 19:16:50 +0800 2 ...

  5. java 类加载器的委托机制

    l 当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢? 1.首先当前线程的类加载器去加载线程中的第一个类. 2.如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B. 3 ...

  6. poll 和 select 底层的数据结构

    poll 和 select 系统调用的真正实现是相当地简单, 对那些感兴趣于它如何工作的人; epoll 更加复杂一点但是建立在同样的机制上. 无论何时用户应用程序调用 poll, select, 或 ...

  7. Python3内置函数、各数据类型(int/str/list/dict/set/tuple)的内置方法快速一览表

    Python3内置函数 https://www.runoob.com/python3/python3-built-in-functions.html int https://www.runoob.co ...

  8. 【53.57%】【codeforces 610C】Harmony Analysis

    time limit per test3 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  9. git push报错大文件,删除后重新commit依然报错

    git push报错: github不能上传大文件,按道理删掉重新提交就行了 可是删掉后,git add -A,再git commit,再git push,依然报错 后来我想明白了 github上传时 ...

  10. JMeter FTP测试计划

    为了演示测试目的,我们将使用公共可用的FTP位置,可以使用它来测试文件的下载. 您可以使用市场上现有的任何可用的演示FTP位置.我们使用URL下的FTP位置: https://dlptest.com/ ...