【问题标题】:Ideas on building in automation in an application在应用程序中构建自动化的想法
【发布时间】:2010-11-20 15:01:32
【问题描述】:

我目前正在开发一个 .NET 内部测试工具。该工具目前是基于 GUI 的。我希望该工具能够做的一件事是在命令行模式下运行。通过这种方式,我们可以以自动化的方式运行它,并让它每天处理一些数据。

我们开始在其中加入命令行模式,但我对此并不满意。感觉很笨拙,只是被加上了。我正在寻找一个更优雅的解决方案,随着我们为应用程序提供更多功能,它可以相对轻松地扩展。

我的一个想法是模仿 PowerShell 和 Exchange Server。 Exchange 服务器显然构建了大约 800 个 cmdlet,然后使用它们在其上构建用户界面。这样,他们的 UI 可以做的所有事情,您都可以通过使用这些 cmdlet 的脚本来完成。老实说,我真的很喜欢这样。当它们添加更多功能时,它很优雅并且可以自然地扩展。

你们对这样的事情有什么想法?有人尝试过我提到的 PowerShell 路线吗?分享你的意见。

谢谢

【问题讨论】:

    标签: .net powershell automation


    【解决方案1】:

    基于通用 API 构建是一个好主意。然后 API 方法成为第一类公民,在 UI 层或控制台上同样有效。

    但是,您需要权衡这将使用多少,以及您想走多远。如果您有大量受众或大量使用,那么编写一个 powershell 提供程序非常好,但对于较小的受众来说可能有点矫枉过正。

    一个简单的解决方案是为控制台应用程序和 UI 都可以引用的所有业务逻辑创建一个共享类。在 UI 项目或控制台项目中不要放任何实际的逻辑,那么你只需要编写一次。这是一种简单的扩展方式,而且不会让人觉得笨拙。

    【讨论】:

      【解决方案2】:

      PowerShell 提供了一个非常健壮的框架,具有 CLI 界面和 GUI。很棒的是,这两个截然不同的接口可以共享相同的代码!

      我以前做过这个,我可以告诉你这次经历很愉快。关于 Cmdlet 框架,我不能说太多正面的话。整个系统的架构相当精致,很有目的性。

      由于它与您的问题有关,我认为始终归结为为正确的工作选择正确的工具。这一点不容忽视,因为我认为我们作为软件工程师往往总是想为我们当前的问题尝试最新最好的方法。这是让我们的工作变得有趣的一部分!鉴于我对您的项目的了解有限,PowerShell 似乎确实可以满足设计选择的要求。但是,我相信您知道,重写 GUI 以使用 PowerShell 管道很可能会改变现有应用程序的大部分内容(如果预算允许,这可能是一件好事)。

      总体而言,如果您希望在应用程序中使用可编写脚本的界面以及 GUI 前端,以及真正的代码共享的额外好处……PowerShell 是一个不错的选择。此外,如果您最终选择这条路线,您甚至可以查看 psake 以帮助您实现自动化。

      【讨论】:

        【解决方案3】:

        Powershell 脚本允许您利用 .NET 库并编写几乎与 .NET 代码本身一样强大的脚本。您可以执行许多强大的操作,例如调用外部 DLL、使用 System.IO、System.Net 等 .NET 命名空间、运行进程和拦截输出、调用 Web 服务等。可能性是无穷无尽的。在这里,我将向您展示一个 Powershell 脚本,它可以帮助您进行网站的日常部署。每天,我们都会对 Web 项目进行更改,这些项目需要部署到开发服务器上,有时会部署在 beta 服务器上,最后会部署到生产服务器上。使用此脚本,您可以在每次将网站上传到某个服务器时,自动执行您在部署包上一次又一次地执行的所有手动工作。在本地开发服务器上传、测试版发布和最终生产服务器发布期间,我们每天都在 Pageflakes 中使用此脚本。我们所做的就是运行脚本,转到服务器,然后在 web 文件夹中提取一个 zip 文件,仅此而已。新版本在两分钟内完成部署,完全无需任何人工操作,完全消除了部署过程中出现人为错误的可能性。 自动化部署

        我已经编写了一个 Powershell 脚本为您执行以下操作:

        * Maintains different configuration information for different deployments. For example, different connection strings for development servers and production servers (one or more production servers).
        * Creates a deployment folder using the deployment date, time, and version so that you have a separate folder for each deployment and can keep track of things deployed on a day, e.g., 20061214-1.
        * Copies only the change files and some predefined files to the deployment folder. So, you don't deploy the whole website every day.
        * Copies the web.config and customizes the <appSettings>, <connectionString>, <assemblies> etc., as per the deployment configuration. For example, you can have different connection strings for different servers.
        * Updates all JavaScript files with a version number so that in every deployment, a new file gets downloaded by client browsers.
        * Updates default.aspx automatically with the modified script file name.
        * Compresses all JavaScript files that gets deployed.
        * Compresses all static HTML files using an Absolute HTML Optimizer.
        * Creates a zip file which contains the deployment package.
        * FTP the zip file to a target server.
        

        部署脚本运行后,您只需在服务器上解压 zip 文件即可!

        通过更改脚本末尾的 FTP 部分,您可以轻松地 FTP 修改后的文件,而不是仅复制 zip 文件。

        【讨论】:

        • 任何关于它的完整示例脚本?如果你可以分享它
        【解决方案4】:

        unix/linux shell 的优点之一是能够将小程序链接在一起以构建功能。也许您可以将核心功能构建为守护程序/服务,并使用命令行或 GUI 与其聊天(如未知的建议)。

        【讨论】:

          猜你喜欢
          • 2010-10-08
          • 2013-04-01
          • 2016-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-02
          • 2021-12-01
          相关资源
          最近更新 更多