QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

用 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:331809

评论

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

使用show effective grants查看权限

GreatSQL

greatsql greatsql社区

基于Hologres向量计算与大模型免费定制专属聊天机器人

阿里云大数据AI技术

人工智能 hologres

全彩LED显示屏品质由什么决定

Dylan

媒体 广告 科技 LED LED显示屏

Java基础之IO流

java易二三

Java 编程 程序员 io 计算机

基于因果关系知识库的因果事件图谱构建

汀丶人工智能

人工智能 自然语言处理 知识图谱

从电商指标洞察到运营归因,只需几句话?AI 数智助理准备好了!

Kyligence

数据分析 数智助理

Docker学习路线11:Docker命令行

小万哥

Java c++ Python Go Docker

内部Java内存模型与硬件层面内存模型的关系是什么?

java易二三

Java 编程 程序员 硬件 计算机

飞桨大模型分布式训练技术

Baidu AICLOUD

飞桨 百度百舸 AI 大底座

火山引擎DataLeap的Data Catalog系统公有云实践 (上)

字节跳动数据平台

大数据 数据中台 数据治理 数据安全 企业号 7 月 PK 榜

Java中的JDBC的使用方法有哪些?

java易二三

Java 编程 程序员 计算机

REST API 版本控制:高效管理

Apifox

程序员 RESTful API REST API API 测试

中文人物关系知识图谱(含码源):中文人物关系图谱构建、数据回标、基于远程监督人物关系抽取、知识问答等应用.

汀丶人工智能

人工智能 nlp 知识图谱 智能问答

广东省《5A物理抗菌纺织品》团体标准颁布

Geek_2d6073

提示工程101|与 AI 交谈的技巧和艺术

SEAL安全

人工智能 AI LLM 提示工程 企业号 7 月 PK 榜

高性能、高扩展、高稳定:解读 EasyMR 大数据组件自定义可扩展能力

袋鼠云数栈

大数据 大数据组件

浅聊一下大模型

鲸品堂

大模型训练 大模型

年内实现全面自动驾驶?快来恶补一下自动驾驶技术吧!

博文视点Broadview

自主AI代理:未来的生产力引擎

互联网工科生

人工智能 AI代理

Coral Finance 将为 Zepoch 节点空投,Nautilus生态空投季开启

西柚子

Coral Finance 将为 Zepoch 节点空投,Nautilus生态空投季开启

BlockChain先知

我身边IT业40岁的老家伙们都去哪儿了?

高端章鱼哥

程序员 IT 大牛

IPQ9574 VS IPQ6010 VS IPQ5018 VS IPQ4019-Understand the performance of different chips

wifi6-yiyi

wifi WiFi7 wifi5,wifi6

详解!视频直播源码布谷科技平台搭建开发:录制功能

山东布谷科技

软件开发 视频直播 源码搭建 短视频直播源码 视频录制

数字化转型与架构-规划篇|殊途同归的解决方案框架

数字随行

数字化转型

TypeScript 玩转类型操作之字符串处理能力

小乌龟快跑

JavaScript typescript 类型推断

Java Web应用开发案例|使用监听器统计Web站点的在线用户数

TiAmo

Java web 用户统计 开发案例

免费SAFe大规模敏捷管理工具

顿顿顿

Scrum #敏捷开发 敏捷开发管理工具 SAFe框架

2023开源数据库排行榜发布,“新晋黑马”瀚高IvorySQL跻身三十强

Geek_2d6073

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