2012-04-30 25 views
5

tôi có hệ thống:chạy xây dựng trên cc.net nếu từ nhất định mới có một cam kết đăng

  • svn - điều khiển phiên bản
  • cc.net - như máy chủ ci
  • msbuild - như một xây dựng hệ thống
  • nunit - để chạy thử nghiệm
  • webdriver - để kiểm tra web.

Bây giờ các thử nghiệm của tôi được chạy tự động sau mỗi lần commit. Nhưng tôi muốn chạy thử nghiệm của tôi nếu cam kết có bình luận #runautotest (hoặc khác).

Tôi đã điều tra trình kích hoạt của cc.net nhưng đó là các mục tiêu khác. Tôi cố gắng tìm một số thông tin về các bản ghi phân tích cú pháp cc.net nhưng điều này không có kết quả tích cực.

Tôi nên sử dụng những cách nào để giải quyết vấn đề của mình?

Trả lời

3

Trong cấu hình ccnet, trong dự án, ở phía trên cùng của khối nhiệm vụ:

<modificationWriter> 
<filename>svn_mods.xml</filename> 
<path>c:\modsdir</path> 
</modificationWriter> 

này sẽ viết những sửa đổi SVN vào một tập tin.

Tiếp theo trong khối công việc:

<nant> 
<executable>c:\path_to_nant</executable> 
<buildFile>mybuildfile.build</buildFile> 
<targetList> 
    <target>conditionally_run_nunit_tests</target> 
</targetList> 
</nant> 

này sẽ chạy một nhiệm vụ Nant sau khi nhiệm vụ modificationwriter.

Trong conditionally_run_nunit_tests, tìm file c: \ modsdir \ svn_mods.xml cho #runautotest.Nếu bạn tìm thấy nó, hãy chạy thử nghiệm. Nếu bạn không tìm thấy nó thì không làm gì cả. Có nhiều cách khác nhau để phân tích cú pháp tệp mod. Bạn có thể sử dụng C# script để đọc toàn bộ tập tin vào một chuỗi và sau đó gọi Chứa đi qua trong #runautotest.

Đoạn mã dưới đây là ví dụ về cách sử dụng tập lệnh C# ở Nant. SearchFile mở một tệp, đọc nó thành một chuỗi và kiểm tra xem một giá trị có nằm trong chuỗi không. Nó trả về "có" hoặc "không". Tập lệnh dưới đây chưa được kiểm tra.

<property name="yesno" value="${ns::SearchFile("c:\modsdir\svn_mods.xml", "#runautotest")}"/> 

<script language="c#" prefix="ns"> 
    <references> 
     <include name="System"/> 
     <include name="System.IO"/> 
    </references> 
    <code> 
    <![CDATA[ 
    [Function("SearchFile")] 
    public static string SearchFile(string filepath, string token) 
    { 
     System.IO.StreamReader myFile = new System.IO.StreamReader(filepath); 
     string myString = myFile.ReadToEnd(); 
     myFile.Close(); 
     if(myString.Contains(token)) return "yes"; 
     else return "no"; 
    }    
    ]]> 
    </code> 
</script> 
+0

+1 cho câu trả lời hoàn chỉnh. – TridenT

+0

Thanx !!!!!!!!!!! –

0

Khi phiếu bầu của câu hỏi cho biết, điều này có vẻ là vấn đề quan trọng hơn. Tôi sẽ thử: Theo như tôi đã hiểu được thiết lập, CCNET là leader of the pack, giám sát SVN để thay đổi mã nguồn, nhận các nguồn, kích hoạt MSBuild để xây dựng chúng và kích hoạt NUnit và WebDriver để thực hiện kiểm tra đơn vị và web.

Quyết định về việc có nên thực hiện kiểm tra hay không được thực hiện tùy thuộc vào thẻ bắt đầu bằng # được xác định trong các bình luận sửa đổi SVN. SVN trên một mặt và NUnit và WebDriver trên khác được kết hợp thông qua CCNET chỉ.

Vì vậy, trước hết, tôi sẽ đảm bảo rằng thẻ bắt đầu bằng # có chứa chú thích này có sẵn trong CCNET ở đâu đó. Tôi không phải là một chuyên gia SVN nhưng tôi sẽ giả định rằng tất cả các ý kiến ​​trong nhật ký sửa đổi CCNET. Bạn có thể xác minh điều này không?

Tiếp theo việc thực hiện các kiểm tra cần được thực hiện có điều kiện. Cấu hình của CCNET là một điều khá tĩnh. Cấp với sự ra đời của DynamicValues trong CCNET 1.5 và ConditionalTasks trong CCNET 1.6 cấu hình trở nên năng động hơn và bây giờ bạn có dòng điều khiển trong CCNET, nhưng vì tôi hơi lỗi thời, tôi sẽ ủng hộ việc thực thi kiểm tra gói trong kịch bản xây dựng sử dụng ví dụ MSBuild hoặc NAnt và đặt đánh giá nhật ký sửa đổi trong đó.

Cập nhật: Hãy xem Adam's answer. Ví dụ này là khá gần với những gì tôi đã có trong tâm trí (mặc dù tôi đã sử dụng <xmlpeek> thay vì <script>).