Làm cách nào để đồng bộ số sửa đổi SVN với trang web ASP.NET của tôi?


93

Stack Overflow có số phiên bản lật đổ ở dưới cùng:

svn sửa đổi: 679

Tôi muốn sử dụng lập phiên bản tự động như vậy với .NET Web Site/Applicationcác dự án / giải pháp WPD, Windows Forms, WPD của tôi .

Làm cách nào để thực hiện điều này?


@Balloon Nếu bạn đang sử dụng TortoiseSVN, bạn có thể sử dụng chương trình SubWCRev đóng gói . Nó truy vấn một bản sao đang hoạt động và chỉ cho bạn biết số bản sửa đổi cao nhất. Phải thừa nhận rằng đây có vẻ là cách tiếp cận phía máy khách đối với vấn đề phía máy chủ, nhưng vì đây là một chương trình dòng lệnh tốt, bạn sẽ có thể nắm bắt đầu ra của nó để sử dụng khá dễ dàng.
nickf 15/09/08

Nếu bạn không sử dụng TortoiseSVN cho SubWCRev như tôi đã nói ở đây , bạn có thể sử dụng svnversion thực hiện điều tương tự.
nickf

Câu trả lời:


31

Có vẻ như Jeff đang sử dụng CruiseControl.NET dựa trên một số nội dung thông qua bản ghi podcast. Điều này dường như có khả năng triển khai tự động từ kiểm soát nguồn đến sản xuất. Đây có thể là nơi mà việc chèn đang diễn ra?


2
Nếu bạn không sử dụng CruiseControl.Net thì hãy xem câu trả lời của tôi (phích cắm không biết xấu hổ!) - stackoverflow.com/questions/163/… ; o)
Andrew

liên kết bị phá vỡ @saint_groceon
Cacho ông già Noel

27

Chúng tôi làm điều này với xUnit.net cho các bản dựng tự động của chúng tôi. Chúng tôi sử dụng CruiseControl.net(và đang dùng thử TeamCity). Tác vụ MSBuild mà chúng tôi chạy để tích hợp liên tục sẽ tự động thay đổi số bản dựng cho chúng tôi, vì vậy tệp ZIP bản dựng kết quả chứa một tập hợp các tệp DLL và EXE được phiên bản phù hợp.

Tệp MSBuild của chúng tôi chứa tham chiếu usingTask cho một DLL thay thế biểu thức chính quy: (bạn có thể sử dụng DLL này, vì nó cũng được cấp phép bởi MS-PL)

  <UsingTask
     AssemblyFile = "3rdParty \ CodePlex.MSBuildTasks.dll"
     TaskName = "CodePlex.MSBuildTasks.RegexReplace" />

Tiếp theo, chúng tôi trích xuất số bản dựng, được cung cấp tự động bởi hệ thống CI. Bạn cũng có thể yêu cầu nhà cung cấp kiểm soát nguồn của mình cung cấp số bản sửa đổi nguồn nếu bạn muốn, nhưng chúng tôi thấy rằng số bản dựng trong hệ thống CI hữu ích hơn, bởi vì không chỉ có thể xem kết quả tích hợp theo số bản dựng CI mà còn cung cấp liên kết trở lại (các) tập hợp thay đổi được bao gồm trong bản dựng.

 <! - Xếp tầng cố gắng tìm số bản dựng ->

 <Điều kiện PropertyGroup = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (BUILD_NUMBER) </BuildNumber>
 </PropertyGroup>
 <Điều kiện PropertyGroup = "'$ (BuildNumber)' == ''">
   <BuildNumber> $ (ccnetlabel) </BuildNumber>
 </PropertyGroup>
 <Điều kiện PropertyGroup = "'$ (BuildNumber)' == ''">
   <BuildNumber> 0 </BuildNumber>
 </PropertyGroup>

(Chúng tôi thử BUILD_NUMBER, từ TeamCity, sau đó ccnetlabel, từ CC.net và nếu không có, chúng tôi mặc định là 0 để chúng tôi có thể kiểm tra tập lệnh tạo tự động theo cách thủ công.)

Tiếp theo, chúng tôi có một nhiệm vụ đặt số bản dựng thành tệp GlobalAssemblyInfo.cs mà chúng tôi liên kết vào tất cả các dự án của mình:

 <Target Name = "SetVersionNumber">
   <RegexReplace
       Pattern = 'AssemblyVersion \ ("(\ d + \. \ D + \. \ D +) \. \ D +" \)'
       Replacement = 'AssemblyVersion ("$ 1. $ (BuildNumber)")'
       Files = 'GlobalAssemblyInfo.cs' />
   <Exec Command = "cred -r xunit.installer \ App.manifest" />
 </Target>

Thao tác này tìm thuộc tính AssemblyVersion và thay thế số phiên bản abcd bằng abcBuildNumber. Chúng tôi thường sẽ để nguồn được kiểm tra trong cây với ba phần đầu tiên của số trình tạo là cố định và phần thứ tư là 0 (fe, hôm nay là 1.0.2.0).

