Сведения о вопросе

Fedya

02:48, 29th August, 2020

Теги

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

Просмотров: 460   Ответов: 5

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

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

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



  Сведения об ответе

screen

05:45, 18th August, 2020

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

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

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

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

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

Это подскажет MSBuild построить свой проект и создать ClickOnce deployment файлов внутри каталога bin\Release\YourProject.publish .

Осталось только скопировать эти файлы в FTP/UNC share/wherever,, и все готово.

Вы можете сказать CruiseControl.NET, чтобы построить, используя эти параметры MSBuild.

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


  Сведения об ответе

lesha

22:43, 14th August, 2020

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

Мы обнаружили, что проще работать с несколькими средами, используя простые пакетные файлы. Я не говорю, что это лучший способ сделать это, но для нашего данного сценария и требований это сработало хорошо. Дополнение "Project" с вашим именем проекта и "Environment" с вашим именем среда (разработки, тестирования, стадии, производства и т. д.).

Вот область задач нашего файла "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 "rebuild" снова из командной строки, и параметры из CruiseControl автоматически передаются и строятся. Далее, MSBUILD вызывается для цели "publish". Точно такие же параметры задаются для публикации, когда была выпущена перестройка. Это позволяет синхронизировать номера сборок. Кроме того, наши исполняемые файлы называются по - разному (например, - 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, но это действительно работает. Если вам нужно заставить это работать вчера, это может быть решением, которое вы ищете. Удачи вам!


  Сведения об ответе

ЯЯ__4

22:17, 12th August, 2020

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

Вот как выглядел мой сценарий сборки:

<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>

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


  Сведения об ответе

SEEYOU

19:41, 10th August, 2020

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


  Сведения об ответе

ASER

23:16, 11th August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться