2010-02-22 25 views
21

Tôi đang tìm cách triển khai hệ thống chạy thử nghiệm đơn vị liên tục, một thứ mà tôi đã nghe là "smoketest" hoặc "tinderbox", (máy chủ xây dựng thực hiện kiểm tra phiên bản sạch và xây dựng hệ thống đầy đủ mọi thứ trong một nguồn nhất định kho lưu trữ hoặc dự án), và một cái gì đó như "tích hợp liên tục" cho các nhóm nhỏ, với Delphi.Delphi Xây dựng tự động hóa và tích hợp liên tục khả thi chỉ sử dụng MS Build?

Tôi không muốn cam kết với một sản phẩm "xây dựng máy chủ" thương mại và tôi hy vọng tôi có thể thực hiện rất nhiều việc này chỉ với hỗ trợ MS-Build được tích hợp vào delphi.

Tôi đang tìm kiếm tài nguyên, ý tưởng và một nơi để bắt đầu. Tôi không biết cách sử dụng MS Build cho mục đích này. Steve Trevethen có một bài đăng trên blog dẫn đến một cuộc thảo luận nhỏ về xây dựng dòng lệnh dcc32 cũ và một số nhận xét đề cập đến ms-build đã có ở đây kể từ delphi 2007. Tôi đang sử dụng Delphi 2010. Tôi đang tìm kiếm hướng dẫn và thông tin chi tiết và trải nghiệm , điều đó sẽ cho tôi biết, đây có phải là con đường hợp lý để đi xuống không, và nếu không, tôi nên đi theo cách nào?

Tôi thấy bạn có thể ghi đè đơn vị (DCU) và thư mục đầu ra EXE từ dòng lệnh msbuild bằng/p: DCU_DcuOutput =. Lưu ý rằng tôi đã xem xét XML bên trong các tệp DPROJ của tôi để tìm ra cách ghi đè nội dung.

Tuy nhiên, nó chỉ thực hiện một thực hiện, không phải là một xây dựng, và/t: xây dựng lại không hoạt động (sửa:.. Vâng nó có phải nó hoạt động tốt trên các tập tin DPROJ, nhưng không phải trên GroupProjects)

Tôi muốn có thêm tài liệu MSBuild-with-Delphi ở đó ở đâu không? Trợ giúp MS-Build trong tài liệu sản phẩm "Rad Studio 2010" cho thấy một hoặc hai điều về MS-Build nhưng thực sự là sơ sài và không đầy đủ.

câu hỏi liên quan:

MSBuild command lines

+0

Offtopic, nhưng chúng tôi sử dụng makefiles Cygwin và dcc32 cho các nội dung như thế này. Lý do là hầu hết các dự án của chúng tôi có nguồn gốc trong Delphi 5 và thế giới trước đó, vì vậy chúng tôi chỉ dính vào những gì chúng ta biết ... nhưng nó hoạt động tốt và hoàn toàn miễn phí. –

+0

'/ t: rebuild' có xây dựng đầy đủ cho tôi, với Delphi 2009 trên các tệp dproj, bạn đã thử chạy msbuild trên dproj thay vì groupproj chưa? http://stackoverflow.com/questions/1773546/how-can-i-get-msbuild-to-do-a-full-build-of-a-delphi-project-equivalent-to-dcc32/1774169#1774169 – jasonpenny

+0

Hãy thử các công cụ của mingw, nó giúp bạn tiết kiệm rất nhiều rắc rối khi so sánh với Cygwin/msys. Thật không may mingw dường như đã ngừng coreutils xây dựng –

Trả lời

15

Delphi 2010 sử dụng MSBuild vì nó là chính động cơ xây dựng. Điều đó có nghĩa là IDE và dòng lệnh đều làm chính xác điều tương tự. Nó cũng có nghĩa là bạn có thể dễ dàng xây dựng các dự án hiện có với dòng lệnh. Trong thực tế, chúng tôi trên đội Delphi làm điều này chính xác tất cả các thời gian. Bạn không cần lo lắng về các công tắc cho trình biên dịch - tệp DProj được tạo bởi IDE sẽ

Trên menu bắt đầu là một dòng lệnh để sử dụng MSBuild với dự án Delphi hiện có. Nó thiết lập môi trường một cách chính xác để bạn có thể dễ dàng gọi:

msbuild myproject.dproj

Bạn cũng có thể gọi các cấu hình xây dựng cụ thể từ dòng lệnh, sử dụng IDE dễ dàng tạo ra cho biết cấu hình sử dụng các tham số dòng lệnh cho MSBuild.

