• PowerShell自动化脚本生成项目的RPM包


     

     

    背景:在做关于扩展PowerShell命令的项目过程中,关于此项目的流程大致是:功能分析->代码编写->进行本地测试->远程连接到linux系统生成rpm包->发布rpm包->等待测试。进行本地测试之后的步骤每次都需要执行某些命令,并且当版本迭代时还要修改配置文件,整个流程下来在不出错的情况下也需要半个小时左右,要是中间出现人为配置的不当,还需要重来。所以想着不如写个脚本来把整个流程跑一遍,这样每次只需要执行一个文件就OK。

    需要的环境:vSphere Client(可选),Window 7+,powershell 3.0, Git,VS2012, putty,pscp,Maven

              首先安装项目需要的环境,由于这个脚本和环境也可能提供给其他人使用,所以随便找一个电脑配置所需要的环境,在这里公司的虚拟机都放在一台服务器上的,所以利用VSphere Client连接服务器在该服务器上创建虚拟机安装windows7+系统。

      • PowerShell环境:我所安装的windows7系统中powershell版本是2.0,需要升级到3.0+。
      1. 安装Microsoft .NET Framework 4.0的完整安装版本,或者安装Microsoft .NET Framework 4.5的完整安装版本
      2. 安装Windows Management Framework 3.0的6.1内核版本安装文件,如果服务器本身已经安装了高版本的Windows Framework,比如4.5等,直接安装Windows Management Framework 3.0
      3. 重启电脑。利用Get-Host | Select-Object Version命令查看版本是否升级成功。详情请参考链接:如何升级Powershell
      • Git 使用的版本是Git-2.13.0-64-bit,下载后双击安装即可。利用git --version验证如下

      • Maven安装,MVN官网,下载最新版本,解压后配置Path环境变量即可,验证安装成功在cmd中输入mvn -v 

     

     

    思路:

      1. 从Git中Clone下Code下项目,如果项目文件已存在就Pull下最新的代码。此脚本放在一个.ps1文件中
      2. Build项目生成项目工具包zip文件。
      3. 将工具包安装到本地,集成到PowerShell命令中
      4. 创建Spec文件,并将工具包zip文件和Spec文件利用pscp.exe上传到linux系统中,在本机利用putty.exe远程执行命令生成rpm
      5. 利用pscp.exe工具从linux下载rpm到本机
      6. 利用Maven工具发布rpm包到指定服务器中。
      7. 主要包含如下几个方法

     

     流程图如下:

     

     

    注意事项:

      • 需要改变powershell执行策略,允许执行脚本。命令为Set-ExecutionPolicy RemoteSigned
      • 由于在ps1脚本文件中有些步骤需要生成特殊的文件,在linux上执行,所以要将文件以utf-8格式保存,同时由于回车和换行在不同操作系统中不一样,所以需要进行特殊的处理。由于powershell自带的out-file方法,会把文件转换为utf8-bom的形式所以需要利用New-Object System.Text.UTF8Encoding($false)形式进行文件转换并保存。

    涉及到的知识简介:

    •  Windows Power Shell:是一种命令行外壳程序(在操作系统之上提供的一套命令解释程序)和脚本环境,使命令行用户和脚本编写者可以利用.NET Framework的强大功能。
    • 在安装配置apache服务器时,遇到了几个错误。
        1. 首先从官网下载apach。http://www.apache.org/选择Download,在出现的页面中点击第一个链接,会出现文件列表,找到httpd/->Current Releases->找到Files for Microsoft Windows->最后选择第三方网站下载即可。详情参考:http://www.cnblogs.com/yerenyuan/p/5460336.html
        2. 利用"路径Apacheinhttpd.exe" -k install -n apache命令安装时,会显示某些错误,不过服务已经存在windows服务列表中,只是在启动服务时会报错:无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题。该错误可以下载vc++2015 并安装 ,链接:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=48145
        3. 安装完成后,重新启动,显示Invalid command 'Order'错误,此时在httpd文件中找到#LoadModule access_compat_module modules/mod_access_compat.so,去掉#即可,重新启动服务
        4. 卸载apache命令为:sc delete apache
    • 搭建apache文件服务器,参考http://limingwang.blog.51cto.com/2739029/1630107/。修改apache配置文件httpd,首先 ServerName IP:80 ServerName 去掉#注释,DocumentRoot "d:/myfile" DocumentRoot 改为你要开发给用户的目录。另外将其他的Diectory节点注释掉,修改Directory节点如下:
     <Directory />
            Options FollowSymLinks  
    添加Indexes即Options Indexes FollowSymLinks目的:解决在浏览器中运行出现在You don't have permission to access / on this server.  
            AllowOverride None
            Order deny,allow
            deny from all deny 改为allow,即允许任何访问
    </Directory>
    • 在文本处理中,通过使用NotePad++设置View->shwo symbol->shwo all character,会显示文本对于换行的处理方式。CR,LF是不同操作系统上使用的换行符。区别在于:CR用符号 表示,LF使用 符号表示。在windows平台上换行在文本文件中使用CRLF两个字节表示,而UNIX和苹果平台换行则使用CR或LF一个字节表示。参考:http://www.cnblogs.com/jiji262/p/3410515.html所以一个文件在传输到不同平台时可能在执行过程中出错。需要统一转换一下。
    • 配置maven服务器,用以maven deploy。

     

  • 相关阅读:
    洛谷 P2421 [NOI2002]荒岛野人
    POJ 2115 C Looooops
    POJ 3292 Semi-prime H-numbers
    [网络流24题]负载平衡问题(费用流)
    [网络流24题]骑士共存问题
    POJ 3281 Dining
    洛谷 1306斐波那契公约数
    ELK+Filebeat 安装配置入门
    一个JS内存泄露实例分析
    Node.js 事件循环
  • 原文地址:https://www.cnblogs.com/mjys-gh/p/7118244.html
Copyright © 2020-2023  润新知