2011-11-18 28 views
8

Tôi đang cố gắng triển khai quy trình làm việc của Trình quản lý tích hợp đã sửa đổi tương tự như những gì được mô tả trong ProGit.Trình quản lý tích hợp Git Workflow bằng cách sử dụng Jenkins/Hudson

Diagram of the Integration-Manager workflow

Thay vì một integration manager thực hiện thao tác trộn, tôi muốn các nhà phát triển để hợp nhất tại địa phương trước khi xuất bản mã của họ, và tôi muốn có một Quality Gateway rằng thực thi các tiêu chuẩn tích hợp liên tục của chúng tôi, chẳng hạn như một mức tối thiểu của mã số bảo hiểm và 100 % kiểm tra đi qua, trước khi cho phép mã để vào kho chứa may mắn được kiểm tra bởi các nhà phát triển khác. Ý tưởng là mã trong kho chứa may mắn luôn đáp ứng tiêu chuẩn tối thiểu mà chúng tôi xác định và luôn luôn xây dựng.

Tôi muốn Jenkins thực hiện vai trò của cổng thông tin chất lượng, chỉ đẩy mã vào kho lưu trữ may mắn khi xây dựng thành công.

Cho đến nay, tôi đã thiết lập hệ thống để có các repos công cộng sau: kho lưu trữ may mắn, kho lưu trữ trên máy chủ xây dựng cho Jenkins, một repo trần được truy cập thông qua gitosis, và tất nhiên kho của chính nhà phát triển .

Tôi có nhà phát triển kéo từ repo may mắn và đẩy đến repo tích hợp. Bây giờ tôi đang cố gắng để có được Jenkins để đẩy thành công xây dựng từ repo hội nhập để repo may mắn.

Cho đến nay, tùy chọn duy nhất tôi thấy có vẻ giống với những gì tôi đang cố gắng đạt được là tùy chọn "Push Only If Build Succeeds" trong cài đặt Nhà xuất bản Git của cấu hình dự án Xây dựng bài đăng trong cấu trúc dự án của Jenkins. Tuy nhiên, các tùy chọn đó không cho phép bạn chỉ định url đẩy hoặc điều khiển từ xa để đẩy tới.

Như tôi đã hiểu, cài đặt Git Publisher sẽ đẩy các bản sao của Jenkins vào không gian làm việc của nó trở lại repo công cộng của Jenkins, nhưng tôi muốn đẩy tới một kho lưu trữ khác.

Có ai có bất kỳ đề xuất nào về cách tôi có thể đưa Jenkins đẩy vào repo được ưu đãi không?

CHỈNH SỬA 0: Tôi đã thử đặt Bước đăng để thực thi lệnh đẩy tới kho lưu trữ may mắn của mình. Điều này dường như hoạt động, trong đó không có lỗi. Tuy nhiên không có thay đổi đang được đẩy và các bản ghi cho thấy git nghĩ tất cả mọi thứ được cập nhật:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO]  ------------------------------------------------------------------------ 
[INFO] Total time: 1 minute 7 seconds 
[INFO] Finished at: Fri Nov 18 16:10:50 UTC 2011 
[INFO] Final Memory: 19M/45M 
[INFO] ------------------------------------------------------------------------ 
channel stopped 
[My Project] $ /bin/sh -xe /tmp/hudson5604254372179801803.sh + git push [email protected]:my-project.git --all 
Everything up-to-date 

Tôi không biết tại sao git nghĩ không có gì để đẩy là, vì có chắc chắn là.

Trả lời

1

Bạn đã cân nhắc thêm Gerrit vào quy trình làm việc của mình chưa. Thay đổi được đẩy tới Gerrit và sau đó CI của bạn chạy một bản dựng và báo cáo về các bài kiểm tra của bạn. Nó có thể được thiết lập để các chấp thuận khác (như đánh giá mã được ủy quyền) là cần thiết trước khi nó được sáp nhập vào repo may mắn của bạn. EGit sử dụng nó trong sự phát triển của họ, http://egit.eclipse.org/r/. Cũng có những thảo luận khác về quy trình làm việc này, như blog của alblue.

+0

Có vẻ thú vị, nhưng điều duy nhất nó cho biết quy trình hiện tại của chúng tôi không có là quy trình đánh giá được chính thức hóa. Các dự án của chúng tôi bị quấy rối, vì vậy nếu họ vượt qua công trình, chúng tôi biết rằng họ vượt qua các bài kiểm tra và các yêu cầu khác mà chúng tôi đã xác định.Nó dường như không thêm đủ (cho quá trình của chúng tôi) để biện minh cho việc có một công cụ khác làm phức tạp môi trường của chúng ta. Tôi sẽ ghi nhớ như nhu cầu của chúng tôi thay đổi mặc dù, cảm ơn! – chrisbunney

+0

Tôi hiểu sự cần thiết phải hạn chế sự phức tạp :-) Tôi chỉ có nghĩa là nó thêm cả đánh giá và nó báo cáo kết quả CI/Test pass trên mỗi thay đổi trước khi nó được cam kết repo may mắn của bạn. –

+0

Vâng, nó sẽ là tốt khi chúng tôi nhận được đến giai đoạn đó :) – chrisbunney

2

Làm thế nào về việc sử dụng hành động "Push Only If Build Succeeds" của Jenkins, với móc hậu hoặc móc sau khi nhận trên kho lưu trữ tích hợp, để đẩy tới kho chứa may mắn bất cứ khi nào Jenkins đẩy sau khi xây dựng thành công?

+0

Điều đó trông giống như con đường để đi, nhờ – chrisbunney

+0

+1, mặc dù nó đáng chú ý rằng điều này sẽ chỉ đẩy chi nhánh mà kích hoạt sự thay đổi. Nếu bạn đã đẩy thẻ hoặc thay đổi nhiều hơn 1 chi nhánh, chúng sẽ không bị đẩy (Chúng tôi hiện đang sử dụng 1 dự án cho mỗi repo, thay vì thiết lập 1 dự án cho mỗi chi nhánh, vì chúng tôi tạo ra nhiều nhánh mà chúng tôi muốn đẩy thông qua tích hợp liên tục) – chrisbunney

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