2009-02-10 22 views
6

Vì vậy, tôi đã giết bản dựng ngày hôm nay bằng cách kiểm tra trong tệp cấu hình. Nó biết nơi máy chủ là (nghĩ SQL server hoặc tương tự), và tôi đã làm việc chống lại máy chủ chạy trên hộp của tôi. Thông thường, hay đúng hơn, trong các trường hợp khác, chúng tôi sẽ chạy với máy chủ trung tâm. Việc xây dựng hàng ngày, tất nhiên, đã không tìm thấy 'máy chủ của tôi', do đó vỡ. Sau đó, một lần nữa, chỉnh sửa các tập tin cấu hình để trỏ đến máy chủ 'bình thường' trước khi checkin, và chỉnh sửa nó một lần nữa sau khi checkin là xu hướng.Tệp có thể chỉnh sửa (ví dụ: tệp cấu hình) và kiểm soát phiên bản - thực tiễn tốt nhất?

Tôi đã bị cám dỗ vì VC chỉ bỏ qua tệp cấu hình để không bị đăng ký vô tình. Mặt khác, kho lưu trữ phải chứa một phiên bản sạch sẽ, có thể sử dụng của tệp. Tôi không thể phớt lờ và kiểm tra nó cùng một lúc, phải không?

Vì vậy, những gì tôi đang tìm kiếm sẽ là một cách để có một tệp, errr, kiểm tra, nhưng không bao giờ kiểm tra. Ít nhất trong trường hợp phổ biến nhất - nên tập tin cấu hình thay đổi đáng kể, một số đặc biệt thủ tục để có được phiên bản mới vào kho lưu trữ sẽ có thể thực hiện được.

Nếu bạn folks đã gặp vấn đề này trước đây, tôi muốn được quan tâm về bất kỳ giải pháp bạn đã tìm thấy. Miễn là họ không phá vỡ xây dựng, đó là;)

Trả lời

11

Những gì bạn có thể làm là có tệp cấu hình mặc định không thay đổi, trừ khi một số cấu hình mới được thêm vào. Sau đó, bạn có một tệp khác ghi đè cấu hình của tệp mặc định.

config.Default.xml 
config.User.xml 

Chỉ config.Default.xml được kiểm soát nguồn. config.User.xml chỉ chứa các cấu hình khác nhau cho bạn. Vì vậy, nói rằng bạn đang thử nghiệm trên một máy chủ SQL địa phương, bạn chỉ đặt chuỗi kết nối trong đó và nó sẽ ghi đè lên chuỗi kết nối config.Default.

Hãy xem qua Cấu hình ứng dụng Framwork .Net, hầu hết mọi công việc (nếu không phải tất cả) đều dành cho bạn.

+0

Tôi thứ hai khái niệm này. Chúng ta có hai tệp (hãy gọi chúng là Default.xml và Custom.xml). Cả hai tập tin có thể chứa các thiết lập tương tự, nhưng ứng dụng luôn luôn kiểm tra Custom.xml đầu tiên cho bất kỳ thiết lập nào, trước khi mặc định thành Default.xml) Sau đó, các bản dựng của chúng tôi chỉ chứa Default.xml và bạn giữ Custom.xml cục bộ –

+0

Cám dỗ đánh dấu điều này là 'câu trả lời hay nhất' vì sự ghi đè. Không phải là các câu trả lời khác là xấu, hoàn toàn ngược lại. – doppelfish

2

Một phương pháp tôi đã sử dụng là có hai phiên bản của tệp cấu hình và có tập lệnh trình cài đặt kéo phiên bản chính xác.

  • settings.xml
  • settings.xml-Release

Cả hai tập tin chứa các phím tương tự, nhưng một chứa các giá trị 'dev' và khác chứa các giá trị chúng ta mong đợi để triển khai và được chỉnh sửa trên đồng ruộng.

+0

Tất nhiên, điều này vẫn là vấn đề của một thứ gì đó làm việc với một tệp nhưng không phải –

+0

Chúng tôi đã thực hiện công việc này trong nhiều trường hợp, nhưng tôi thừa nhận rằng tôi thích câu trả lời của Coincoin tốt hơn. ;) – JMD

0

Tôi có hoạt động không, chúng tôi có các tệp cấu hình riêng để triển khai. Vì vậy, các tập tin cấu hình trong các giải pháp của chúng tôi là các phiên bản phát triển và mọi người có thể thay đổi chúng thành nội dung trái tim của họ. Các tệp cấu hình này không bao giờ được triển khai ở bất kỳ đâu.

Các tệp cấu hình được triển khai được lưu trữ ở một vị trí riêng biệt trong nhà cung cấp kiểm soát nguồn của chúng tôi. Nếu ai đó cần thực hiện thay đổi cấu hình sẽ được triển khai, họ phải sửa đổi phiên bản này thay thế.

1

Chúng tôi lưu trữ các loại tệp này trong hệ thống kiểm soát nguồn của chúng tôi và có các thư mục khác nhau cho môi trường mà chúng tôi đang xây dựng.

