简单的项目上线shell脚本

场景描述 :在项目开发过程中往往会有很多的配置文件需要根据环境的不同进行修改。比如我们在java开发中比较常用.properties配置文件。在代码上库时这种与环境配置相关的配置项往往用通配符标识,在不同的环境下需要根据当前的环境进行修改配置。在项目比较小,配置项比较少的时候,环境变更时为了方便大多采用手动打开这些配置文件进行修改。但是配置项比较多的时候会比较麻烦,而且容易修改错,为了简化环境变更的流程,我们可以通过编写shell脚本,将打包好的项目通过shell脚本进行解压,自动配置。
场景模拟:
1. 假设我们通过gradle或者maven打的javaweb项目的包为education_server.war,该包中含有一个与环境相关的配置文件为WEB-INF/classes/config/appConfig.properties
   appConfig.properties内容如下所示:
 
  
  1. #database config
  2. db.name=#{DBNAME}
  3. db.user.name=#{DBUSERNAME}
  4. db.user.passwd=#{DBUSERPASSWD}
  5. #resource save path
  6. video.path=#{VIDEOPATH}
  7. image.path=#{IMAGEPATH}
注意:.properties文件中注释以#号开头
2.创建一个.ini文件统一进行所有配置文件中配置项的配置
  appConfig.ini文件内容如下所示:
 
   
  1. database config
  2. db_name=educate_db
  3. db_user_name=jwang
  4. db_user_passwd=jwang
  5. resource path config
  6. video_path=/home/jwang/video
  7. image_path=/home/jwang/image
注意:该ini文件包含项目中所有需要配置的配置项,目前就以一个配置文件appConfig.properties为例。ini文件是一个纯文本文件,该文件注释以逗号开头。
3.编写shell脚本将项目包解压并将ini文件中的配置信息替换到项目的各个对应的配置项中
   appInstall.sh文件内容如下所示:
 
   
  1. #!/bin/bash
  2. #program:
  3. # educate_server install script
  4. #history
  5. #data:2017/11/06 author:jwang First release
  6. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/loacl/sbin:~/bin
  7. export PATH
  8. echo ################# Install start ##################
  9. _pwd=`pwd`
  10. echo $_pwd
  11. program="educate_server"
  12. db_name="`cat $_pwd/appConfig.ini | grep 'db_name' | awk -F "db_name=" '{print $2}'`"
  13. db_user_name="`cat $_pwd/appConfig.ini | grep 'db_user_name' | awk -F "db_user_name=" '{print $2}'`"
  14. db_user_passwd="`cat $_pwd/appConfig.ini | grep 'db_user_passwd' | awk -F "db_user_passwd=" '{print $2}'`"
  15. video_path="`cat $_pwd/appConfig.ini | grep 'video_path' | awk -F "video_path=" '{print $2}'`"
  16. image_path="`cat $_pwd/appConfig.ini | grep 'image_path' | awk -F "image_path=" '{print $2}'`"
  17. function unzip_package
  18. {
  19. echo "begin unzip package......"
  20. unzip -o $program.war -d $program
  21. chown -R jwang:jwang $program/
  22. echo "unzip package end......"
  23. }
  24. function config_params
  25. {
  26. echo "begin config param......"
  27. sed -i "s|#{DBNAME}|${db_name}|" $_pwd/$program/WEM-INF/classes/config/appConfig.properties
  28. sed -i "s|#{DBUSERNAME}|${db_user_name}|" $_pwd/$program/WEM-INF/classes/config/appConfig.properties
  29. sed -i "s|#{DBUSERPASSWD}|${db_user_passwd}|" $_pwd/$program/WEM-INF/classes/config/appConfig.properties
  30. sed -i "s|#{VIDEOPATH}|${video_path}|" $_pwd/$program/WEM-INF/classes/config/appConfig.properties
  31. sed -i "s|#{IMAGEPATH}|${image_path}|" $_pwd/$program/WEM-INF/classes/config/appConfig.properties
  32. echo "config param end......"
  33. }
  34. unzip_package
  35. config_params
  36. echo ################## Install end ####################
  37. exit 0
4.调试运行
(1)如下图所示将我们编辑好的ini文件,sh文件以及war包放到同一目录下
   
(2)执行脚本文件./appInstall.sh
   
(3)查看解压后的war文件如下所示
   
(4)查看配置后的appConfig.properties文件
   
特别提醒:
大多时候编写shell和ini文件都是在windows系统通过可视化的编辑工具进行编辑的,通过这种方式编写的shell和ini文件多数情况会存在格式问题,针对这种问题在确保编码一致的情况下可在运行脚本之前执行dos2linux命令进行转换,转换之后若是还是不能执行成功则检查配置项和脚本文件,编辑的时候很容易因为不细心而写错。



猜你喜欢

转载自blog.csdn.net/m0_38045882/article/details/78462870