Jenkins CI: Cách kích hoạt các bản dựng trên SVN commit


79

Tôi cần thiết lập các plugin và tính năng plugin nào để có thể thực hiện công việc Jenkins của mình để kích hoạt bản dựng bất kỳ lúc nào mã được cam kết với dự án SVN?

Tôi đã cài đặt cả plugin SVN tiêu chuẩn cũng như plugin gắn thẻ SVN, nhưng tôi không thấy bất kỳ tính năng mới nào cho phép cấu hình trình kích hoạt.


1
bản sao có thể có của bản dựng Trigger hudson khi svn cam kết
highcaffeinated

Câu trả lời:


86

Có hai cách để thực hiện điều này:

Tôi khuyên bạn nên chọn tùy chọn đầu tiên ban đầu, do nó dễ thực hiện. Khi bạn đã thành thục trong các quy trình xây dựng của mình, hãy chuyển sang bước thứ hai.

  1. Thăm dò ý kiến ​​của kho lưu trữ để xem có thay đổi xảy ra không. Điều này có thể "bỏ qua" một cam kết nếu hai cam kết xuất hiện trong cùng một khoảng thời gian bỏ phiếu. Mô tả cách thực hiện tại đây , hãy lưu ý ảnh chụp màn hình thứ tư nơi bạn định cấu hình "trình kích hoạt xây dựng" trong công việc dựa trên việc thăm dò kho lưu trữ (với cấu hình giống crontab).

  2. Định cấu hình kho lưu trữ của bạn để có một móc hậu cam kết thông báo cho Jenkins rằng bản dựng cần phải bắt đầu. Mô tả về cách thực hiện tại đây , trong phần "móc nối sau cam kết"

Tính năng Thẻ SVN không phải là một phần của cuộc thăm dò, nó là một phần của việc quảng bá "phần đầu" hiện tại của mã nguồn thành một thẻ, để chụp nhanh một bản dựng. Điều này cho phép bạn tham khảo Jenkins buid # 32 là thẻ SVN / tags / build-32 (hoặc một cái gì đó tương tự).


đá móc hậu cam kết. Thời gian phản hồi nhanh hơn và (ở quy mô lớn) hệ thống CI của bạn không đè bẹp repo nguồn với hàng trăm yêu cầu nhật ký thay đổi.
EricMinick

5
@EricMinick Chúng rất tuyệt, nhưng đôi khi chúng có thể làm tan chảy máy chủ CI, nếu bạn nhận được nhiều cam kết nhỏ trong một khoảng thời gian ngắn. Tất cả đều là ngựa cho các khóa học, và thật khó để biết phương pháp nào là thuận lợi nếu không phân tích quy trình phát triển của bạn hiện đang hoạt động như thế nào.
Edwin Buck

1
@EdwinBuck: Bạn có biết có cách nào để cấu hình Jenkins chỉ tạo các cam kết chọn lọc không? Tôi sẽ giải thích, tôi có một rùaSVN và một dự án Jenkins tiếp tục thăm dò kho lưu trữ. Bây giờ nếu tôi ước rằng cam kết mà tôi thực hiện không kích hoạt Jenkins, có cách nào để làm điều đó không?
SandBag_1996

@UnderDog Nếu bạn đã trưởng thành đến mức bạn có trình kích hoạt sau cam kết trong maven, thì tôi thích một giải pháp tìm kiếm các "từ khóa" đặc biệt trong trình kích hoạt sau cam kết và khi phát hiện ra chúng, hãy chọn KHÔNG nói với Jenkins máy chủ để khởi chạy một bản dựng mới. Ví dụ: "^ DONTBUILD -. *" Có thể được sử dụng làm cờ "không xây dựng" nếu được cung cấp trong dòng đầu tiên của cam kết.
Edwin Buck

@mxdsp Đã cập nhật liên kết. Nó không đẹp như chiếc đũa phép cũ, nhưng nó sẽ hoàn thành công việc. Cảm ơn bạn!
Edwin Buck

2

Bạn chỉ cần yêu cầu một plugin là plugin Subversion.

Sau đó, chỉ cần đi vào Jenkins → job_name → Build Trigger phần → (i) Kích hoạt xây dựng từ xa (tức là từ script) Mã thông báo xác thực: Token_name

Đi tới thư mục hooks của máy chủ SVN, sau đó kích hoạt các lệnh dưới đây:

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    Lưu ý: Tất cả các dòng nên được chú thích Thêm dòng bên dưới vào cuối cùng

Cú pháp (dành cho người dùng Linux):

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Cú pháp (dành cho người dùng Windows):

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

Câu trả lời này ít nhiều giống với câu trả lời này .
Peter Mortensen,

1

Tôi đã tạo một công cụ sử dụng Python với một số bash để kích hoạt bản dựng Jenkins. Về cơ bản, bạn phải thu thập hai giá trị này từ sau cam kết khi một cam kết truy cập vào máy chủ SVN:

REPOS="$1"
REV="$2"

Sau đó, bạn sử dụng "svnlook dirs-change $ 1 -r $ 2" để lấy đường dẫn vừa được cam kết. Sau đó, bạn có thể kiểm tra xem bạn muốn xây dựng kho lưu trữ nào. Hãy tưởng tượng bạn có hàng trăm nghìn dự án. Bạn không thể kiểm tra toàn bộ kho lưu trữ, phải không?

Bạn có thể xem kịch bản của tôi từ GitHub .


-1

Bạn có thể sử dụng hook post-commit.

Đặt tập lệnh hook post-commit vào hooksthư mục, tạo một tệp trong wget_folderổ C: \ của bạn và đặt wget.exetệp vào thư mục này. Thêm mã sau vào tệp có tênpost-commit.bat

SET REPOS=%1   
SET REV=%2

FOR /f "tokens=*" %%a IN (  
'svnlook uuid %REPOS%'  
) DO (  
SET UUID=%%a  
)  

FOR /f "tokens=*" %%b IN (  
'svnlook changed --revision %REV% %REPOS%'  
) DO (  
SET POST=%%b   
)

echo %REPOS% ----- 1>&2

echo %REV% -- 1>&2

echo %UUID% --1>&2

echo %POST% --1>&2

C:\wget_folder\wget ^   
    --header="Content-Type:text/plain" ^   
    --post-data="%POST%" ^   
    --output-document="-" ^   
    --timeout=2 ^     
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    

nơi Test = tên công việc

echođược sử dụng để xem giá trị và bạn cũng có thể thêm exit 2vào cuối để biết về sự cố và liệu script hook sau cam kết có đang chạy hay không.

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.