Thanh toán nhiều repos git vào cùng một không gian làm việc của Jenkins


127

Sử dụng plugin Jenkins 1.501 và Jenkins Git 1.1.26

Tôi có 3 repo git khác nhau, mỗi dự án có nhiều dự án.

Bây giờ tôi cần kiểm tra tất cả các dự án từ 3 git repos vào cùng một không gian làm việc trên một nô lệ Jenkins. Tôi đã xác định mỗi repo git trong: Quản lý mã nguồn: Nhiều SCM . Nhưng mỗi khi một repo được kiểm tra thì repo trước đó (và các dự án liên quan của nó) sẽ bị xóa.

Tôi đã đọc điều này:

http://jenkins.361315.n4.nabble.com/multipl-git-repose-in-one-job-td4633300.html

nhưng nó không thực sự giúp đỡ. Tôi đã cố gắng chỉ định cùng một thư mục trong Thư mục con cục bộ cho repo (tùy chọn) cho tất cả các repos nhưng nó cho kết quả tương tự.

Nếu điều này đơn giản là không thể sử dụng Jenkins, tôi đoán một số bước xây dựng / kịch bản có thể được sử dụng để di chuyển các dự án vào đúng vị trí. Nó không phải là một tùy chọn để sửa đổi cấu hình xây dựng của các dự án.

Câu trả lời:


69

Không thể kiểm tra nhiều hơn một repo tại một không gian làm việc duy nhất với Plugin Jenkins + Git.

Như một giải pháp thay thế, bạn có thể có nhiều công việc ngược dòng kiểm tra một repo duy nhất và sau đó sao chép vào không gian làm việc dự án cuối cùng của bạn (Có vấn đề về một số cấp độ) hoặc bạn có thể thiết lập một bước kịch bản shell để kiểm tra từng repo cần thiết không gian làm việc tại thời điểm xây dựng.

Trước đây, plugin Nhiều SCM có thể giúp giải quyết vấn đề này nhưng hiện tại nó không được dùng nữa. Từ trang plugin Nhiều SCM: "Người dùng nên di chuyển đến https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+Plugin . Pipeline cung cấp cách kiểm tra nhiều SCM tốt hơn và được Jenkins hỗ trợ nhóm phát triển cốt lõi. "


Tại sao cách tiếp cận đầu tiên có vấn đề? Chia nhỏ công việc có vẻ như thực hành tốt.
RèmDog

1
Đó là một thực tiễn tốt nói chung, nhưng khi bạn cần nhiều kiểm tra trong cùng một bảo trì vị trí vật lý trở thành một mối quan tâm lớn. Chẳng hạn, nếu bạn muốn tạo một bản dựng chi nhánh, bạn sẽ phải sao chép 4 công việc và sau đó thay đổi từng đường dẫn cho từng công việc. Tất nhiên có các plugin để trợ giúp việc này, nhưng việc kiểm tra một đường dẫn tương đối từ một công việc sẽ dễ dàng hơn. Sau đó, bạn có thể sao chép bao nhiêu tùy ý mà không cần thay đổi cài đặt.
CIGuy

1
Bạn cần thay đổi nó từ câu trả lời đúng vì nó không còn phù hợp nữa.
Dvir669

2
Đường ống yêu cầu bạn học DSL mới, một chút quá nhiều cho công việc rất đơn giản (kiểm tra mã từ nhiều kho lưu trữ) mà chúng tôi muốn nó thực hiện. Bám sát plugin Nhiều SCM cho đến khi GUI xuất hiện xung quanh DSL đường ống Jenkins. Tôi có thể báo cáo rằng nó hoạt động tốt với Jenkins 2.17
Burak Arslan

2
Tôi chỉ gặp vấn đề tương tự với nhiều repos. Bây giờ tôi đang sử dụng plugin Pipeline mặc dù tôi cũng hoài nghi như @BurakArslan về DSL mới. Nó thực sự không tệ như tôi nghĩ và đi kèm với một trình tạo đoạn trích khá hợp lý. Sau khi sử dụng nó chỉ 2 giờ, bây giờ tôi thực sự thích cách tiếp cận này vì cuối cùng tôi có thể cam kết các tập lệnh xây dựng đường ống để git cùng với phần còn lại của mã.
Ben

81

