2008-08-15 20 views
24

Geliştirme sunucumda ayarladığım CruiseControl.NET Sürüm 1.4 var. Bir geliştirici kodu ne zaman kontrol ederse, derleme yapar.Bir ClickOnce uygulamasını CruiseControl.NET üzerinden nasıl yayınlayabilirsiniz?

Şimdi, uygulamamızı başvuru sahiplerine vermeye başlayabileceğimiz bir yerdeyiz. Uygulamayı dağıtmak için ClickOnce'ı kullanmak istiyoruz, çünkü bir test cihazı uygulamayı test etmeye gittiğinde, en son yapıya sahipler.

Bunu CruiseControl.NET ile gerçekleştirmenin bir yolunu bulamıyorum. Yapıları gerçekleştirmek için MSBUILD kullanıyoruz.

cevap

12

Teşekkür yardımcı

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

Umut: Burada

gibi benim yapı komut dosyası görünüyordu şeydir. Uyguladığımız son çözüm, her cevaptan biraz aldı.

Basit toplu iş dosyaları kullanarak birden çok ortamla çalışmayı daha kolay ele aldık. Bunun bunu yapmanın en iyi yolu olduğunu öne sürmüyorum, ama verdiğimiz senaryo ve gereksinimler için bu iyi çalıştı. Proje isminizle "Proje" eki ve çevre adınızla "Çevre" (dev, test, aşama, üretim, her neyse).

"ccnet.config" dosyanızın görev alanı aşağıdadır.

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

Göreceksiniz ilk şey

CopySettings.bat ishal. Bu, veritabanı bağlantıları gibi ortam için belirli ayarları kopyalar.

Sonraki, standart MSBUILD görevini çalıştırır. Herhangi bir derleme hatası burada yakalanır ve normal olarak ele alınır.

Yürütülecek son şey Publish.bat. Bu aslında bir komut satırı satırından bir MSBUILD "yeniden" gerçekleştirir ve CruiseControl gelen parametreler otomatik olarak geçirilir ve yerleşik. Ardından, "yayınlama" hedefi için MSBUILD çağrılır. Tam olarak aynı parametreler, yeniden oluşturuldukça yayınlanır. Bu, yapı numaralarını senkronize halde tutar. Ayrıca, yürütülebilir dosyalarımız farklı şekilde adlandırılmıştır (örn. - ProjectDev ve ProjectTest). Farklı sürüm numaraları ve isimleriyle sonuçlanıyoruz ve bu da ClickOnce'un kendi işini yapmasına izin veriyor.

Publish.bat'ın son kısmı, gerçek dosyaları yeni evlerine kopyalar. Publish.htm'yi tüm kullanıcılarımız ağda olduğu için kullanmıyoruz, onlara yalnızca kendi manifest dosyasına masaüstünde bir kısayol veriyoruz ve her zaman doğru yürütülebilir dosyayı çalıştıran bir sürüm numarasıyla tıklayıp çalıştırabiliriz. Seyir kontrolü. İşte

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 

CopySettings.bat Ve son olarak, burada muhtemelen CruiseControl ve MsBuild geliştiricileri şeyler amacı vardı bu şekilde bitmedi, 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 

Dediğim gibi mesafesindedir Çalış, ama işe yarıyor. Bu çalışmayı dün yapmanız gerekiyorsa, aradığınız çözüm bu olabilir. İyi şanslar!

-1

ClickUnce manifest oluşturma görevlerini msbuild'de kullanmak istiyorsunuz. Süreç biraz uzun sarıldı, bu yüzden sizi birkaç bağlantıya yönlendireceğim. Umarım başlamanız için reference on msdn ve sample article.

22

Bunu yaptık ve başlamanız için bazı işaretçiler verebiliriz.

2 şeyler farkında olmalı:

  • MSBuild sizin için gerekli dağıtım dosyaları oluşturabilir.
  • MSBuild dosyaları FTP veya UNC paylaşımına dağıtmaz. Bunun için ayrı bir adım gerekir.

burada sorunu gerekir komut var, ClickOnce manifestoyu oluşturmak için MSBuild kullanmak için: bin içindeki ClickOnce dağıtım dosyaları proje oluşturmak ve üretmek için MSBuild söyleyecektir

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

\ Release \ YourProject.publish dizini.

Tek yapmanız gereken, bu dosyaları FTP/UNC paylaşımına/kopyalamaya kopyalamaktır.

CruiseControl.NET'e bu MSBuild parametrelerini kullanarak oluşturmasını söyleyebilirsin.

Oluşturulan dağıtım dosyalarını almak ve bunları FTP veya UNC paylaşımına kopyalamak için bir CruiseControl.NET oluşturma görevine ihtiyacınız olacak. Bunun için özel bir küçük C# konsol programı kullanıyoruz, ancak bir Powershell betiğini kolayca kullanabilirsiniz.

+0

Sadece bunun biraz modası geçmiş olduğunu belirtmek istiyorum. Gönderinizin doğru olduğunu kabul edersek, MSBuild şu anda birçok etkin projede gerçekleştirdiğim UNC hisselerinin dağıtımını desteklemek için güncellendi. –

+0

Teşekkürler, James. Evet, bu aslında 2008'de, tüm bunlar taze ve seksi iken cevaplandı; 7 yıl sonra ilgili olmayabilir. –

4

Geçen yıl bunu yaptığım bir ClickOnce projesi için yaptığımı hatırlıyorum. Beni sonsuza dek anlamaya götürdüğünü hatırlıyorum ama işte burada. Benim senaryolarımın yapmasını istediğim şey, bizim dev env'imize ve prod için bir diğerine işaret eden farklı bir yükleyici oluşturmaktı. Sadece bu değil aynı zamanda doğru sürüm bilgisini de enjekte etmem gerekiyordu, böylece mevcut müşterilerin 'farkına varmaları' söz konusuydu. Burada clickOnce'un tüm noktası olan yeni bir versiyon var. Bu komut dosyasında kendi sunucu adlarınızla değiştirmelisiniz. İpucu, publish.htm ve project.publish dosyasını kaydetmek ve CC.NET tarafından size sağlanan sürüme bağlı olarak yeni sürüm numarasını enjekte etmektir. Bu tüm yardım için

0

Sadece CCNET.config msbuild görevindeki $ {CCNetLabel} komutunu başarılı bir şekilde geçirmeniz yeterli olacaktır.

İlgili konular