结合docker发布后端项目(基于gradle包管理)的shell脚本
结合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脚本的更多相关文章
- 结合docker发布前端项目(基于npm包管理)的shell脚本
结合docker发布前端项目(基于npm包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统 目前主流的前后端分离的项目中,常常在部署 ...
- 【linux】【jenkins】自动化运维四 整合gitlab、docker发布java项目
jenkins发布java项目 过程参考发布vue项目.https://www.cnblogs.com/jxd283465/p/11543431.html 大同小异. vue建立的是Freestyle ...
- 【linux】【jenkins】自动化运维三 整合gitlab、docker发布vue项目
由于工作需要,这里我先创建一个vue的工程. 1.首先安装好gitlab相关插件:GitLab.GitLab Hook.NodeJS 插件安装参考:https://www.cnblogs.com/jx ...
- 使用Docker发布DNC项目
项目结构 可以忽略中间三个Console项目 ApiCenter 是一个WebAPI项目,引用了NLog.MQ项目 ApiCenter使用5001端口 public static IWebHost B ...
- vmware14中安装centos7并使用docker发布spring-boot项目
1.vmare中centos7安装(同一路由器无线网络下) 1.1选择桥接模式 1.2修改配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33(这里不一 ...
- Rust 之 cargo(项目构建和包管理工具)
如果食用cargo来进行项目构建: 1. 执行 cargo new hello_cargo --bin ,执行完上面的操作之后,我们切换到hell_cargo目录下,可以看到一个文件(Cargo.to ...
- Homebrew 1.0.0 发布,MacOS 上的包管理器,比如安装qt5keychain
神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0 Mac OS X用户,qt5keychain可以使用homebr ...
- Homebrew 1.0.0 发布,MacOS 上的包管理器
神器,没有它不知道怎么用macos https://www.oschina.net/news/77367/homebrew-1-0-0
- 原创-公司项目部署交付环境预检查shell脚本
大型项目环境预检查脚本,根据自己实际情况修改脚本中变量,给大家一个思路~ #!/usr/bin/env bash root=$( cd $(dirname $0) pwd ) source " ...
随机推荐
- @hdu - 6372@ sacul
目录 @description@ @solution@ @accepted code@ @details@ @description@ 定义矩阵 \(A_i\) 是一个大小为 \(p^i*p^i\) ...
- poj 1263 Reflections (Simple Geometry)
1263 -- Reflections 简单计算几何.题目给出射线以及若干个不相交的圆,求出射线会在哪些圆上反弹,依次写出反弹球的编号. 代码如下: #include <cstdio> # ...
- jq实现简单购物车增删功能
https://www.cnblogs.com/sandraryan/ jq实现购物车功能 点击+- 增减数量,计算价格: 点击删除,删除当前行(商品) 点击- ,减到0 询问是否删除商品 点击全选 ...
- Python--day44--navicat使用(知道怎么用就好,要用终端操作,用这个会被人鄙视)
- Python--day41--条件
1,条件 #锁 #acquire release#一个条件被创建之初 默认有一个False状态#False状态 会影响wait一直处于等待状态#notify(int数据类型) 造钥匙 代码示例:条件. ...
- H3C 调试OSPF
- linux模块加载竞争
到目前, 我们的讨论已来到一个模块加载的重要方面: 竞争情况. 如果你在如何编写你的 初始化函数上不小心, 你可能造成威胁到整个系统的稳定的情形. 我们将在本书稍后讨论 竞争情况; 现在, 快速提几点 ...
- JS事件委托(代理)学习笔记
在开始之前我们先来熟悉一下HTML DOM addEventListener()方法,该方法用于向指定元素添加事件句柄.语法说明如下图所示: 主要想强调一下第三个参数useCapture,默认值为fa ...
- Linux 内核存取配置空间
在驱动已探测到设备后, 它常常需要读或写 3 个地址空间: 内存, 端口, 和配置. 特别 地, 存取配置空间对驱动是至关重要的, 因为这是唯一的找到设备被映射到内存和 I/O 空间的位置的方法. 因 ...
- javax.el.PropertyNotFoundException: Property 'XXX' not found on type java.lang.String
遇到的问题: 在使用idea开发Java Web时,调用SSM框架出现了如下错误: 但是我的类中已经定义了geter和seter方法,如下: 而Jsp中的调用代码是通过EL实现,也导入了相应的包.如下 ...