Cum poți publica o aplicație ClickOnce prin CruiseControl.NET?

Am creat CruiseControl.NET Versiunea 1.4 pe serverul meu de dezvoltare. Ori de câte ori un dezvoltator verifică în cod, face o compilare.

Acum suntem într-un loc în care putem începe să oferim cererea noastră testerelor. Am dori să folosim ClickOnce pentru a distribui aplicația, ideea fiind că atunci când un tester merge pentru a testa aplicația, acestea au cea mai recentă construcție.

Nu găsesc o modalitate de a face acest lucru cu CruiseControl.NET. Folosim MSBUILD pentru a efectua construirea.

0
fr hi bn

4 răspunsuri

Multumesc pentru tot ajutorul. Soluția finală pe care am implementat-o ​​a luat un pic de la fiecare răspuns.

Am găsit mai ușor să lucrăm cu mai multe medii utilizând fișiere batch simple. Nu sugerez că este cel mai bun mod de a face acest lucru, dar pentru scenariul și cerințele date, acest lucru a funcționat bine. Completați "Proiectul" cu numele proiectului și "Mediu" cu numele dvs. de mediu (dev, test, scenă, producție, orice).

Aici este zona de sarcini a fișierului nostru "ccnet.config".

<!-- override settings  -->

    F:\Source\Project\Environment\CruiseControl\CopySettings.bat


<!-- compile -->

    C:\WINDOWS\Microsoft.NET\Framework\v3.5\MSBuild.exe
    F:\Source\Project\Environment\
    Project.sln
    /noconsolelogger /p:Configuration=Debug /v:diag
    Rebuild
    0
    ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll


<!-- clickonce publish  -->

    F:\Source\Project\Environment\CruiseControl\Publish.bat

Primul lucru pe care îl veți observa este că CopySettings.bat rulează. Aceasta copiază setările specifice pentru mediu, cum ar fi conexiunile bazei de date.

Apoi, se execută sarcina standard MSBUILD. Orice erori de compilare sunt prinse aici și manipulate ca normal.

Ultimul lucru pe care trebuie să-l executați este Publish.bat. Acest lucru efectuează de fapt o rebuildare a MSBUILD din nou de la linia de comandă, iar parametrii de la CruiseControl sunt transferați automat și construiți. Apoi, MSBUILD este chemat pentru obiectivul "publicare". Aceiași parametri sunt aceiași care au fost publicați în momentul în care a fost emisă reconstrucția. Acest lucru păstrează numerele de construire în sincronizare. De asemenea, executabilele noastre sunt denumite diferit (adică - ProjectDev și ProjectTest). Încheiem cu numere diferite de versiuni și nume, iar acest lucru îi permite lui ClickOnce să-și facă treaba.

Ultima parte a Publish.bat copiază fișierele reale în casele lor noi. Nu folosim publicația publish.htm, deoarece toți utilizatorii se află în rețea, le dăm o scurtătură la fișierul manifest pe desktop și pot face clic și execută întotdeauna executabilul corect cu un număr de versiune care se leagă în CruiseControl.

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

În fine, aici este 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

Asa cum am spus, probabil ca nu sa facut modul in care dezvoltatorii CruiseControl si MSBUILD intentionau lucrurile sa functioneze, dar functioneaza. Dacă aveți nevoie să obțineți acest lucru ieri, ar putea fi soluția pe care o căutați. Mult noroc!

0
adăugat

Doriți să utilizați sarcinile de generare a manifestărilor ClickOnce în msbuild. Procesul este puțin lung, așa că te voi îndrepta spre câteva linkuri. Aici este referință la msdn și articolul de probă pentru a vă sperăm că ați început.

0
adăugat

Am făcut acest lucru și vă putem da niște indicii pentru a începe.

2 lucruri pe care ar trebui să le cunoașteți:

  • MSBuild poate genera fișierele de implementare necesare pentru dvs.
  • MSBuild nu va implementa fișierele pe partajarea FTP sau UNC. Veți avea nevoie de un pas separat pentru acest lucru.

Pentru a utiliza MSBuild pentru a genera manifestările ClickOnce, iată comanda pe care va trebui să o emiteți:

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

Acest lucru va spune echipei MSBuild să vă construiască proiectul și să genereze fișiere de implementare ClickOnce în directorul bin \ Release \ YourProject.publish .

Tot ce a mai rămas este să copiați aceste fișiere în fișierele FTP/UNC/oriunde, și toate sunt setate.

Puteți să-i spuneți că CruiseControl.NET se construiește utilizând acei parametri MSBuild.

Veți avea nevoie apoi de o sarcină de creare a CruiseControl.NET pentru a prelua fișierele de implementare generate și pentru a le copia în partajarea FTP sau UNC. Utilizăm un program personalizat mic pentru consola C# pentru acest lucru, dar puteți folosi la fel de ușor un script Powershell.

0
adăugat
Mulțumesc, James. Da, acest lucru a fost inițial răspuns în 2008, când toate acestea au fost proaspete și sexy; poate să nu fie relevant 7 ani mai târziu.
adăugat autor Judah Himango, sursa
Vreau doar să subliniez că acest lucru este puțin depășit. Presupunând că postarea dvs. a fost corectă, MSBuild a fost actualizat pentru a sprijini implementarea acțiunilor UNC, ceea ce fac acum în multe proiecte active.
adăugat autor James LaPenn, sursa

Îmi amintesc că am făcut acest lucru anul trecut pentru un proiect ClickOnce la care lucram. Îmi amintesc că mi-a luat pentru totdeauna să-mi dau seama, dar aici este. Ceea ce am vrut să fac scripturile mele a fost de a genera un instalator diferit care a indicat dev devv și altul pentru prod. Nu numai că, dar am nevoie de ea pentru a injecta informațiile de versiune corecte, astfel încât clienții existenți să "realizeze" că există o nouă versiune acolo, care este întregul punct al clickOnce. În acest script trebuie să înlocuiți propriile nume de servere, etc. Scopul este să salvați fișierele publish.htm și project.publish și să injectați numărul versiunii noi pe baza versiunii furnizate de către CC.NET.

Iată cum a fost scenariul meu de construire:


  

  

    
      
    

    
      
        
      
     
  


Sper că acest lucru vă ajută

0
adăugat