Vì vậy, chúng ta có:

Dev 
Test 
Live 

Có các thư mục con theo các cho các tập tin cụ thể môi trường khác.

1

Chúng tôi có

  • *. (Config | xml)
  • *. (Config | xml) .cert
  • *. (Config | xml) .production

Hudson xóa tệp ban đầu và triển khai tệp chính xác cho môi trường chính xác (hiện tại chỉ có chứng chỉ).

Điều này cho phép nhà phát triển viết tư liệu và phát triển các tệp cấu hình cấp sản xuất, chứng chỉ và phát triển độc lập và được phiên bản riêng trong SVN.

+0

Vì vậy, tôi cũng đã học về https://hudson.dev.java.net/ theo cách đó. Cảm ơn! – doppelfish

+0

Vì vậy, bỏ phiếu trả lời lên :) –

0

Đối với mỗi tệp cấu hình x, hãy tạo tệp mà bạn thực hiện đăng ký được gọi là x.dist, là cấu hình được phân phối mặc định. Sau khi các nhà phát triển kiểm tra, có một kịch bản sao chép từng tệp x.dist thành x, nơi họ có thể tùy chỉnh x nhiều nhất khi cần thiết. Tập lệnh này có thể được chạy lại để cập nhật các tệp theo các thay đổi lớn hoặc nhà phát triển có thể hợp nhất thủ công các thay đổi của họ.

Để triển khai, bạn có thể kiểm tra tệp triển khai trực tiếp của mình và yêu cầu tập lệnh khởi động tham chiếu rõ ràng (ví dụ: --config x.production).

Phương pháp này được sử dụng, ví dụ như cách phân phối Wordpress (bạn phải sao chép tệp mẫu wp-config.php) hoặc trong dự án phát triển sử dụng autoconf (nơi cấu hình được đặt cấu hình nhưng tệp cấu hình phải được tạo bởi mỗi nhà phát triển, một tệp cấu hình đặc biệt được xây dựng để phân phối trong tarballs tại thời điểm phát hành).

1

Tôi nghĩ câu trả lời được chấp nhận là tốt, nhưng tùy thuộc vào yêu cầu của bạn, nó có thể có những hạn chế.

Chúng tôi sử dụng phương pháp sau. Lưu ý rằng chúng ta có .NET shop bằng cách sử dụng VS và sử dụng các tác vụ MSBuild (sẵn có, cộng đồng và tùy chỉnh).

  • App.config bị bỏ qua bởi kiểm soát phiên bản nhưng có trong dự án.
  • App.default.config đang được kiểm soát phiên bản và cũng được đưa vào dự án. Thay vì những thứ mã hóa cứng có thể thay đổi, ví dụ: chuỗi kết nối db, chúng tôi sử dụng mã thông báo thay thế.

nhiệm vụ BeforeBuild của một dự án tìm kiếm sự tồn tại của App.config và nếu không tìm thấy bản sao App.default.config-App.config. Ngoài ra, máy chủ xây dựng luôn xóa App.config nếu nó tồn tại trên bản dựng CI (đảm bảo cấu hình sạch). Sau đó, chúng tôi cũng sử dụng tác vụ MSBuild Community FileUpdate để thay thế các thẻ bằng các giá trị thích hợp dựa trên bất kỳ thứ gì đang xây dựng dự án.

Ví dụ, một nhà phát triển thanh toán tươi có thể chuỗi kết nối thiết lập db cho một cơ sở dữ liệu địa phương, một đêm xây dựng có thể thiết lập cho db đêm vv

0

Câu trả lời được chấp nhận là tốt.Tuy nhiên, có thể thực hiện những gì bạn muốn (4 năm trước) và duy trì một tệp cấu hình đơn lẻ để kiểm tra và không bao giờ kiểm tra - nếu hệ thống kiểm soát phiên bản của bạn có khái niệm về danh sách thay đổi. Tôi đã thực hiện việc này trong Perforce:

Kiểm tra tệp cấu hình và giữ nó trong danh sách thay đổi của riêng nó. Khi bạn cam kết, chỉ cam kết các danh sách thay đổi khác; điều này rất dễ nhớ nếu bạn đặt tên cho tập tin cấu hình của bạn thay đổi một cái gì đó như "KHÔNG COMMIT".

Lợi thế của hệ thống này là nếu ai đó thay đổi phiên bản sản xuất của tệp cấu hình - tức là phiên bản hiện có trên máy chủ và mọi người đang duy trì phiên bản địa phương đã sửa đổi - thì bạn sẽ được thông báo các xung đột có thể xảy ra khi bạn nhận tệp cấu hình từ máy chủ. Với giải pháp như được đề xuất trong câu trả lời được chấp nhận, bạn có thể giữ im lặng các cài đặt sản xuất mới với cài đặt cục bộ của mình, điều này có thể phá vỡ bản dựng cục bộ của bạn hoặc khiến bạn phá vỡ bản dựng khi bạn cam kết tiếp theo.

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