阿里、蚂蚁、晟腾、中科加禾精彩分享 AI 基础设施洞见,现购票可享受 9 折优惠 |AICon 了解详情
写点什么

用 psake 来简化自动化脚本的构建

  • 2009-10-20
  • 本文字数:1257 字

    阅读完需:约 4 分钟

psake 是一个集成了 PowerShell 的用来创建自动化脚本的工具,其 2.01 版本集成了 PowerShell2.0 。Ayende Rahien 正使用它来创建 Rhino 工具。psake 项目的拥有者 James Kovacs 向我们解释了该工具最新版本的改进之处:

psake 最新版本通过使用构建脚本中的 PowerShell 语法,避免了与可执行的 XML 文件相关的尖括号标识 (<>)。psake 借鉴了 rake(即 Ruby 中的 make) 和 bake(即 Boo 中的 make) 的语法结构,但它更容易用来编写脚本,因为它还利用了使用者已知的命令行编程知识。

除了兼容 PS2.0 之外,psake2.01 还被改写成了一个 PS 模块,这样做的主要好处是:

  1. 所创建编译的脚本不需要知道 psake 安装在哪里,它们只需要调用 Invoke-psake 方法就可以执行了;
  2. 封装性:不再需要全局变量,因为除了显示地导出之外,对于某个模块来说它们可以被视为私有的;
  3. 如果需要的话,可以卸载模块来除去内存中所有的代码和变量。

2.01 版本的其他改进之处还有:

  1. 采用了与之前不同的编码风格;
  2. 使用 Try/Catch 代替"Trap"语句;
  3. 除去了"exec"函数;
  4. 现在使用者可以为一项任务定义前置和后置动作;
  5. 现在使用者可以定义任务名称的格式;
  6. 现在使用者可以定义一个"TaskSetup"方法,此方法将在每个任务开始之前被执行(从 NUnit 中借鉴而来);
  7. 现在使用者可以定义一个"TaskTearDown"方法,此方法将在每个任务结束之后被执行(也是从 NUnit 中借鉴而来);
  8. 创建了名为"psake_buildSucceeded"的全局变量,当编译成功后此变量将被设置为 true。脚本可以通过检查此变量,来判断是否编译成功;
  9. 在 Run-Psake 时还加入了一个"$noexit"开关变量,当此开关打开时任何函数执行结束前都不会调用 exit() 方法,这样使用者就可以在 PS 窗口不被关闭的条件下,通过命令行来测试你所创建的脚本了。(此处默认的操作是,当一个脚本运行失败时,它将会调用 exit(1) 方法,这样在调用的代码中就可以判定此脚本是成功或失败了)
  10. psake-buildTester.ps1 脚本必须做一些小改动才能调用 Invoke-psake 方法.
  11. 在.\examples 目录中加入了更多的示例来演示后置条件(POST conditions),前置和后置动作(PRE and POST Actions)以及其他(新特性)的用法。

Ayende Rahien 写了关于使用 psake 来创建他的 Rhino 工具 psake to build his Rhino Tools 的相关文章。这个项目起初使用了一种十分复杂的基于 NAnt 的编写工具,仅仅是最初的尝试,开发者就写出了海量的代码,这使得他们感到惊恐万分。经过对使用 Rake 或 Bake 来开发的可行性评估后,Rahien 转向使用 psake 并仅用了 50 行代码就解决了工作。

psake 可以在 GitHub 网站的 MIT License 页面下载.

查看英文原文: Simple Build Automation with psake


译者介绍:崇桦,澳大利亚悉尼大学计算机科学与通信技术学士,多年的海外留学工作经历。现于 iConnect China 任职 Team Leader,带领团队进行微软产品的开发与测试工作。有丰富的.NET 产品设计,软件开发经验,对项目管理,敏捷开发的有相当的研究。InfoQ 中文站内容团队,尤其是架构、SOA 和Ruby 社区需要您的参与,有意者请邮件至 editors【AT】cn.infoq.com