Nếu bạn muốn tự tạo môi trường, bạn có thể chạy tệp hàng loạt rsvars.bat để thiết lập mọi thứ. Tệp đó có thể được tìm thấy trong thư mục \ bin của bạn và sẽ có sẵn từ một dòng lệnh mặc định.

Các tập tin chứa những điều sau đây:

@SET BDS=<your BDS directory> 
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0 
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727 
@SET FrameworkVersion=v2.0.50727 
@SET FrameworkSDKDir= 
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH% 
@SET LANGDIR=EN 

Vì vậy, nếu bạn muốn tạo riêng xây dựng tích hợp liên tục, bạn có thể dễ dàng quản lý xây dựng Delphi của bạn sử dụng MSBuild.

+1

SO rất tốt, nhưng ở đâu đó nó được ghi lại rằng để làm một bản dựng thay vì biên dịch lại, tôi nên sử dụng/t: xây dựng lại. Bất kỳ ý tưởng những gì lá cờ là để buộc một xây dựng thay vì kiểm tra phụ thuộc (aka, thực hiện)? –

+0

Có vẻ như/t: rebuild hoạt động, nhưng chỉ với .dproj được chuyển tới msbuild, không phải nhóm dự án. Mà là tốt. Chỉ cần một chút cắt và dán cho tôi. –

+0

Lars đã lưu ý rằng/t: Xây dựng các công trình cho .GroupProj trong khi/t: Xây dựng lại cho các tệp .dproj. Lập dị, nhưng hoàn toàn khả thi. –

11

dproj và groupproj là các tệp msbuild và bạn có thể xem bên trong chúng. Các phần khác của thông tin được tìm thấy trong đường dẫn cài đặt msbuild (C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727).Ở đó bạn sẽ tìm thấy một số tập tin mục tiêu.

Bên trong các tập lệnh msbuild, bạn có thể thấy các mục tiêu khác nhau có tên. Ví dụ, nhóm chứa các mục tiêu Make, Clean và Build mà bạn có thể chỉ định với tham số/t. Cũng vậy với các tập tin dproj. Các tệp dproj cũng có mục tiêu Tái xây dựng. Nó làm sạch và sau đó là một xây dựng. Nếu bạn muốn có cùng một hiệu ứng cho groupfile, bạn có thể chỉ định hai mục tiêu:/t: Clean; Build

Bạn cũng sẽ tìm thấy nhiều tham số trong đó có thể đặt bằng/p. Ví dụ như cấu hình để xác định cấu hình hoặc DCC_Quiet để hướng dẫn dcc32 ngừng xuất các khoảng trắng vô dụng.

Vì vậy, làm một xây dựng với cấu hình phát hành từ dòng lệnh là lệnh này:

msbuild mygroup.groupproj /p:Configuration=Release /t:Build 

từ chối trách nhiệm: Tôi đã xem xét các file msbuild Delphi 2007. Các phiên bản Delphi sau này có thể đã thay đổi tên của các mục tiêu hoặc tham số. Chỉ cần có một cái nhìn bên trong các kịch bản msbuild để tìm ra cái nào.

+1

Nó rất hữu ích để biết bạn có thể làm/t: Xây dựng trên a groupproj –

+0

@ldsandon: vâng, RAD và tài liệu không đi cùng nhau ... – mjn

+1

@ldsandon: Microsoft chịu trách nhiệm ghi lại tài liệu MSBuild; sau khi tất cả, nó là sản phẩm của họ. Có lẽ bạn nên kiểm tra trang web của họ - [MSDN] (http://msdn.microsoft.com) cho [tham khảo MSBuild] (http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx)? –

4

Tôi không chắc đây có phải là thứ bạn cần hay không, nhưng tôi có CruiseControl.NET thiết lập để thực hiện tích hợp liên tục - và kiểm tra DUnit - cho Delphi 2009. CCNET có một bộ nhiệm vụ cụ thể cho MSBuild và một vài thiết lập vấn đề, nó hoạt động hoàn hảo cho tôi.

Tôi có thể cho bạn biết tôi phải làm gì nếu bạn cần.

Đánh dấu

+0

Bạn đã thử TeamCity chưa? Nó có một giấy phép 'Chuyên nghiệp' miễn phí. – mjn

+0

Tôi quan tâm đến CruiseControl.NET. Xin vui lòng gửi một liên kết đến bất kỳ "Delphi với CruiseControl.NET" thông tin bạn có. –

+0

Bạn có thể nhìn vào Blog của tôi, tôi nghĩ có gì đó ở đó. Nếu không, tôi chắc chắn có thể thêm một cái gì đó, như tôi vừa nâng cấp lên phiên bản mới nhất. – Mmarquee

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