我的任务是使用CruiseControl.NET审核构建服务器。其中有不少,我想知道是否有办法以编程方式/自动编译每个项目的列表。
有办法做到这一点吗?
我的第一直觉是使用PowerShell(v2.0),但我不知道如何开始编写满足我需要的脚本。我应该使用PowerShell还是其他方法?那些其他方法会是什么?
答案 0 :(得分:4)
我会使用Thoughtworks.CruiseControl.Remote.dll并将其加载到powershell
创建ICruiseManagerFactory managerFactory;
然后您可以遍历您拥有的服务器列表并为服务器创建Uri,如:
ServerUri = @"tcp://" + Server + ":" + Port + @"/CruiseManager.rem"
然后使用以下命令从该服务器获取项目和状态列表:
ProjectStatus[] currentStatuses = managerFactory.GetCruiseManager(ServerUri).GetProjectStatus();
然后遍历列表:
foreach (ProjectStatus projectStatus in currentStatuses)
{
string name = projectStatus.Name;
string status = projectStatus.Status;
}
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您可以访问ccnet.config文件,您可以:
([xml](Get-Content ccnet.config)).cruisecontrol.project | Select name, artifactDirectory # or whatever
答案 3 :(得分:0)
感谢大家的回答。 :-)我没有提到的一件事是所有的构建服务器都有相同的CruiseControl.NET安装结构,安装目录可以通过文件夹共享直接访问。
总而言之,这是我在特定构建服务器上创建项目列表的脚本:
function Get-Projects
{
param([string]$BuildServer = $(Throw "You must specify the name of the build server containing the projects you want to list"))
$BuildServer = $BuildServer.ToUpper()
$ConfigFilePath = [string]"\\$BuildServer\CruiseControl.NET\server\ccnet.config"
$ValidPath = Test-Path -Path "$ConfigFilePath"
if (!$ValidPath)
{
$InvalidPathErrorMessage = [string]"Path $ConfigFilePath does not exist!"
Write-Host $InvalidPathErrorMessage
$InvalidPathErrorMessage
return
}
$ConfigXml = [xml](Get-Content $ConfigFilePath)
$Projects = @($ConfigXml.SelectNodes("cruisecontrol/project"))
if (!$Projects)
{
$ErrorMessage = [string]"No projects on $BuildServer!"
Write-Host $ErrorMessage
$ErrorMessage
return
}
$Projects
}
然后,假设您的PowerShell会话中可以访问此脚本,您只需选择所需的数据,就像Jaykul建议的那样:
Get-Projects <BuildServer> | Select-Object name, queue, category | Sort-Object category
我希望这会有所帮助!