使用PowerShell在CCNet Server上创建所有项目的列表

时间:2010-11-11 10:25:42

标签: powershell cruisecontrol.net

我的任务是使用CruiseControl.NET审核构建服务器。其中有不少,我想知道是否有办法以编程方式/自动编译每个项目的列表。

有办法做到这一点吗?

我的第一直觉是使用PowerShell(v2.0),但我不知道如何开始编写满足我需要的脚本。我应该使用PowerShell还是其他方法?那些其他方法会是什么?

4 个答案:

答案 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)

Powershell可以非常轻松地读取xml文件。您应该使用它来查询CC.NET构建。

开始herehere

答案 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

我希望这会有所帮助!