2011-07-24 39 views
9

Nhóm của chúng tôi sử dụng jenkins và git. Chúng tôi đang tìm cách để thực hiện các tính năng tiên tiến của plugin git cho phép xây dựng trước trước khi đẩy cam kết vào kho chứa may mắn. Xem https://wiki.jenkins-ci.org/display/JENKINS/Git+Plugin#GitPlugin-AdvancedFeaturesgit jenkins tính năng nâng cao

Tuy nhiên, tôi không hiểu được toàn bộ quá trình.

Dưới đây là một đoạn trích:

Thiết lập dự án Jenkins của bạn, và rời khỏi trường 'chi nhánh' vào chỗ trống Git SCM. Điều này sẽ khiến Jenkins xem xét bất kỳ thay đổi nào trên bất kỳ chi nhánh nào để xây dựng.

Tiếp theo, chọn tên chi nhánh cụ thể làm mục tiêu tích hợp trong phần 'Nâng cao' - (ví dụ: 'chính' hoặc 'ổn định') và chọn 'Hợp nhất trước khi tạo'.

Chọn 'Đẩy thẻ GIT trở lại kho gốc' từ các hành động sau xây dựng (điều này là bắt buộc để cập nhật repo git tập trung của bạn với kết quả của bản dựng).

Bây giờ, nhà phát triển không bao giờ nên cam kết trực tiếp đến nhánh tích hợp của bạn ('chủ' hoặc 'ổn định'). Thay vào đó, họ nên sử dụng các nhánh tính năng hoặc tạo các nhánh mới từ xa trên cam kết (ví dụ: "git push origin HEAD: refs/heads/myNewFeature"). Bạn cũng có thể thiết lập kho lưu trữ GIT của bạn để chỉ chấp nhận các cam kết vào nhánh tích hợp từ Jenkins.

Bạn đã hoàn tất. Các cam kết bây giờ sẽ được tự động hợp nhất với nhánh tích hợp (chúng sẽ thất bại nếu chúng không hợp nhất một cách sạch sẽ) và được xây dựng. Nếu việc xây dựng thành công, kết quả của việc hợp nhất sẽ được đẩy trở lại kho lưu trữ git từ xa.

Những gì tôi hiểu là,

  1. phát triển tạo ra các chi nhánh từ xa, từ đó Jenkins sẽ kéo từ
  2. Jenkins sẽ hợp nhất các chi nhánh với chi nhánh hội nhập và xây dựng
  3. Nếu việc xây dựng thành công, hợp nhất sẽ được đẩy đến may mắn/repo/master.

Câu hỏi đặt ra là, nếu việc xây dựng không thành công, trạng thái của nhánh hội nhập là gì? Tôi sẽ chỉ giả định rằng nó bằng cách nào đó trở lại cam kết trước khi hợp nhất. Nếu không, thì nhánh tích hợp sẽ giữ hợp nhất đã phá vỡ bản dựng, khiến cho các nhánh khác không thể được hợp nhất và xây dựng.

Điều này có đúng không? Thật không may, nó không rõ ràng từ wiki.

Ngoài ra, có ai biết ví dụ tôi có thể xem không?

+0

Tôi có một câu hỏi tương tự ở đây, cụ thể là [cách sử dụng Jenkins trước khi xây dựng chi nhánh sáp nhập chỉ cho các chi nhánh tôi thực sự muốn hợp nhất] (http://stackoverflow.com/questions/22732145/how-to-use-jenkins -pre-build-branch-merg-chỉ-cho-chi nhánh-i-muốn-hợp nhất) thay vì tất cả những cái – nh2

+0

Kiểm tra bài viết này: http: //www.yegor256.com/2014/07/24/rultor-automated-merging.html – yegor256

Trả lời

2

Từ những gì tôi có thể thấy trong những GitSCM.checkout method, hợp nhất bắt đầu đầu tiên của một thanh toán, và, nếu việc hợp nhất thất bại, khôi phục lại ngành ứng cử viên với thanh toán khác:

// checkout origin/blah 
ObjectId target = git.revParse(mergeOptions.getRemoteBranchName()); 

git.checkoutBranch(paramLocalBranch, target.name()); 

try { 
    git.merge(revToBuild.getSha1().name()); 
} catch (Exception ex) { 
    // We still need to tag something to prevent 
    // repetitive builds from happening - tag the 
    // candidate 
    // branch. 
    git.checkoutBranch(paramLocalBranch, revToBuild.getSha1().name()); 
    [... tag applied ...] 
    buildData.saveBuild(new Build(revToBuild, buildNumber, Result.FAILURE)); 
    throw new AbortException("Branch not suitable for integration as it does not merge cleanly"); 
} 

Vì vậy, tôi không nghĩ rằng một hợp nhất không thành công có bất kỳ hậu quả nào đối với các bản dựng tiếp theo.

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