Подтвердить что ты не робот

Как вы можете опубликовать приложение ClickOnce через CruiseControl.NET?

У меня установлен CruiseControl.NET Version 1.4 на моем сервере разработки. Всякий раз, когда разработчик проверяет код, он делает компиляцию.

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

Я не могу найти способ сделать это с CruiseControl.NET. Мы используем MSBUILD для выполнения сборок.

4b9b3361

Ответ 1

Спасибо за помощь. Окончательное решение, которое мы выполнили, взяло немного от каждого ответа.

Нам было проще обрабатывать работу с несколькими средами с помощью простых пакетных файлов. Я не предлагаю, что это лучший способ сделать это, но для нашего сценария и требований это сработало хорошо. Дополните "Проект" своим именем проекта и "Среда" с вашим именем среды (dev, test, stage, production, whatever).

Вот область задач нашего файла ccnet.config.

<!-- override settings  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\CopySettings.bat</executable>
</exec>

<!-- compile -->
<msbuild>
    <executable>C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe</executable>
    <workingDirectory>F:\Source\Project\Environment\</workingDirectory>
    <projectFile>Project.sln</projectFile>
    <buildArgs>/noconsolelogger /p:Configuration=Debug /v:diag</buildArgs>
    <targets>Rebuild</targets>
    <timeout>0</timeout>
    <logger>ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll</logger>
</msbuild>

<!-- clickonce publish  -->
<exec>
    <executable>F:\Source\Project\Environment\CruiseControl\Publish.bat</executable>
</exec>

Первое, что вы заметите, это то, что выполняется CopySettings.bat. Это копирует определенные настройки для среды, такие как соединения с базой данных.

Далее выполняется стандартная задача MSBUILD. Любые ошибки компиляции пойманы здесь и обрабатываются как обычно.

Последнее, что нужно выполнить, - Publish.bat. Это фактически выполняет перезагрузку MSBUILD из командной строки, и параметры из CruiseControl автоматически передаются и создаются. Затем MSBUILD вызывается для цели "публикации". Точно такие же параметры присваиваются публикации, так как была создана перестройка. Это позволяет синхронизировать номера сборки. Кроме того, наши исполняемые файлы называются по-разному (т.е. ProjectDev и ProjectTest). Мы заканчиваем разными номерами и именами версий, и это позволяет ClickOnce выполнять свою работу.

Последняя часть Publish.bat копирует фактические файлы в их новые дома. Мы не используем publish.htm, поскольку все наши пользователи находятся в сети, мы просто даем им ярлык файла манифеста на рабочем столе, и они могут щелкнуть и всегда запускать правильный исполняемый файл с номером версии, который связывается в CruiseControl.

Здесь находится CopySettings.bat

XCOPY "F:\Source\Project\Environment\CruiseControl\Project\app.config" "F:\Source\Project\Environment\Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.Designer.vb" "F:\Source\Project\Environment\Project\My Project" /Y /I /R
XCOPY "F:\Source\Project\Environment\CruiseControl\Project\My Project\Settings.settings" "F:\Source\Project\Environment\Project\My Project" /Y /I /R

И, наконец, здесь Publish.bat

C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:rebuild "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationRevision=%CCNetLabel% /property:AssemblyName="ProjectEnvironment" /property:PublishUrl="\\Server\bin\Project\Environment\\"
C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe /target:publish "F:\Source\Project\Environment\Project\Project.vbproj" /property:ApplicationVersion="1.0.0.%CCNetLabel%" /property:AssemblyVersion="1.0.0.%CCNetLabel%" /property:AssemblyName="ProjectEnvironment" 

XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish" "F:\Binary\Project\Environment" /Y /I
XCOPY "F:\Source\Project\Environment\Project\bin\Debug\app.publish\Application Files" "F:\Binary\Project\Environment\Application Files" /Y /I /S

Как я уже сказал, это, вероятно, не так, как разработчики CruiseControl и MSBUILD намеревались работать, но это работает. Если вам нужно получить эту работу вчера, это может быть решение, которое вы ищете. Удачи!

Ответ 2

Мы сделали это и можем дать вам несколько указателей, чтобы начать.

2 вещи, о которых вы должны знать:

  • MSBuild может генерировать необходимые файлы развертывания для вас.
  • MSBuild не будет размещать файлы на FTP или UNC-ресурсе. Для этого вам понадобится отдельный шаг.

Чтобы использовать MSBuild для создания манифестов ClickOnce, введите команду, которую вы должны будете выполнить:

msbuild /target:publish /p:Configuration=Release /p:Platform=AnyCPU; "c:\yourProject.csproj"

Это будет означать, что MSBuild создаст ваш проект и создаст файлы развертывания ClickOnce в каталоге bin\Release\YourProject.publish.

Все, что осталось, - это скопировать эти файлы в общий доступ к FTP/UNC/где угодно, и вы все настроены.

Вы можете сказать CruiseControl.NET для сборки с использованием этих параметров MSBuild.

Затем вам понадобится задача сборки CruiseControl.NET, чтобы взять сгенерированные файлы развертывания и скопировать их на общий ресурс FTP или UNC. Для этого мы используем небольшую консольную программу С#, но вы можете так же легко использовать Powershell script.

Ответ 3

Я помню, как это делалось в прошлом году для проекта ClickOnce, над которым я работал. Я помню, что это заставляло меня навсегда понять, но вот оно. То, что я хотел, чтобы мои сценарии выполнялись, заключалось в создании другого установщика, который указывал на наш dev env и другой для prod. Не только это, но я нуждался в этом, чтобы ввести правильную информацию о версии, чтобы существующие клиенты "поняли", что есть новая версия, которая является целым пунктом clickOnce. В этом script вам нужно заменить ваши собственные имена серверов и т.д. Трюк заключается в том, чтобы сохранить файл publish.htm и project.publish и ввести номер новой версии на основе версии, предоставленной вам CC.NET.

Вот как выглядела моя сборка script:

<target name="deployProd">
  <exec program="<framework_dir>\msbuild.exe" commandline="<project>/<project>.csproj /property:Configuration=PublishProd /property:ApplicationVersion=${build.label}.*;PublishUrl=\\<prod_location>\binups$\;InstallUrl=\\<prod_location>\binups$\;UpdateUrl=\\<prod_location>\binups$\;BootstrapperComponentsUrl=\\<prod_location>\prereqs$\ /target:publish"/>

  <copy todir="<project>\bin\PublishProd\<project>.publish">

    <fileset basedir=".">
      <include name="publish.htm"/>
    </fileset>

    <filterchain>
      <replacetokens>
        <token key="CURRENT_VERSION" value="${build.label}"/>
      </replacetokens>
     </filterchain>
  </copy>

</target>

Надеюсь, что это поможет

Ответ 4

Просто удастся передать ${CCNetLabel} в задаче CCNET.config msbuild, было бы большим улучшением.

Ответ 5

Вы хотите использовать задачи генерации манифеста ClickOnce в msbuild. Процесс немного длинный, поэтому я просто собираюсь указать вам пару ссылок. Вот ссылка на msdn и образец статьи надеюсь, вы начнете.