2009-10-20 01:331659

评论

发布
暂无评论
发现更多内容

阿里云 Hologres助力好未来网校实时数仓降本增效

阿里云大数据AI技术

数据分析 数据治理 数据安全

如何设计一组会出现死锁(Deadlock)的ABAP程序

Jerry Wang

操作系统 SAP abap 8月月更 ABAP死锁

开源一夏 |卷王必备学习的MyBatis-Plus用法~

叶秋学长

开源 mybaits 8月月更

兴盛优选:时序数据如何高效处理?

TDengine

数据库 tdengine 时序数据库

AS北京站如约而至!发布参会感想有机会获得官方周边奖励

InfoQ写作社区官方

热门活动 ArchSummit

SAP ABAP 里存在 Java List 这种集合工具类么?CL_OBJECT_COLLECTION 了解一下

Jerry Wang

设计模式 迭代器模式 SAP abap 8月月更

TiSpark 原理之下推丨TiDB 工具分享

PingCAP

TiDB

知乎杀疯了,疯传2022Java面试八股文解析+大厂面经

程序知音

Java 程序员 java面试 后端技术 Java面试八股文

如何解决 “主节点故障恢复的自动化” 问题?

八点半的Bruce.D

有了阿里这5份Java架构师手册,学习起来轻松多了!

冉然学Java

Java 算法 java面试 性能调优实战 并发架构设计思想

从滴滴被罚款事件思考企业数据治理问题

墨天轮

大数据 滴滴 数据治理 数据安全

基于 TLS 1.3的百度安全通信协议 bdtls 介绍

百度Geek说

安全

运动健康服务场景事件订阅,让应用推送“更懂用户”

HMS Core

分析 Flink 任务如何超过 YARN 容器内存限制

移动云大数据

Flink 平台

开源一夏 | 使用 CSS 的水波文本动画(免费代码)

海拥(haiyong.site)

开源 8月月更

易观分析:银行零售业务实现智能化营销还需突破七大关键点

易观分析

零售 银行 智能化营销

面试官:Redis Zset的实现为什么用跳表,而不用平衡树?

程序员小毕

Java redis 程序员 面试 后端

突破次元壁垒,让身边的玩偶手办在屏幕上动起来!

HMS Core

从普通程序员晋升到架构师需要掌握哪些技术,这份37W字Java高性能架构用13个章节彻底讲明白了

Java永远的神

Java 程序员 面试 程序人生 架构师

使用脚手架 快速开发 React组件 npm包 (基于TSDX)

HullQin

CSS JavaScript html 前端 8月月更

阿里架构师首发:80W字微服务架构手册GitHub上杀疯了

冉然学Java

Java 编程 程序员 架构 微服务

【设计模式-前端】单例模式深刻理解和实现

归子莫

前端 设计模式 js 8月月更

巧用自定义函数,文本控件秒变高速缓存

明道云

Go-Excelize API源码阅读(七)—— CopySheet(from, to int)

Regan Yue

开源 源码阅读 8月日更 8月月更

python工程化配置方式

芥末拌个饭吧

8月月更

深度解析佛萨奇,Forsage魔豹联盟系统开发方案(源码部署)

开发微hkkf5566

MySQL之JDBC编程增删改查

了不起的程序猿

Java MySQL JAVA开发 java程序员

直播预告 | Authing 如何打造云原生 SaaS 产品架构?

Authing

Netty进阶 -- WebSocket长连接开发

Bug终结者

8月月更

7月月更开奖啦!快来看看你中奖了吗?

InfoQ写作社区官方

热门活动 7月月更

CCF大会腾源会专场即将召开,聚焦基础软件与开发语言未来发展

腾源会

开源 腾源会

用psake来简化自动化脚本的构建_.NET_Abel Avram_InfoQ精选文章