2012-05-01 32 views
12

Chúng tôi đang di chuyển từ CruiseControl.NET sang Jenkins chỉ để được đồng bộ với một đối tác vì vậy chúng tôi không có hai tập lệnh CI khác nhau. Chúng tôi đang cố gắng để thiết lập Jenkins để làm một cái gì đó tương tự như những gì chúng tôi đã CruiseControl làm mà đã có một máy chủ tập trung gọi các dự án (công việc trong jenkins) trên máy xây dựng từ xa.Một jenkins chủ có thể thực hiện các công việc trên các jenkins từ xa không?

Chúng tôi có nhiều máy xây dựng liên kết với một dự án duy nhất để khi chúng tôi xây dựng dự án từ máy chủ CI tập trung, nó sẽ gọi các dự án trên máy chủ CI từ xa. Các máy chủ CI từ xa sẽ kéo phiên bản từ dự án máy chủ CI tập trung.

Trong CruiseKiểm soát kiểm soát, chúng tôi thiết lập dự án sẽ thực hiện forceBuild trên các dự án từ xa. Các dự án trên máy xây dựng đã sử dụng remoteProjectLabeller để truy xuất số phiên bản để chúng luôn được đồng bộ hóa.

Để lấy số tổng thể xây dựng:

<labeller type="remoteProjectLabeller"> 
    <project>MainProject</project> 
    <serverUri>tcp://central-server:21234/CruiseManager.rem</serverUri> 
</labeller> 

Để gọi các dự án từ xa:

<forcebuild> 
    <project>RemoteBuildMachineA</project> 
    <serverUri>tcp://remote-server:21234/CruiseManager.rem</serverUri> 
    <integrationStatus>Success</integrationStatus> 
</forcebuild> 

Cho đến nay trong Jenkins tôi đã thiết lập một máy chủ thứ cấp như một nô lệ sử dụng khi bắt đầu java web nhưng tôi không biết làm thế nào tôi sẽ có jenkins chủ gọi các thiết lập dự án trên nô lệ.

Tôi có thể thiết lập Jenkins để gọi các dự án (công việc) trên nô lệ không?

Tôi có thể làm cho các nô lệ kéo số phiên bản từ bản chính không?

EDIT -

Hãy để tôi thêm một số thông tin hơn.

  • Máy chủ và máy xây dựng từ xa đều đang chạy Windows.
  • Chúng tôi đã có thuyền trưởng trung tâm CruiseControl khởi động các dự án từ xa cùng một lúc để chúng chạy đồng thời và muốn có điều tương tự với jenkins nếu có thể.

Trả lời

9

Jenkins có khái niệm build agents, có thể phù hợp với kịch bản của bạn tốt hơn - có một bậc thầy kích hoạt công trình xây dựng và nô lệ thực hiện nó. Sau đó, một bản dựng chỉ có thể bị hạn chế đối với một số loại nô lệ (ví dụ: nếu nó phụ thuộc vào một phần mềm cụ thể, không có trên tất cả các tác nhân). Tất cả dữ liệu được quản lý tập trung bởi chủ, mà tôi tin là những gì bạn đang cố gắng đạt được.

+0

+1 yep Tôi đã suy nghĩ về cấu hình trong tư duy Cruise Control. Cảm ơn. –

5

Trong Jenkins, bạn không thể kích hoạt xây dựng trên một nô lệ, tức là nơi xây dựng chạy không được kiểm soát bởi người kích hoạt nó. Nó được điều khiển bởi các thiết lập của công việc. Mỗi công việc có một thiết lập được gọi là "Hạn chế nơi công việc này có thể chạy".

Trong trường hợp của bạn, bạn có thể có hai công việc: A và B. A sẽ bị hạn chế chạy trên "master" và B sẽ được cấu hình để chạy trên "slavename". Sau đó, tất cả những gì còn lại để làm là cho A kích hoạt B.

Nhưng bạn có thêm ràng buộc: Bạn muốn A và B kiểm tra cùng phiên bản từ điều khiển phiên bản và bạn muốn A và B chạy song song. Có rất nhiều cách để thực hiện điều đó nhưng dễ nhất có thể là xác định một công việc đa cấu hình.

