Forcebuild CruiseControl.net из удаленной командной строки - PullRequest
1 голос
/ 16 февраля 2011

Есть ли параметр командной строки для удаленного принудительного создания cruisecontrol.net. Я стараюсь избегать использования cctray и принудительной сборки вручную каждое утро. Кажется, мне нужно создать пользовательский хук на сервере CruiseControl, создав свой собственный веб-сервис.

Ответы [ 7 ]

2 голосов
/ 23 февраля 2011

А как насчет написания оболочки Powershell для ThoughtWorks.CruiseControl.Remote.dll? Мы делаем нечто очень похожее в проекте, который мы называем 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 голос
/ 29 мая 2013

У меня было похожее требование - запустить проект из кода Nant / C #.С помощью fiddler выяснили, что происходит, когда мы нажимаем «Force Build» на веб-панели проекта.

Вы можете отправить этот URL на сервер сборки.Запомните параметры в URL-адресе «ForceBuild = Force».

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

«Локальный» URL-адрес может отличаться в зависимости от вашей конфигурации.Для этого сначала попробуйте получить отчет о проекте из CCTray и посмотрите, каков URL вашего проекта Cruise Control.NET.На основе URL измените его, чтобы запустить проект.

Удачи!

1 голос
/ 09 сентября 2011

Запустите это в том же каталоге файла ccnet.config

"C:\Program Files (x86)\CruiseControl.NET\server\ccnet.exe" -r off -p [Project Name]
1 голос
/ 27 февраля 2011

Существует инструмент под названием CCCmd, который включен в установщик CC.NET.Это интерфейс командной строки, который позволяет принудительно выполнять сборку.

1 голос
/ 16 февраля 2011

Если вы строите каждое утро, почему бы не настроить вместо этого триггер расписания?

ОБНОВЛЕНИЕ НА ОСНОВЕ НОВОЙ ИНФОРМАЦИИ: Если ваш сценарий Power Shell можно изменить, чтобы изменить внутренне доступную веб-страницу (обновить текст метки времени в HTML), вы можете использовать urlTrigger

0 голосов
/ 10 декабря 2013

Вы можете запустить напрямую, отправив сообщение HTTP.Нет необходимости создавать отдельный URL или URL триггер.Если Powershell является опцией, это работает для нас (обратите внимание, что в наших сборках есть параметры, для которых ccnet имеет префикс «param_» в именах переменных post, вы можете опустить или настроить параметры с этим префиксом для ваших нужд):

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"
0 голосов
/ 17 февраля 2011

Как насчет разделения проблемы? Настройте новый проект 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.

...