Với Plugin Nhiều SCM:

  • tạo một mục lưu trữ khác nhau cho mỗi kho lưu trữ mà bạn cần kiểm tra (dự án chính hoặc dự án phụ thuộc.

  • đối với mỗi dự án, trong menu "nâng cao" (menu "nâng cao" thứ hai, có hai nút được gắn nhãn "nâng cao" cho mỗi kho lưu trữ), tìm trường văn bản "Thư mục con cục bộ cho repo (tùy chọn)". Bạn có thể chỉ định thư mục con trong thư mục "không gian làm việc" nơi bạn muốn sao chép dự án. Bạn có thể ánh xạ hệ thống tập tin của máy tính phát triển của tôi.

"Menu nâng cao thứ hai" không còn tồn tại nữa, thay vào đó, những gì cần thực hiện là sử dụng nút "Thêm" (trên phần "Hành vi bổ sung") và chọn "Kiểm tra thư mục con"

  • nếu bạn đang sử dụng ant, thì bây giờ tệp build.xml với các mục tiêu xây dựng không nằm trong thư mục gốc của không gian làm việc mà trong thư mục con, bạn phải phản ánh điều đó trong cấu hình "Gọi Ant". Để làm điều đó, trong "Gọi kiến", nhấn "Nâng cao" và điền vào văn bản đầu vào "Xây dựng tệp", bao gồm tên của thư mục con nơi đặt tệp build.xml.

Mong rằng sẽ giúp.


3
Điều này phải được lỗi thời. Tại thời điểm viết nhiều đoạn SIT, đoạn trích GIT không chứa đường dẫn phụ tùy chọn.
AlexeiOst

12
Trong mỗi kho lưu trữ có một danh sách thả xuống gọi là "Thêm". Trong đó, bạn có thể tìm thấy tùy chọn "Thanh toán vào thư mục con", thực hiện tương tự.
Gary Ye

1
Tôi đã làm theo hướng dẫn của bạn với nhiều plugin SCM và git nhưng tôi có một vấn đề buồn cười khác. Dường như không muốn kiểm tra đúng cùng một nhánh (phát triển) cho các kho khác nhau. Nó cố gắng kiểm tra một cam kết bằng hàm băm (chỉ có giá trị trong kho lưu trữ đầu tiên). Bất kỳ ý tưởng về làm thế nào để giải quyết điều này?
Lefteris

Vấn đề lớn nhất với nhiều plugin SCM là: "Trình kích hoạt loại sau cam kết hiện không hoạt động (ít nhất là để lật đổ), do đó cần phải định cấu hình bỏ phiếu kiểu 'cron'."
Grayaii

1
Đường ống yêu cầu bạn học DSL mới, một chút quá nhiều cho công việc rất đơn giản (kiểm tra mã từ nhiều kho lưu trữ) mà chúng tôi muốn nó thực hiện. Bám sát plugin Nhiều SCM cho đến khi GUI xuất hiện xung quanh DSL đường ống Jenkins. Tôi có thể báo cáo rằng nó hoạt động tốt với Jenkins 2.17
Burak Arslan

41

Plugin nhiều SCM không được dùng nữa.

Với Jenkins Pipeline, có thể kiểm tra nhiều repo git và sau khi xây dựng nó bằng gradle

node {   
def gradleHome

stage('Prepare/Checkout') { // for display purposes
    git branch: 'develop', url: 'https://github.com/WtfJoke/Any.git'

    dir('a-child-repo') {
       git branch: 'develop', url: 'https://github.com/WtfJoke/AnyChild.git'
    }

    env.JAVA_HOME="${tool 'JDK8'}"
    env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" // set java home in jdk environment
    gradleHome = tool '3.4.1' 
}

stage('Build') {
  // Run the gradle build
  if (isUnix()) {
     sh "'${gradleHome}/bin/gradle' clean build"
  } else {
     bat(/"${gradleHome}\bin\gradle" clean build/)
  }
}
}

Bạn có thể muốn xem xét sử dụng các mô đun con git thay vì một đường ống tùy chỉnh như thế này.


Cảm ơn bạn!!! Các dirkhối là chìa khóa, tôi không thể tìm ra lý do tại sao tôi đã chỉ nhìn thấy những repo nhiều nhất gần đây-nhân bản trong không gian làm việc công việc của tôi.
bonh

khái niệm "thay đổi" được xem xét theo nhiều SCM như thế nào? Có phải nó chỉ là tổng của những thay đổi được thấy từ tất cả các repos tạo nên công việc? Sẽ là tốt để phân loại chúng từ mỗi nếu có thể, 23 changes from repo XXX, 3 changes from repo YYYhoặc một cái gì đó nhỏ gọn hơn dọc theo những dòng đó.
jxramos

20

Tôi đã sử dụng Plugin Nhiều SCM kết hợp với Plugin Git thành công với Jenkins.


3
cảm ơn thật tuyệt, tôi có thể đặt 2 đường dẫn bitbucket vào phần kho lưu trữ, và bây giờ làm thế nào tôi có thể nói với chi nhánh "phát triển" thanh toán repo 1 và cho nhánh "sửa lỗi" thanh toán repo 2? Tôi thấy các nhánh để xây dựng phần trong jenkins, làm thế nào tôi có thể thiết lập tên kho lưu trữ và Refsec trong bộ chỉ định nhánh (để trống cho 'any') để mỗi người có thể kiểm tra nhánh tương ứng mà tôi muốn? hoặc tôi đang làm điều đó và tôi nên nhấp vào boolean có nội dung "Nhiều SCM"?
pelos

@pelos Bạn có thể tìm ra giải pháp không?
Govind

tại thời điểm chúng tôi không sử dụng tệp yml và chúng tôi đã thực hiện hai quy trình công việc khác nhau với các tác vụ thông thường
pelos

5

Tùy thuộc vào mối quan hệ của các kho lưu trữ, một cách tiếp cận khác là thêm kho lưu trữ khác (kho lưu trữ) dưới dạng một mô đun con git vào một trong các kho lưu trữ. Một mô hình con git được tạo ra một tham chiếu đến các repos khác. Các repos mô đun con không được nhân bản trừ khi bạn chỉ định --recursivecờ khi nhân bản "siêu dự án" (thuật ngữ chính thức).

Đây là lệnh để thêm một mô hình con vào dự án hiện tại:

git submodule add <repository URI path to clone>

Chúng tôi đang sử dụng Jenkins v1.645 và git SCM sẽ vượt ra ngoài bản sao đệ quy cho các siêu dự án. Voila bạn nhận được các tệp siêu dự án và tất cả các tệp repo phụ thuộc (mô đun con) trong các thư mục tương ứng của riêng chúng trong cùng một không gian làm việc của Jenkins.

Không vouching rằng đây là đúng cách tiếp cận thay vì đó là một cách tiếp cận.


5

Jenkins: Nhiều SCM - không dùng nữa. Plugin GIT - không hoạt động cho nhiều repos.

Kịch bản / đường ống như mã - là cách để đi.


2

Tôi cũng đã từng gặp phải vấn đề này. Tôi đã giải quyết nó bằng cách sử dụng Trigger / cuộc gọi xây dựng trên các dự án khác. Đối với mỗi kho lưu trữ, tôi gọi dự án hạ nguồn bằng cách sử dụng các tham số.

Dự án chính:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, BRANCH, TAG
Use Custom workspace: ${PREFIX}/${MARKETNAME}
Source code management: None

Sau đó, với mỗi kho lưu trữ, tôi gọi một dự án xuôi dòng như thế này:

Trigger/call builds on other projects: 
Projects to build: Linux-Tag-Checkout
Current Build Parameters
Predefined Parameters: REPOSITORY=<name>

Dự án hạ nguồn: Linux-Tag-Checkout:

This project is parameterized
String Parameters: PREFIX, MARKETNAME, REPOSITORY, BRANCH, TAG
Use Custom workspace:${PREFIX}/${MARKETNAME}/${REPOSITORY}-${BRANCH}
Source code management: Git
git@<host>:${REPOSITORY}
refspec: +refs/tags/${TAG}:refs/remotes/origin/tags/${TAG}
Branch Specifier: */tags/${TAG} 

1

Kiểm tra ra nhiều hơn một repo tại một thời điểm trong một không gian làm việc đơn lẻ có thể với Jenkins + Git Plugin (có lẽ chỉ trong các phiên bản gần đây?).

Trong phần "Quản lý mã nguồn", không chọn "Git", nhưng "Nhiều SCM" và thêm một số kho git.

Hãy chắc chắn rằng trong tất cả trừ một hành vi bạn thêm dưới dạng "Hành vi bổ sung" hành động "Kiểm tra thư mục con" và chỉ định một thư mục con riêng lẻ.


Tôi tin theo cách này bạn đang sử dụng plugin Nhiều SCM (không dùng nữa) thay vì Plugin Gilla vanilla.
Robert

0

Chúng tôi đang sử dụng git-repo để quản lý nhiều kho GIT của chúng tôi. Ngoài ra còn có một plugin Jenkins Repo cho phép kiểm tra tất cả hoặc một phần các kho lưu trữ được quản lý bởi git-repo cho cùng một không gian làm việc của Jenkins.


Làm thế nào chính xác để bạn giải quyết vấn đề được hỏi trong câu hỏi này? Tôi đã cài đặt plugin bạn đã đề cập và đọc về repo và plugin, nhưng tôi không thể thấy cách thiết lập Jenkins để sao chép hai repos để thực thi trong một dự án ...
GreenAsJade

Để sử dụng Repo, kho lưu trữ đặc biệt cần được tạo sẽ chỉ chứa (các) tệp kê khai. Trong tệp này, bạn chỉ định tất cả các thông tin về các kho lưu trữ khác. Định dạng chính xác của tệp kê khai được mô tả trong tệp docs / manifest-format.txt của dự án git-repo ( gerrit.googlesource.com/git-repo/+/master/docs/ tựa ). Khi định cấu hình Jenkins Repo một phần của công việc - bạn chỉ định vị trí của kho lưu trữ 'tệp kê khai' và tùy ý tên của tệp 'tệp kê khai' (bạn có thể có một số). Tất cả các kho lưu trữ được chỉ định trong tệp kê khai sẽ được nhân bản.
vladisld
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.