Sau hai ngày "nghiên cứu" đầy đủ (đọc: đập đầu vào bàn phím của tôi) và nguyền rủa tài liệu TeamCity / MSDN / Tomcat cũng như các ràng buộc IIS ảo, tôi đã đưa ra câu trả lời cho một vấn đề rất khó hiểu: Làm thế nào có thể Tôi thay đổi địa chỉ IP và số cổng của TeamCity trên máy chủ đa homed chạy Windows Server 2008 cũng như IIS 7 đang phục vụ mục đích cần thiết? .
Đầu tiên, một chút về lý lịch. Máy chủ xây dựng của chúng tôi đang chạy Windows Server 2008 với hai địa chỉ IP (192.168.1.30 và 192.168.1.31) trên một NIC. Tôi đã cấu hình IIS để liên kết rõ ràng một trang web duy nhất của nó với 192.168.1.30 trên cổng 80. Lúc này tôi nghĩ rằng 192.168.1.31 đang mở rộng và sẵn sàng để sử dụng cho TeamCity ... không hoàn toàn.
Khó chịu đầu tiên: khi cài đặt TeamCity, nó hoàn toàn bỏ qua thực tế là có nhiều địa chỉ IP được liên kết với máy chủ này chỉ hỏi cổng nào nên liên kết với cổng nào. Đối với phần mềm cấp máy chủ, điều này khá đáng ngạc nhiên.
Khó chịu thứ hai: TeamCity mặc định là cổng 8080 (wha ??). Do sự phiền toái đầu tiên, việc lựa chọn cổng có phần mơ hồ: TeamCity sẽ liên kết với cổng 8080 trên cả hai địa chỉ IP? Thay đổi lựa chọn cổng thành 80 sẽ đưa ra cảnh báo rằng một dịch vụ khác đã bị ràng buộc với cổng 80. Hmm, IIS chỉ nên được ràng buộc với cổng 80 trên 192.168.1.30; không có gì phải bị ràng buộc trên 192.168.1.31. Rõ ràng TeamCity đang cạnh tranh với IIS vào ngày 192.168.1.30.
Hoàn tất cài đặt của TeamCity, sau khi chọn cổng 80 và bỏ qua cảnh báo ràng buộc, tôi mở "C: \ TeamCity \ server.xml". Sidenote: "C: \ TeamCity \" là thư mục cài đặt mặc định cho TeamCity trong khi "C: \ Users \ .BuildServer" là thư mục dữ liệu mặc định . Dù sao, "server.xml" là tệp cấu hình nơi bạn có thể đặt những thứ như cổng và địa chỉ IP của giao diện web của TeamCity. Sau một chút nghiên cứu, tôi đưa ra cấu hình để liên kết địa chỉ IP 192.168.1.31 trên cổng 80:
Tìm kiếm một trong hai
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
hoặc là
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
tùy thuộc vào cổng bạn đã chọn trong khi cài đặt. Thay đổi thành ( lưu ý: thay đổi địa chỉ IP! )
<Connector
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
address="192.168.1.31" />
Nên dễ dàng như vậy, phải không ... phải không? Chà, khởi động lại Máy chủ Web của TeamCity (thông qua Trình quản lý dịch vụ của Windows) không mang lại kết quả gì trong 192.168.1.31. Ừ
Hóa ra, mặc dù trang web một và duy nhất của IIS đã bị ràng buộc rõ ràng với 192.168.1.30 trên cổng 80, IIS vẫn lắng nghe trên tất cả các địa chỉ IP. Điều này, tất nhiên, loại bỏ Máy chủ Web của TeamCity (Tomcat), tạm dừng trước khi trực tuyến. Sau khi tự khởi động Tomcat từ dòng lệnh để phân tích lỗi xuất phát của nó và thậm chí còn nghiên cứu thêm, tôi tình cờ thấy viên ngọc nhỏ này từ StackOverflow: Làm cách nào tôi có thể kiểm soát địa chỉ IP IIS7 sử dụng?
Vì vậy, từ một dòng lệnh Quản trị tôi chạy ( lưu ý: một lần nữa, thay đổi địa chỉ IP! Lần này thành địa chỉ IP mà bạn muốn IIS bị ràng buộc )
Netsh http thêm iplisten ipaddress = 192.168.1.30
Bây giờ tôi khởi động lại Máy chủ web của TeamCity và voila, nó hoạt động !! Tôi có thể duyệt đến 192.168.1.31 mà không phải chỉ định số cổng và giao diện web của TeamCity xuất hiện. Kiểm tra độ tỉnh táo nhanh cho thấy IIS vẫn được liên kết chính xác với 192.168.1.30. Tất cả đều tốt.
Xin lỗi cho bài viết dài cho một sửa chữa đơn giản như vậy. Tôi hy vọng điều này sẽ giúp người khác vì nó chắc chắn sẽ giúp tôi tiết kiệm được nhiều giờ.
Chỉnh sửa: Sau khi sử dụng TeamCity được một lúc, tôi nhận thấy rằng Build Agent đã được cài đặt với TeamCity không được nhận dạng chính xác. Để khắc phục điều này, tôi đã phải trỏ Đại lý xây dựng tới URL mới cho TeamCity. Thay đổi cấu hình này được thực hiện trong "C: \ TeamCity \ buildAgent \ conf \ buildAgent.properies". Một lần nữa, đây là đường dẫn cho cài đặt mặc định của TeamCity và có thể khác nhau tùy thuộc vào cách bạn tùy chỉnh cài đặt TeamCity.
Bên trong "buildAgent.properies" đảm bảo "serverUrl" trỏ đến URL TeamCity mới. Trong trường hợp của tôi, tôi đã cập nhật nó thành:
máy chủUrl = http \: //192.168.1.31
Sau khi thực hiện thay đổi này, hãy khởi động lại cả TeamCity Web Server và TeamCity Build Agent.