我的任務是使用CruiseControl.NET審計構建服務器。其中有不少,我想知道是否有一種方法來編程/自動編譯每個項目的列表。使用PowerShell在CCNet服務器上創建所有項目的列表
有沒有辦法做到這一點?
我的第一本能是使用PowerShell(v2.0),但我不確定如何開始編寫一個腳本來完成我所需要的。我應該使用PowerShell還是其他方法?那些其他方法會是什麼?
我的任務是使用CruiseControl.NET審計構建服務器。其中有不少,我想知道是否有一種方法來編程/自動編譯每個項目的列表。使用PowerShell在CCNet服務器上創建所有項目的列表
有沒有辦法做到這一點?
我的第一本能是使用PowerShell(v2.0),但我不確定如何開始編寫一個腳本來完成我所需要的。我應該使用PowerShell還是其他方法?那些其他方法會是什麼?
如果您可以訪問的ccnet.config文件,你可以:
([xml](Get-Content ccnet.config)).cruisecontrol.project | Select name, artifactDirectory # or whatever
這裏是我用來加載XML的代碼:$ xml = [xml](Get-Content ccnet.config)。但是,它返回的是
沒有錯。該根元素對每個子元素都會有屬性 - 或者您可以使用xpath。 Preet鏈接的文件是很好的起點。 – Jaykul 2010-11-11 16:40:50
D'oh!的確,這些博客帖子解釋瞭如何訪問子節點/元素 - 我應該一直讀。 +1提供有用的鏈接(當我獲得足夠的聲望以upvote,那是...)。 – 2010-11-12 06:50:50
我會用Thoughtworks.CruiseControl.Remote.dll並將其加載到PowerShell中
創建ICruiseManagerFactory managerFactory;
然後你可以迭代你的服務器列表和C reate開放的我們像服務器:
ServerUri = @"tcp://" + Server + ":" + Port + @"/CruiseManager.rem"
然後用獲得的項目,並從該服務器的狀態列表:
foreach (ProjectStatus projectStatus in currentStatuses)
{
string name = projectStatus.Name;
string status = projectStatus.Status;
}
感謝:
ProjectStatus[] currentStatuses = managerFactory.GetCruiseManager(ServerUri).GetProjectStatus();
然後遍歷列表大家爲他們的答案。 :-)我沒有提到的一件事是,所有的構建服務器都具有與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
我希望這個發現是有幫助的!
謝謝!我將在一分鐘內爲這種功能提供我的PowerShell腳本。 – 2010-11-12 06:52:04