Như đã đề cập trong " Bỏ phiếu phải chết: kích hoạt các bản dựng Jenkins từ một git hook ", bạn có thể thông báo cho Jenkins về một cam kết mới:
Với plugin Git mới nhất 1.1,14 (mà tôi mới phát hành ngay bây giờ), giờ đây bạn có thể thực hiện việc này nhiều hơn> dễ dàng bằng cách thực hiện lệnh sau:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>
Điều này sẽ quét tất cả các công việc được định cấu hình để kiểm tra URL được chỉ định và nếu chúng cũng được định cấu hình với bỏ phiếu, nó sẽ ngay lập tức kích hoạt bỏ phiếu (và nếu điều đó tìm thấy một thay đổi có giá trị xây dựng, thì bản dựng sẽ được kích hoạt lần lượt. )
Điều này cho phép một kịch bản giữ nguyên khi các công việc đến và đi trong Jenkins.
Hoặc nếu bạn có nhiều kho lưu trữ trong một ứng dụng máy chủ lưu trữ duy nhất (chẳng hạn như Gitosis), bạn có thể chia sẻ một tập lệnh hook sau nhận với tất cả các kho lưu trữ. Cuối cùng, URL này không yêu cầu xác thực ngay cả đối với Jenkins được bảo mật, vì máy chủ không trực tiếp sử dụng bất cứ thứ gì mà khách hàng đang gửi. Nó chạy bỏ phiếu để xác minh rằng có một thay đổi, trước khi nó thực sự bắt đầu xây dựng.
Như đã đề cập ở đây , đảm bảo sử dụng đúng địa chỉ cho máy chủ Jenkins của bạn:
vì chúng tôi đang chạy Jenkins với tư cách là Máy chủ web độc lập trên cổng 8080, URL nên có mà không có /jenkins
, như thế này:
http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git
Để củng cố điểm cuối cùng đó, ptha thêm vào trong các bình luận :
Nó có thể rõ ràng, nhưng tôi đã có vấn đề với:
curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.
Các url tham số phải phù hợp chính xác những gì bạn có trong Repository URL của việc Jenkins của bạn.
Khi sao chép các ví dụ, tôi đã bỏ giao thức, trong trường hợp của chúng tôi ssh://
và nó không hoạt động.
Bạn cũng có thể sử dụng một hook hậu nhận đơn giản như trong " Xây dựng dựa trên đẩy bằng Jenkins và GIT "
#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \
http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx
Định cấu hình công việc Jenkins của bạn để có thể tạo ra Bộ kích hoạt chế độ từ xa và sử dụng mã xác thực ( 1qaz2wsx
trong ví dụ này).
Tuy nhiên, đây là một kịch bản dành riêng cho dự án và tác giả đề cập đến một cách để khái quát nó.
Giải pháp đầu tiên dễ dàng hơn vì nó không phụ thuộc vào xác thực hoặc một dự án cụ thể.
Tôi muốn kiểm tra thay đổi được đặt xem có ít nhất một tệp java ở đó bản dựng sẽ bắt đầu không.
Giả sử các nhà phát triển chỉ thay đổi các tệp XML hoặc các tệp thuộc tính, thì quá trình xây dựng không nên bắt đầu.
Về cơ bản, tập lệnh xây dựng của bạn có thể:
- đặt ghi chú 'xây dựng' (xem
git notes
) vào cuộc gọi đầu tiên
- trong các cuộc gọi tiếp theo, hãy lấy danh sách các cam kết giữa
HEAD
ứng cử viên chi nhánh của bạn để xây dựng và cam kết được tham chiếu bởi git notes
'build' ( git show refs/notes/build
) : git diff --name-only SHA_build HEAD
.
- kịch bản của bạn có thể phân tích danh sách đó và quyết định xem nó có cần tiếp tục với bản dựng không.
- trong mọi trường hợp, tạo / di chuyển
git notes
'' của bạn build
đến HEAD
.
Tháng 5 năm 2016: cwhsu chỉ ra trong các bình luận url có thể sau:
bạn chỉ có thể sử dụng curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN
nếu bạn đặt cấu hình kích hoạt trong mục của bạn
Tháng 6 năm 2016, Polaretto chỉ ra trong các ý kiến :
Tôi muốn thêm rằng chỉ với một chút kịch bản shell, bạn có thể tránh cấu hình url thủ công, đặc biệt nếu bạn có nhiều kho lưu trữ trong một thư mục chung.
Ví dụ: tôi đã sử dụng các mở rộng tham số này để lấy tên repo
repository=${PWD%/hooks};
repository=${repository##*/}
và sau đó sử dụng nó như:
curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository