2008-08-15 26 views
24

Tôi có CruiseControl.NET Phiên bản 1.4 được thiết lập trên máy chủ phát triển của mình. Bất cứ khi nào một nhà phát triển kiểm tra mã, nó làm cho một biên dịch.Làm cách nào bạn có thể xuất bản ứng dụng ClickOnce qua CruiseControl.NET?

Bây giờ chúng tôi đang ở một nơi mà chúng tôi có thể bắt đầu cung cấp ứng dụng của mình cho người thử nghiệm. Chúng tôi muốn sử dụng ClickOnce để phân phối ứng dụng, với ý tưởng là khi một người thử nghiệm đi kiểm tra ứng dụng, họ có bản dựng mới nhất.

Tôi không thể tìm thấy cách để thực hiện điều đó với CruiseControl.NET. Chúng tôi đang sử dụng MSBUILD để thực hiện các bản dựng.

Trả lời

12

Cảm ơn tất cả sự giúp đỡ. Giải pháp cuối cùng chúng tôi thực hiện đã mất một chút từ mọi câu trả lời.

Chúng tôi thấy dễ dàng hơn khi xử lý làm việc với nhiều môi trường bằng cách sử dụng các tệp lô đơn giản. Tôi không đề nghị đây là cách tốt nhất để làm điều này, nhưng đối với kịch bản và yêu cầu nhất định của chúng tôi, điều này làm việc tốt. Bổ sung "Project" với tên dự án của bạn và "Environment" với tên môi trường của bạn (dev, test, stage, production, any).

Đây là vùng tác vụ của tệp "ccnet.config" của chúng tôi.

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

Điều đầu tiên bạn sẽ nhận thấy là CopySettings.bat chạy. Điều này sao chép các cài đặt cụ thể cho môi trường, chẳng hạn như các kết nối cơ sở dữ liệu.

Tiếp theo, tác vụ MSBUILD chuẩn sẽ chạy. Bất kỳ lỗi biên dịch nào cũng bị bắt tại đây và được xử lý như bình thường.

Điều cuối cùng cần thực hiện là Publish.bat. Điều này thực sự thực hiện một MSBUILD "xây dựng lại" một lần nữa từ dòng lệnh, và các thông số từ CruiseControl được tự động chuyển vào và xây dựng. Tiếp theo, MSBUILD được gọi cho mục tiêu "xuất bản". Các thông số tương tự chính xác được đưa ra cho xuất bản khi xây dựng lại đã được ban hành. Điều này giúp các số bản dựng được đồng bộ hóa. Ngoài ra, các tệp thi hành của chúng tôi được đặt tên khác nhau (ví dụ: - ProjectDev và ProjectTest). Chúng tôi kết thúc với số phiên bản và tên khác nhau, và điều này cho phép ClickOnce làm điều đó.

Phần cuối cùng của Publish.bat sao chép các tệp thực sự vào nhà mới của họ. Chúng tôi không sử dụng publish.htm vì tất cả người dùng trên mạng, chúng tôi chỉ cung cấp cho họ lối tắt tới tệp kê khai trên máy tính để bàn của họ và họ có thể nhấp và luôn chạy đúng tệp thực thi với số phiên bản có liên quan CruiseControl.

Dưới đây là 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 

Và cuối cùng, đây là 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 

Như tôi đã nói, nó có thể không được thực hiện cách mà CruiseControl và MSBUILD nhà phát triển đã có ý định điều cần nhưng nó hoạt động. Nếu bạn cần làm việc này ngày hôm qua, đó có thể là giải pháp bạn đang tìm kiếm. Chúc may mắn!

-1

Bạn muốn sử dụng tác vụ tạo tệp kê khai ClickOnce trong msbuild. Quá trình này hơi dài, nên tôi sẽ chỉ cho bạn một vài liên kết. Dưới đây là reference on msdnsample article để hy vọng bạn bắt đầu.

22

Chúng tôi đã thực hiện việc này và có thể cung cấp cho bạn một số gợi ý để bắt đầu.

2 điều bạn nên biết:

  • MSBuild có thể tạo ra các tập tin triển khai cần thiết cho bạn.
  • MSBuild sẽ không triển khai tệp cho chia sẻ FTP hoặc UNC. Bạn sẽ cần một bước riêng cho việc này.

Để sử dụng MSBuild để tạo ra các biểu hiện ClickOnce, đây là lệnh bạn sẽ cần phải phát hành:

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

Điều đó sẽ cho MSBuild để xây dựng dự án của bạn và tạo ra các file triển khai ClickOnce trong bin \ Phát hành \ YourProject.publish thư mục.

Tất cả những gì còn lại là sao chép các tệp đó vào chia sẻ FTP/UNC/ở bất kỳ đâu và bạn đã sẵn sàng.

Bạn có thể nói CruiseControl.NET để xây dựng bằng cách sử dụng các tham số MSBuild đó.

Sau đó, bạn sẽ cần tác vụ xây dựng CruiseControl.NET để lấy các tệp triển khai đã tạo và sao chép chúng sang chia sẻ FTP hoặc UNC. Chúng tôi sử dụng một chương trình điều khiển C# nhỏ tùy chỉnh cho điều này, nhưng bạn có thể dễ dàng sử dụng một kịch bản Powershell.

+0

Tôi chỉ muốn chỉ ra rằng điều này hơi lỗi thời. Giả sử rằng bài viết của bạn là chính xác, MSBuild đã được cập nhật để hỗ trợ triển khai cho các cổ phiếu UNC, mà tôi làm trong nhiều dự án đang hoạt động bây giờ. –

+0

Cảm ơn, James. Vâng, điều này ban đầu được trả lời vào năm 2008, khi tất cả điều này là tươi mới và gợi cảm; nó có thể không liên quan 7 năm sau đó. –

4

Tôi nhớ đã làm điều này năm ngoái cho một dự án ClickOnce mà tôi đang thực hiện. Tôi nhớ rằng nó đưa tôi mãi mãi để tìm ra nhưng ở đây nó được. Những gì tôi muốn kịch bản của tôi để làm là tạo ra một trình cài đặt khác nhau mà chỉ vào env dev của chúng tôi và một khác nhau cho sản. Không chỉ vậy, nhưng tôi cần nó để tiêm các thông tin versioning đúng để các khách hàng hiện tại sẽ 'nhận ra' có một phiên bản mới ra có đó là toàn bộ điểm clickOnce. Trong kịch bản này, bạn phải thay thế bằng tên máy chủ của riêng bạn. Bí quyết là lưu tệp publish.htm và project.publish và tiêm số phiên bản mới dựa trên phiên bản do CC.NET cung cấp cho bạn.

Đây là những gì xây dựng kịch bản của tôi trông giống như:

<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

0

Chỉ có thể vượt qua $ {CCNetLabel} trong tác vụ msbuild CCNET.config sẽ là một cải tiến tuyệt vời.

Các vấn đề liên quan