2011-02-16 43 views
1

是否有一个命令行切换到远程forcebuild cruisecontrol.net。我试图避免每天早上去手工制作它并手动强制它。看来我必须通过创建自己的自定义Web服务来在CruiseControl服务器上创建自定义挂钩。从远程命令行的Forcebuild CruiseControl.net

回答

1

如果您每天早上都在建设,为什么不设置计划触发器呢?

更新基于新的信息: 如果你的电源外壳脚本可以被修改来修改内部访问网页(更新在HTML时间戳文字),那么你可以使用urlTrigger

+0

原因是我有一个数据库powershell脚本需要在forcebuild之前运行。所以forcebuild依赖于数据库的powershell脚本完成。我已经看过了关于如何通过.net远程调用forcebuild的cctray源代码。在CruiseControl java端他们有JMX webservice,这是我需要在CruiseControl.net。现在我正在寻找通过在powershell或cmd行中使用.net remoting来调用forcebuild的替代方法。 – odez213 2011-02-16 20:43:33

+0

你能指我一个URL触发器的文档吗?我试着用google搜索无济于事,但设法看到一些线程讨论URL触发器。 – odez213 2011-02-18 18:08:21

0

什么分裂问题?设置有一个PowerShell任务,触发原有的项目ForceBuild发行新CCNET项目:

<cruisecontrol> 
    <project name="OriginalProject"> 
    <!-- ... --> 
    </project name="NewProject"> 
    <project> 
    <tasks> 
     <powershell> 
     <script>CreateDatabase.ps</script> 
     <!-- ... --> 
     </powershell> 
    </tasks> 
    <publishers> 
     <forcebuild> 
     <project>OriginalProject</project> 
     </forcebuild> 
    </publishers> 
    </project> 
</cruisecontrol> 

如果你想运行原来的项目只有powershell任务经历没有任何错误,只需移动forcebuild块从publisherstasks部分。

2

围绕ThoughtWorks.CruiseControl.Remote.dll编写Powershell Wrapper怎么办?在一个我们称之为CruiseHydra的项目中,我们做了一些非常类似的事情,这个项目模拟了跨多个构建服务器分割多个任务的能力。我试图在这里提取应该与你有关的部分。请注意,我没有测试过这个确切的代码,我们的图书馆包装此深在自己的抽象,但它的JIST是在这里:

using ThoughtWorks.CruiseControl.Remote; 

public ForceBuild(String ServerAddress, String projectToExecute) 
{ 
    RemoteCruiseManagerFactory rcmf = new RemoteCruiseManagerFactory(); 
    ICruiseManager ccnetServer = rcmf.GetCruiseManager(ServerAddress); 
    ccnetServer.ForceBuild(projectToExecute,"Forced By Programatic Wrapper"); 
} 

可以明显改变的第二个参数ForceBuild是名你的任务。这就是仪表盘上“集成请求”部分显示的内容。

1

CC.NET安装程序中包含一个名为CCCmd的工具。这是一个允许远程强制构建的命令行界面。在文件的ccnet.config

"C:\Program Files (x86)\CruiseControl.NET\server\ccnet.exe" -r off -p [Project Name] 
1

运行这一点 - 触发从南特/ C#代码的项目。在小提琴手的帮助下,我们在项目的网页仪表板上点击“强制构建”,发现发生了什么。

您可以将此URL发送到构建服务器。请注意URL中的参数“ForceBuild = Force”。

http://your-build-server/ccnet/server/local/project/your-project-name/ViewProjectReport.aspx?ForceBuild=Force 

的“本地”的URL可以根据您的配置而有所不同。为此,首先尝试从CCTray获取项目报告,并查看Cruise Control.NET项目的URL。根据URL修改它来触发项目。

祝你好运!

1

我也有类似的要求的同一目录

0

您可以通过提交HTTP帖子直接触发。无需创建单独的URL或URL触发器。如果Powershell是一个选项,这适用于我们(请注意,我们的版本具有以下变量名称中带有“param_”的ccnet前缀的参数,可以根据需要使用此前缀省略或调整参数):

function Build-CCNetProject { 
    param(
     [string] $hostname, 
     [string] $server, 
     [string] $username, 
     [string] $password, 
     [string] $project, 
     [string] $param_environment, 
     [string] $param_build_version, 
     [string] $param_request_id 
    ) 
    $securePassword = ConvertTo-SecureString "$password" -AsPlainText -Force 
    $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword) 
    $postParams = @{projectName="$project";serverName="$server";ForceBuild='Force';param_environment="$param_environment";param_build_version="$param_build_version";param_request_id="param_request_id";submit='Build'} 
    $postUrl = "http://{0}/ccnet/server/{1}/project/{2}/ViewProjectReport.aspx" -f $hostname, $server, $project 
    Invoke-WebRequest -Uri $postUrl -Method POST -Body $postParams -Credential $credential 
} 
# Usage: 
Build-CCNetProject -hostname "teamcity" -server "somehost" -username "foo\bar" -password "baz" -project "awesome-app" -param_environment "uat" -param_build_version "1.0.1.123" -param_request_id "1"