Используйте PowerShell для создания списка всех проектов на сервере CCNet - PullRequest
2 голосов
/ 11 ноября 2010

Мне поручено проводить аудит серверов сборки с помощью CruiseControl.NET. Их довольно много, и мне было интересно, есть ли способ программно / автоматически составить список проектов для каждого из них.

Есть ли способ сделать это?

Мой первый инстинкт - использовать PowerShell (v2.0), но я не уверен, как начать писать скрипт, который выполняет то, что мне нужно. Должен ли я использовать PowerShell или другой метод? Какими будут эти другие методы?

Ответы [ 4 ]

4 голосов
/ 11 ноября 2010

Я бы использовал 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;
  }
2 голосов
/ 11 ноября 2010

Powershell может очень легко читать XML-файлы. Вы должны использовать это для опроса сборок CC.NET.

Начало здесь и здесь

1 голос
/ 11 ноября 2010

Если вы можете получить доступ к файлам ccnet.config, вы можете просто:

([xml](Get-Content ccnet.config)).cruisecontrol.project | Select name, artifactDirectory # or whatever
0 голосов
/ 12 ноября 2010

Спасибо всем за ответы.:-) Одна вещь, которую я не упомянул, это то, что все серверы сборки имеют одинаковую структуру установки для 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, вы можете просто выбрать нужные данные, как предложил Джейкуль:

Get-Projects <BuildServer> | Select-Object name, queue, category | Sort-Object category

Я надеюсь, что это окажется полезным!

...