Jak można opublikować aplikację ClickOnce poprzez CruiseControl.NET?

Mam CruiseControl.NET Wersja 1.4 skonfigurowana na moim serwerze deweloperskim. Za każdym razem, gdy programista sprawdza kod, tworzy kompilację.

Teraz jesteśmy w miejscu, gdzie możemy zacząć rozdawać aplikację testerom. Chcielibyśmy użyć ClickOnce do dystrybucji aplikacji, z myślą o tym, że gdy tester idzie przetestować aplikację, mają najnowszą kompilację.

Nie mogę znaleźć sposobu, aby to się stało z CruiseControl.NET. używamy MSBUILD do wykonania buduje.

Author: huseyint, 2008-08-15

5 answers

Zrobiliśmy to i możemy dać ci kilka wskazówek, aby zacząć.

2 rzeczy, o których powinieneś wiedzieć:

  • MSBuild może wygenerować niezbędne pliki wdrażania dla Ciebie.
  • MSBuild nie wdroży plików na FTP lub UNC share. Będziesz potrzebował osobnego kroku.

Aby użyć MSBuild do wygenerowania manifestów ClickOnce, musisz wydać następujące polecenie:

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

To powie MSBuild, aby zbudować swój projekt i wygenerować wdrożenie ClickOnce pliki wewnątrz bin\Release\YourProject.Opublikuj katalog.

Pozostało tylko skopiować te pliki do FTP/UNC share / wherever I wszystko gotowe.

You can tell CruiseControl.NET aby zbudować przy użyciu tych parametrów MSBuild.

Będziesz wtedy potrzebował CruiseControl.NET zbuduj zadanie, aby pobrać wygenerowane pliki wdrażania i skopiować je do udziału FTP lub UNC. Używamy do tego niestandardowego małego programu C# console, ale równie łatwo można użyć Powershell scenariusz.

 22
Author: Judah Himango,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 17:35:46

Dzięki za pomoc. Ostateczne rozwiązanie, które wdrożyliśmy, wzięło trochę z każdej odpowiedzi.

Okazało się, że łatwiej jest obsługiwać pracę z wieloma środowiskami przy użyciu prostych plików wsadowych. Nie sugeruję, że jest to najlepszy sposób, aby to zrobić, ale dla naszego scenariusza i wymagań, to działało dobrze. Uzupełnij "projekt" swoją nazwą projektu i "Środowisko" swoją nazwą środowiska (dev, test, stage, production, cokolwiek).

Oto obszar zadań naszej "ccnet.config " plik.

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

Pierwszą rzeczą, którą zauważysz, jest to, że CopySettings.biega nietoperz. Kopiuje to określone ustawienia dla środowiska, takie jak połączenia z bazą danych.

Następnie uruchamia się standardowe zadanie MSBUILD. Wszelkie błędy kompilacji są tutaj przechwytywane i obsługiwane normalnie.

Ostatnią rzeczą do wykonania jest opublikowanie.bat. To faktycznie wykonuje MSBUILD" rebuild " ponownie z wiersza poleceń, a parametry z CruiseControl są automatycznie przekazywane wbudowany i zbudowany. Następnie MSBUILD jest wywoływany dla celu "publikuj". Dokładnie te same parametry są podane do publikacji, jak została wydana przebudowa. Dzięki temu numery kompilacji są zsynchronizowane. Ponadto nasze pliki wykonywalne są inaczej nazwane (np.-ProjectDev i ProjectTest). Kończymy z różnymi numerami wersji i nazwami, a to pozwala ClickOnce robić swoje.

Ostatnia część publikacji.bat kopiuje aktualne pliki do ich nowych domów. Nie korzystamy z publikacji.htm jak wszyscy nasi użytkownicy są na sieci, po prostu dajemy im skrót do pliku manifestu na ich pulpicie i mogą kliknąć i zawsze uruchamiać poprawny plik wykonywalny z numerem wersji, który łączy się w CruiseControl.

Oto 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

I na koniec, Oto Publikacja.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

Jak mówiłem, prawdopodobnie nie jest to zrobione tak, jak deweloperzy CruiseControl i MSBUILD zamierzali coś zrobić, ale to działa. Jeśli musisz to wczoraj uruchomić, może to być rozwiązanie, którego szukasz. Powodzenia!

 12
Author: proudgeekdad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-20 18:37:54

Pamiętam, że robiłem to w zeszłym roku dla projektu ClickOnce, nad którym pracowałem. Pamiętam, że to zajęło mi wieczność, żeby to zrozumieć, ale oto jest. Chciałem, aby moje Skrypty wygenerowały inny instalator, który wskazywał na nasz dev env i inny dla prod. Nie tylko to, ale potrzebowałem go, aby wstrzyknąć odpowiednie informacje o wersjonowaniu, aby istniejący klienci "zorientowali się", że istnieje nowa wersja, która jest całym celem clickOnce. W tym skrypcie musisz zastąpić własne nazwy serwerów itp. Sztuką jest uratować publikację.htm i project.Opublikuj plik i wprowadź nowy numer wersji na podstawie wersji dostarczonej przez CC.NET.

Oto jak wyglądał mój skrypt budowania:

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

Hope this helps

 4
Author: fnCzar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-20 04:29:24

Wystarczy przekazać ${CCNetLabel} w sieci CCNET.config msbuild task byłoby wielkim ulepszeniem.

 0
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-03 14:27:04

Chcesz użyć zadań generowania manifestu ClickOnce w msbuild. Proces jest trochę długi, więc po prostu wskażę ci kilka linków. Oto odniesienie do msdn i przykładowy Artykuł , aby mieć nadzieję, że zaczniesz.

 -1
Author: Dale Ragan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 17:22:33