Không có cách nào để biến công việc kiểu tự do hiện có thành công việc đa cấu hình, vì vậy bạn sẽ phải tạo một công việc mới.

  • Chọn Công việc mới
  • Chọn Tạo dự án đa cấu hình mới. Thêm tên.
  • Trong Ma trận cấu hình, mở menu thả xuống "Thêm trục".
  • Chọn nô lệ
  • Kiểm tra tổng thể và các nô lệ
  • Thêm thông tin SCM và xây dựng bước (s)

Khi công việc chạy, nó chạy trên cả các bậc thầy và nô lệ. Jenkins đảm bảo chúng xây dựng từ cùng một phiên bản nguồn.

+2

* Trong Jenkins, không thể kích hoạt xây dựng trên một nô lệ, tức là nơi xây dựng chạy không được kiểm soát bởi người kích hoạt nó * - điều này không chính xác 100%. Bạn có thể chỉ định nhãn nút làm tham số với [Node Label Parameter plugin] (https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin) và sau đó sử dụng giá trị của tham số đó trong * Hạn chế ở đâu công việc này có thể chạy * trường. –

+0

Tôi thiết lập một môi trường thử nghiệm với ba máy ảo, a, b và c. A là bậc thầy, b và c là nô lệ. Tôi đã tạo một công việc đa cấu hình và theo ma trận cấu hình, tôi chỉ chọn nút b vì tôi chỉ muốn nó thực hiện trên máy ảo đó. Tuy nhiên khi tôi chạy xây dựng nó chạy nó từ chủ. Tại sao điều này? Tôi đang mong nó chạy nó trên nút mà tôi đã chọn. –

+0

@AndyArismendi, bạn có chắc chắn không? Đi đến công việc, chọn công trình cuối cùng. Nó sẽ hiển thị các quả bóng nhỏ tương ứng với con bạn xây dựng (có thể chỉ một quả bóng, nếu bạn chỉ có một đứa trẻ xây dựng, sau đó nó sẽ nói 'mặc định' bên cạnh nó). Các quả bóng sẽ có màu xanh, đỏ hoặc xám - tùy thuộc vào trạng thái. Nhấp vào một trong những quả bóng không phải màu xám. Đó là trạng thái của con bạn. Đứa trẻ được cho là chạy trên nô lệ 'b'. Công việc cấp cao, mặt khác, có thể chạy bất cứ nơi nào (trừ khi gắn với một nút với một Plact Matrix Tie Parent). –

0

Từ/jenkins/url máy tính, bạn có thể thêm, xóa và cấu hình lại "các nút" là đại lý xây dựng cục bộ hoặc từ xa ".

Công việc sau đó có thể bị hạn chế để chạy trên các đại lý xây dựng cụ thể hoặc tuân theo các quy tắc khác nhau để chọn tác nhân tạo thích hợp từ các đại lý có sẵn.

+0

Tôi xin lỗi, nhưng có vẻ như bạn không nói ở đây bất cứ điều gì mới từ những gì đã được cung cấp trong các câu trả lời trước đó. –

0

Tôi đã suy nghĩ về Jenkins quá nhiều như CruiseControl, nơi công việc được xác định trên máy từ xa. Vì vậy, trong Jenkins các dự án từ xa được xác định trên tổng thể và giao cho một máy từ xa thông qua một đại lý.

Tôi đã sử dụng tác nhân Java Web Start được cài đặt làm dịch vụ cửa sổ trên các máy từ xa. Để có các công việc cụ thể chạy trên các máy từ xa cụ thể, tôi đã định nghĩa từng nút từ xa với một nhãn duy nhất trong cấu hình nô lệ của nó. Để ràng buộc các công việc cụ thể cho các nô lệ cụ thể, tôi đã sử dụng nhãn của nô lệ trong mỗi cấu hình công việc ("Hạn chế nơi mà dự án này có thể chạy").

Để kích hoạt công việc với một công việc chính, tôi đã tạo công việc kiểu tự do chỉ được đặt thành "Xây dựng các dự án khác" và cung cấp danh sách được phân cách bằng dấu phẩy hoặc tên dự án. Công việc này xây dựng các công việc hạ lưu song song.

Tôi vẫn đang tìm cách gửi số bản dựng chính đến công việc hướng xuống để luôn đồng bộ hóa chúng. (Điều này được sử dụng để phiên bản các tệp DLL và như vậy.)

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