Trong quá trình xây dựng của bạn, hãy đảm bảo rằng tác vụ SetVersionNumber đứng trước tác vụ xây dựng của bạn. Cuối cùng, chúng tôi sử dụng tác vụ Zip của mình để nén các kết quả xây dựng để chúng tôi có lịch sử về các tệp nhị phân cho mọi bản dựng tự động.


25

Bạn có thể làm điều đó bằng cách thêm phần sau vào bất kỳ đâu trong mã của bạn

$Id:$

Vì vậy, ví dụ @Jeff đã làm:

<div id="svnrevision">svn revision: $Id:$</div>

và khi được kiểm tra trong máy chủ đã thay thế $ Id: $ bằng số sửa đổi hiện tại. Tôi cũng tìm thấy tài liệu tham khảo này .

Ngoài ra còn có $ Ngày: $ , $ Rev: $ , $ Bản sửa đổi: $


Bạn cần đảm bảo rằng các Tệp cũng được đặt Thuộc tính svn: keywords, nếu không thì $ Id $, v.v. không được tự động thay thế. Xem này trang. (Cuộn xuống svn: từ khóa)
Michael Stum

1
Tôi vừa thử điều này bằng cách sử dụng $ Rev $ và nó hoạt động - ở một mức độ nào đó. Vấn đề là nó dường như chỉ cập nhật từ khóa khi tệp mà nó xuất hiện bị thay đổi. Điều này có nghĩa là nếu các thay đổi được thực hiện đối với dự án mà không ảnh hưởng đến tệp có $ Rev $ trong đó (trong trường hợp của tôi là trang chính ASP.NET của tôi), thì dự án sẽ có bản sửa đổi cao hơn so với được hiển thị cho người dùng . Có ai có bất kỳ suy nghĩ về điều này? Có cách nào để SVN luôn cập nhật từ khóa trong file không?
Chris Roberts

5
Điều này sẽ không chỉ chèn số sửa đổi của thay đổi cuối cùng vào tệp cụ thể đó? Tôi đã thử thiết lập kho lưu trữ hai tệp và thay đổi một kho lưu trữ, đồng thời thử xuất và kiểm tra, và tệp còn lại vẫn ở mức 1 trong cả hai trường hợp.
Lasse V. Karlsen

lassevk là đúng, điều này chỉ thay đổi khi bản thân tệp thay đổi.
Bruno Lopes

Sử dụng VisualSVN và TortoiseSVN, thêm $ Id: $ chỉ khiến trang hiển thị "$ Id: $". Có thể hữu ích khi lưu ý câu trả lời này hoạt động theo máy chủ / máy khách nào.
Travis

17

Nếu bạn đang sử dụng ASP.Net MVC(như StackOverflow), tôi đã viết một hướng dẫn 3 bước dễ thực hiện về cách tự động tải và hiển thị bản sửa đổi SVN mới nhất . Người hướng dẫn được truyền cảm hứng khi tôi tự nghĩ về câu hỏi này! : o)


Âm thanh tuyệt vời, Liên kết bị hỏng mặc dù!
Peter C

1
Đây là một giải pháp tuyệt vời để chúng tôi tự động hiển thị phiên bản dựa trên các bản sửa đổi SVN của chúng tôi. Một lợi thế là nó không yêu cầu cuộc gọi đến máy chủ SVN của bạn.
Ben Elder

liên kết bị hỏng, hoặc trang web là xuống
Cacho ông già Noel

1
Cảm ơn @cacho, cố định - đó là một lỗi máy chủ [sic]; o)
Andrew

10

@Balloon Nếu bạn đang sử dụng TortoiseSVN, bạn có thể sử dụng chương trình SubWCRev đóng gói . Nó truy vấn một bản sao đang hoạt động và chỉ cho bạn biết số bản sửa đổi cao nhất. Phải thừa nhận rằng đây có vẻ là cách tiếp cận phía máy khách đối với vấn đề phía máy chủ, nhưng vì đây là một chương trình dòng lệnh tốt, bạn sẽ có thể nắm bắt đầu ra của nó để sử dụng khá dễ dàng.


9

$revvà những người khác thích nó là bản sửa đổi cho các tệp riêng lẻ, vì vậy chúng sẽ không thay đổi trừ khi tệp thay đổi. Số trên trang web là (rất có thể, tôi đang giả định ở đây) số sửa đổi svn cho toàn bộ dự án. Điều đó khác với các bản sửa đổi tệp mà những người khác đã trỏ tới.

Trong trường hợp này, tôi giả định rằng CCNET đang lấy số sửa đổi của dự án và viết lại một phần của trang web với số đó. Bất kỳ giải pháp CI nào cũng có thể thực hiện việc này, hãy tự thiết lập điều này với CCNET và Teamcity (mặc dù không phải là các trang web, nhưng tự động lập phiên bản của các phiên bản triển khai / lắp ráp).

Để bạn làm điều này, hãy sử dụng giải pháp CI hỗ trợ nó hoặc sử dụng quy trình xây dựng của bạn (MSbuild / Nant) để lưu trữ phiên bản đó và ghi nó vào các tệp trước khi "triển khai" nó.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.