1

我有一个 Cruise Control (v1.5.726) 安装,各种项目正在多台机器上构建。每台机器构建它配置为运行的任何项目,如果构建成功,则将输出的副本放置在 Web 服务器上,以便内部访问。我有一个包含“黄金”(已知工作)CC.net 安装的 SVN 分支,所以当我想添加另一台构建机器时,我需要做的就是将 SVN 分支同步到该机器并创建一个调用的批处理文件ccnet.exe,然后引用 .ccnet.config 文件,该文件包含每台机器负责构建的项目列表。

昨天我想出了如何将 CC.net 设置为 Windows 服务,但我似乎无法像使用 ccnet.exe 那样将任何参数传递给 ccservice.exe。我能够让 ccservice.exe 加载机器特定配置的唯一方法是在 ccservice.exe.config 文件中添加一行,该文件引用回机器配置。例如

<add key="ccnet.config" value="C:\CruiseControl\Config\Machine-Name.ccnet.config"/>

现在,考虑到我有多个构建机器并且配置文件是通过 SVN 存储的这一事实 - 将 ccservice.exe.config 提交回 SVN 会导致问题,因为它引用了单个机器的配置文件。

我的问题是 - 是否有某种方法可以将命令行参数(或某种方法告诉 ccservice 要查看哪个配置文件)传递给 ccservice.exe 其他,而不是通过 ccservice.exe.config 文件?我试过 ccservice.exe /? 但我只看到弹出消息说您必须使用 IntstallUtil.exe 将 CC.net 安装为服务。

我正在使用 CC.net 版本:1.5.7256.1 构建机器正在运行 Windows 7 Enterprise。英特尔酷睿 i7-2600K CPU。16GB 内存。

如果您需要任何进一步的信息,请告诉我。
谢谢里奇

4

2 回答 2

1

你可以使用环境变量吗?COMPUTERNAME已经在那里了。

<add key="ccnet.config" value="C:\CruiseControl\Config\%COMPUTERNAME%.ccnet.config"/>

也许它会扩展变量,我没有尝试过。

于 2012-07-16T16:01:13.203 回答
0

您可以尝试的一件事是在 ccservice.exe.config 之外的文件中使用此特定值。请参阅此问题以供参考:appsettings 文件属性是否覆盖 app.config 中的内容?

我认为您的 ccservice.exe.config 看起来像

....
<appSettings file="local.config">
  <add key="service.name" value="CCService" />
  ... other existing keys in appSettings ...
<appSettings>

然后 local.config 看起来像

<appSettings>
  <add key="ccnet.config" value="C:\path\to\machine-name.ccnet.config" />
</appSettings>

在设置新机器时这样做,您需要创建 local.config 和 machine-name.ccnet.config,但您的 ccservice.exe.config 不需要在机器之间更改。

于 2012-08-01T15:14:09.057 回答