最近做一个项目临近测试,购买的是阿里云的服务器,每次部署都是手动打包war,然后上传到服务器,然后修改配置文件,不仅繁琐,而且费时,就思索着找一个一键式的部署方式,今天终于腾出时间来做这件事,记录一下。

先决条件

  • 远程服务器已配置ssh免密码登录(因为免密码登录便于实现全自动化)
  • 本地具备ssh环境(我的开发环境是windows,呜呜。。。我使用的是babun,还不错,推荐,当然了,我之前是因为其他原因安装了)
  • Linux shell编程(其实这里用的很少),sed工具的使用

主要思路

主要就是将生成的war发布到阿里云,这里不发布war,直接将tomcat中的工程下的文件拷贝到阿里云(其实war只是将这些文件压缩传输),然后修改配置文件

  1. 使用scp将本地文件拷贝到服务器
  2. 修改阿里云上的配置文件

copy文件

#!/bin/bash

# 切换到tomcat发布目录,这个目录前面看起来比较诡异,就是因为使用的是babun
cd /cygdrive/d/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps # 复制文件到阿里云服务器tomcat
scp -r ./ test@xx.xxx.xxx.xx:/var/www/tomcat/webapps # 复制完成之后,登录阿里云
# 执行远程服务器上用户目录的脚本文件edit.shssh test@xx.xxx.xxx.xx 'sh ~/edit.sh'

好的,看到ssh免密码登录的用处了吧,在进行scp拷贝的时候不需要手动参与输入密码,在最后执行远程的服务器脚本的时候也一样,到目前为止貌似也没有用到很复杂的shell脚本语法,以前学过shell编程,因为没有用到,我也没有记录(每当这个时候我就觉得现在写博客是极其正确的)

修改配置文件

上面脚本最后一句话就是执行远程服务器上的edit.sh,进行修改需要修改的配置文件

#!/bin/bash

# 切换到app目录
cd /var/www/tomcat/webapps/app # 修改applicationContext-context.xml,修改数据库密码,因为本地和服务器不是同一个数据库,修改
sed -i -e 's/name="password" value="root"/name="password" value="xxxx"/' ./WEB-INF/applicationContext-context.xml # 修改config.properties
sed -i 's/localhost:8080/xx.xxx.xxx.xx/' ./WEB-INF/classes/config.properties # 修改日志存放目录
sed -i -e '12,12s+E://logs/log.log+/var/www/tomcat/logs/log.log+' -e '21,21s+E://logs/error.log+/var/www/tomcat7/logs/error.log+' ./WEB-INF/classes/log4j.properties

大功告成,已经初步实现了一键式部署,整个过程不要人参与

改进

  • 每次不需要复制改动不频繁的文件,比如jar包,js类库就不需要复制
  • 想统计每次脚本执行的时间,一开始想在shell脚本里面写,后来发现了time命令,太强大了,这样就知道每次脚本执行的时间了

总结

shell脚本

  • 脚本中执行shell命令,用反引号包起来,如`date`,查看当时间
  • 脚本中的运算,shell脚本本身不支持数学运算,可以通过其他命令来实现,比如awk,expr如
#!/bin/bash

## 注意
# 因为是调用shell命令,所以整个表达式都要用反引号包括
# 在运算符和表达式之间必须有空格
# 脚本中的变量命名和=之间不能有空格
value=`expr + `
# 使用$引用变量
echo $value

以上内容有参考http://c.biancheng.net/cpp/view/6999.html,其他详细内容暂时就不再深入了,还是需求驱动学习。

sed命令

强大的叹为观止!!这个命令的提供我们不用打开文件就可以直接编辑文件,对于文中用到的几个用法加以记录

  • sed -i:表示对原文件进行修改,所有修改直接反映到原文件,可以使用  sed -i.bak  将原文件备份后修改原文件
  • -e: 表示可以同时进行多个修改,比如文中一次进行了多次替换,每一次修改前使用  -e
  • /m,ns/from/to/: s搜索替换命令,和vim的搜索替换命令一致的,搜索第m到n行将 from 替换为 to ,m,n可以不加表示只替换一行,from 和 to 支持正则表达式,如果 from 和 to 中有"/"符号可以使用"\"进行转义,或者将命令中的"/"写为"+", +m,ns+from+to+

linux的强大之处不容置疑!

