Как опубликовать приложение ClickOnce с помощью CruiseControl.NET?

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

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

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

5 ответов

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

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

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

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

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

    Это подскажет MSBuild создать проект и создать файлы развертывания ClickOnce в папке \ Release\YourProject.publish directory.

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

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

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

  2. Я помню, что сделал это в прошлом году для проекта ClickOnce, над которым я работал. Я помню, что мне потребовалась вечность, чтобы понять, но вот он. Я хотел, чтобы мои скрипты создали другой установщик, который указывал бы на наш dev env и другой для prod. Не только это, но мне нужно было ввести правильную информацию о версии, чтобы существующие клиенты «поняли», что есть новая версия, в которой весь смысл clickOnce.
    В этом скрипте вы должны заменить свои собственные имена серверов и т.д. Фокус в том, чтобы сохранить публикацию.htm и проект.опубликуйте файл и введите новый номер версии на основе версии, предоставленной вам 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>
    

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

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

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

    Вот область задач нашей » ccnet.конфигурационный файл.

    <!-- 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.летучая мышь бежит. При этом копируются определенные параметры среды, такие как подключения к базе данных.

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

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

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

    Вот CopySettings.летучая мышь

    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
    

    И наконец, вот публикация.летучая мышь

    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 намеревались работать, но это работает. Если вам нужно получить эту работу вчера, это может быть решение, которое вы ищете. Удачи!