2012-02-27 28 views
11

Chúng tôi cũng đang triển khai môi trường tích hợp liên tục bằng cách sử dụng TeamCity. Khi chúng tôi làm việc thông qua quy trình CI và chuyển sang triển khai liên tục, chúng tôi đã gặp sự cố với cách chúng tôi quản lý mật khẩu sản xuất. Đối với các thay đổi khác trong cấu hình, chúng tôi sử dụng biến đổi Web.Config. Tuy nhiên, tôi không thực sự muốn nướng mật khẩu sản xuất trong hồ sơ xây dựng.Quản lý mật khẩu trong việc triển khai liên tục

Trước CI/CD, chúng tôi sẽ sử dụng Web.config, sử dụng aspnet_regiis để giải mã các chuỗi kết nối, thay đổi mật khẩu, sau đó mã hóa lại. Rõ ràng, đây là lỗi dễ bị và không phải ở tất cả trong tinh thần của CI/CD.

Tôi đã có một vài suy nghĩ cơ bản về việc sử dụng một cái gì đó trong kịch bản triển khai để viết lại và sau đó mã hóa phần chuỗi kết nối của tệp, nhưng có vẻ như đây là một vấn đề phổ biến và phải là một số giải pháp được chấp nhận chung. Nhưng cho đến nay, tôi không thể tìm thấy nó. Có một "cách đúng" không?

Cảm ơn!

+1

Nếu bạn định chuyển sang CD, thì rõ ràng * thứ gì đó * trong chuỗi xây dựng/triển khai của bạn phải biết mật khẩu (hoặc proxy cho mật khẩu). –

+0

có thể trùng lặp của [Làm thế nào để cấu hình TeamCity với các tập tin cá nhân?] (Http://stackoverflow.com/questions/6721000/how-to-configure-teamcity-with-private-files) –

+1

@Damien_The_Unbeliever Có, nhưng cái gì đó có thể là máy chủ TeamCity, được truy cập bởi một nhóm người khác với VCS của bạn. – thelem

Trả lời

12

Một giải pháp khả thi, có sẵn từ TeamCity 7.0, là sử dụng các thông số đã nhập (http://confluence.jetbrains.net/display/TCD7/What%27s+New+in+TeamCity+7.0#What%27sNewinTeamCity7.0 -Typedbuildparameters). Bạn có thể định nghĩa một tham số trong TeamCity của loại mật khẩu, và truyền nó bằng cách nào đó để kịch bản xây dựng của bạn (hoặc là biến môi trường hoặc là thuộc tính kịch bản xây dựng của bạn).

TeamCity lưu trữ các giá trị của các thông số như vậy trong các tệp cấu hình của riêng nó và trong cơ sở dữ liệu ở dạng tranh giành. Nếu mật khẩu xuất hiện trong nhật ký xây dựng hoặc trên trang thông số xây dựng, mật khẩu sẽ được thay thế bằng *.

+0

Lưu ý rằng mật khẩu thô có thể xuất hiện trong nhật ký và thậm chí là trang TeamCity cho biết: 'Đặt thông số để nhập mật khẩu không đảm bảo rằng không thể truy xuất giá trị thô.' Tình huống tôi gặp phải: Khi lệnh git push không in được dòng' URL được yêu cầu trả về: 400 Yêu cầu không hợp lệ khi truy cập '. Vì vậy, nếu bạn sử dụng git url với mật khẩu thông tin người dùng/mật khẩu ở đây sẽ không được thay thế bằng **** ngay cả khi bạn đã nhập theo cách thích hợp –

2

Sử dụng chuyển đổi cấu hình. Bạn thậm chí có thể xây dựng phép biến đổi của riêng bạn mà có thể xử lý mã hóa/giải mã. Cách dễ nhất là mã hóa các chuỗi sản xuất trong tệp release.web.config và sử dụng phép biến đổi để xử lý thay thế các chuỗi kết nối.

http://msdn.microsoft.com/en-us/library/dd465318.aspx

http://sedodream.com/2010/09/09/ExtendingXMLWebconfigConfigTransformation.aspx

Nếu điều này không làm việc cho bạn, sử dụng một sự kiện postbuild gọi aspnet_regiis. Nếu bạn chọn mở rộng chuyển đổi cấu hình, bạn có thể làm bất cứ điều gì với nó. Các khóa mã hóa có thể nằm trên mặt trăng miễn là bạn có thể nhận được chúng.

+0

Nó không phải là dễ dàng, nơi bạn sẽ lưu trữ các khóa mã hóa? – oleksii

+0

Làm thế nào về một sự kiện postbuild? Tôi không biết nếu bạn có thể làm điều đó trong TeamCity, nhưng Jenkins hỗ trợ nó. – Darthg8r

0

Bạn không thể xác định chuỗi kết nối IN iis. Họ có thay đổi rất nhiều? Tôi nghĩ rằng tôi chỉ cần đặt chúng trong IIS cho một trang web, và sau đó không triển khai chúng như là một phần của ứng dụng, hoặc ít nhất là sở thích của các thiết lập IIS của tôi.

+2

Tôi nghĩ rằng các công cụ IIS chỉ cung cấp một front-end tốt đẹp để chỉnh sửa tập tin web.config của ứng dụng, mặc dù tôi không thể tìm thấy tài liệu xác nhận rằng bây giờ. – Jacob

+0

Nếu bạn đang thực hiện phân phối/triển khai liên tục thì máy chủ xây dựng phải chịu trách nhiệm về cấu hình của IIS. Đây không phải là bước thủ công. –

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