从远程命令行强制建立CruiseControl.net

时间:2011-02-16 13:17:13

标签: continuous-integration cruisecontrol.net

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

7 个答案:

答案 0 :(得分:2)

如何在ThoughtWorks.CruiseControl.Remote.dll周围编写Powershell Wrapper?我们在一个名为CruiseHydra的项目中做了类似的事情,它模拟了跨多个构建服务器分割多个任务的能力。我试图在这里提取与你相关的部分。请注意,我没有测试过这个确切的代码,我们的库在它自己的抽象中包含了这个深层,但是它的主要部分在这里:

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 :(得分:1)

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

基于新信息的更新: 如果可以修改Power Shell脚本以修改内部可访问的网页(更新HTML中的时间戳文本),则可以使用urlTrigger

答案 2 :(得分:1)

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

答案 3 :(得分:1)

在ccnet.config文件的同一目录中运行

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

答案 4 :(得分:1)

我有类似的要求 - 从Nant / C#代码触发项目。在fiddler的帮助下,当我们点击“强制构建”时,我们发现了正在发生的事情。在项目的网络仪表板上。

您可以将此URL发送到构建服务器。请注意URL" ForceBuild = Force"。

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

" local" URL中的内容可能因您的配置而异。为此,首先尝试从CCTray获取项目报告,看看您的Cruise Control.NET项目的URL是什么。根据URL修改它来触发项目。

祝你好运!

答案 5 :(得分:0)

分裂问题怎么样?设置一个新的CCNET项目,该项目具有PowerShell任务和触发原始项目的ForceBuild发布者:

<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块从publishers移至tasks部分即可。

答案 6 :(得分:0)

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

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"