将程序集注册到多台远程服务器的全局程序集缓存中的一个小小的解决方案

某个项目中在部署时,需要将程序集注册到服务器的GAC中,一直以来都是手工处理的,但是随着程序集数量的增加和服务器数量的增加,手工操作就会显得特别繁琐和低效。

所以我决定写一些自动化脚本来摆脱这种重复体力劳动。既可以节省时间,又能避免纰漏,还能让自己保持心情畅快。

如果你也需要,请点击这里下载整个解决方案,虽然本文的标题很长,但解决方案本身其实很小。

然后我建议你读一读下面的内容,它有助于你理解这个解决方案是如何运作的,以及可以如何扩展。

整个解决方案的目录结构如下所示:

-Assemblies\
-PsExec.exe
-Deploy_on_single.bat
-Deploy_to_single.bat
-Deploy_to_all.bat

先来解释一下各个文件(夹)的作用:

  • Assemblies文件夹:用来存放需要注册的程序集,会被复制到目标服务器然后注册。
  • PsExec.exe:整个解决方案的灵魂,它是微软提供的Sysinternals Suite中的PsTools中的一员,简单来说它的功能就是在远程服务器上执行命令,你可以在这里下载到它:http://technet.microsoft.com/en-us/Sysinternals/bb897553.aspx
  • Deploy_on_single.bat:负责在目标服务器上注册程序集,它会随同程序集一起复制到目标服务器。
  • Deploy_to_single.bat:负责将程序集和Deploy_on_single.bat复制到目标服务器,然后通过PsExec在目标服务器上执行Deploy_on_single.bat。
  • Deploy_to_all.bat:负责将配置的目标服务器逐个传递给Deploy_to_single.bat来执行,它是整个解决方案中唯一需要我们手工运行的文件。

要想让整个解决方案工作起来,我们还需要一点点配置:

  1. 编辑Deploy_to_all.bat,配置目标服务器列表,方法很简单,每个服务器对应类似如下格式的一行命令:
    call %deploy% [SERVERNAME]
    请将[SERVERNAME]修改为正确的服务器名称。
  2. 在所有目标服务器上配置一个共享文件夹,用来复制程序集以及相关文件,所有的共享文件夹都要用同一个名称。
  3. 编辑Deploy_to_single.bat,修改user、pw和sharedFolder三个变量的值,它们分别对应于目标服务器的管理员用户名、密码以及共享文件夹名称。
  4. 把需要注册的程序集复制到Assemblies文件夹中。

至此,你就可以运行Deploy_to_all.bat来向配置好的目标服务器注册程序集了。

我想你已经发现了这个解决方案依赖了许多假设,譬如所有目标服务器的共享文件夹必须同名,所有目标服务器的管理员也必须有相同的用户名和密码;再或许,你想要配置目标服务器上的GACUtil的位置,你想要执行注册程序集之外的事情等等……

没有关系,根据你的实际情况进行修改吧,服务器名称是以参数的形式传递给Deploy_to_single.bat的,你可以同时传递共享文件夹的名称,管理员凭据等等,这样就能做到每个服务器都有不同的配置了;Deploy_on_single.bat是真正在目标服务器上执行的批处理,如果你想要更改GACUtil的路径或者还想干什么事情的话,尽管找它吧。

希望它能帮助你摆脱重复体力劳动,或者帮助你想到了摆脱重复体力劳动的其他方法,如果你想到了,或者已经有了,别忘了跟我分享一下哦!

发表评论

电子邮件地址不会被公开。 必填项已用*标注