zoukankan      html  css  js  c++  java
  • Linux自动化部署尝试

    Linux自动化部署尝试

     

    最近做一个项目临近测试,购买的是阿里云的服务器,每次部署都是手动打包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 2 + 2`
    # 使用$引用变量
    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+
  • 相关阅读:
    POJ 2018 二分
    873. Length of Longest Fibonacci Subsequence
    847. Shortest Path Visiting All Nodes
    838. Push Dominoes
    813. Largest Sum of Averages
    801. Minimum Swaps To Make Sequences Increasing
    790. Domino and Tromino Tiling
    764. Largest Plus Sign
    Weekly Contest 128
    746. Min Cost Climbing Stairs
  • 原文地址:https://www.cnblogs.com/zikai/p/8257346.html
Copyright © 2011-2022 走看看