一次Linux自动化部署尝试的更多相关文章

  1. Linux自动化部署尝试

    Linux自动化部署尝试   最近做一个项目临近测试,购买的是阿里云的服务器,每次部署都是手动打包war,然后上传到服务器,然后修改配置文件,不仅繁琐,而且费时,就思索着找一个一键式的部署方式,今天终 ...

  2. Linux 自动化部署DNS服务器

    Linux 自动化部署DNS服务器 1.首先配置主DNS服务器的IP地址,DNS地址一个写主dns的IP地址,一个写从dns的地址,这里也可以不写,在测试的时候在/etc/resolv.conf中添加 ...

  3. Linux 自动化部署Rsyslog服务

    Linux 自动化部署Rsyslog服务 源码如下: #/bin/bash #该脚本用于自动化部署Ryslog服务配置 #作者:雨中落叶 #博客:https://www.cnblogs.com/yuz ...

  4. Linux 自动化部署

    1.pexpect Pexpect 是 Don Libes 的 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Py ...

  5. ezdpl Linux自动化部署实战

    最近把ezdpl在生产环境中实施了,再加上这段时间的一些修改,一并介绍一下. 再次申明: ezdpl不是开箱即用的,需要根据自己的应用环境定制.对初学者来说使用起来反倒困难更多.风险更大. 它不是一个 ...

  6. Kickstart + http Linux自动化部署服务端

    设备需要开启Network Boot功能.具体PXE技术就另外提,本文主要讲解配置. 在搭建该服务器之前需要关闭SELinux和iptables不然可能dhcp服务都起不来,客户端收不到IP地址,无法 ...

  7. jenkins+springboot+svn linux 自动化部署

    需要下载 publish over ssh 插件(远程上传项目到服务器) Maven Integration plugin 插件(构建maven项目) 然后将各种配置配置好 最终项目在服务器上的路径是 ...

  8. 【Linux】自动化部署可信任登录

    Linux信任登录,免密码登录的脚本: 需要安装expect,可以yum也可以编译安装,编译后注意脚本中的expect路径. rsa.exp #!/usr/bin/expect ########### ...

  9. Linux自动化运维部署+运维

    自动化部署及配置(Cobbler/Kickstart) 红帽发布的网络安装服务器套件 Cobbler可以说是一大Linux装机利器,可以快速的建立网络安装环境,据说比Kickstart还要好用. 分布 ...

随机推荐

  1. 学习Acegi应用到实际项目中(11)- 切换用户

    在某些应用场合中,可能需要用到切换用户的功能,从而以另一用户的身份进行相关操作.这一点类似于在Linux系统中,用su命令切换到另一用户进行相关操作. 既然实际应用中有这种场合,那么我们就有必要对其进 ...

  2. apt-get update 问题

    W: 仓库 “cdrom://Ubuntu 16.04.1 LTS _Xenial Xerus_ - Release amd64 (20160719) xenial Release” 没有 Relea ...

  3. Notes : <Hands-on ML with Sklearn & TF> Chapter 7

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  4. MySQL数据库(四)多表查询

    两张假设有两张表格A和B,把表格当作一个集合,那么表格中的记录就是集合中的一个元素. 两张表格如下: TableA:TableB: 2.1 内连接(只有一种场景) inner join 或者join( ...

  5. Leetcode11 Container With Most Water 解题思路 (Python)

    今天开始第一天记录刷题,本人编程小白,如果有写的不对.或者能更完善的地方请个位批评指正! 准备按tag刷,第一个tag是array: 这个是array的第一道题:11. Container With ...

  6. UDF函数 解码url

    背景 URL 的编码 是ASCII十六进制格式.数仓接受到前端上报的URL,要对URL字段解码. 如要将 https"Fmybook.do%3Frequest_type%3D%26type% ...

  7. 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)

    [.NET Core项目实战-统一认证平台]开篇及目录索引 本篇将介绍如何扩展Ocelot中间件实现自定义网关,并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能,内容也是从实际设计出发 ...

  8. 自定义滚动条样式(layui.v1)

    来源于 layui css 代码 ::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-button, ::-w ...

  9. Spring Boot 2 - 初识与新工程的创建

    Spring Boot的由来 相信大家都听说过Spring框架. Spring从诞生到现在一直是流行的J2EE开发框架. 随着Spring的发展,它的功能越来越强大,随之而来的缺点也越来越明显,以至于 ...

  10. 谈谈Java中的代理模式

    首先来看一下代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用, 其特征是代理类与 ...