Hiển thị trạng thái hiện tại của Jenkins xây dựng trên repo GitHub


182

Có cách nào để hiển thị trạng thái xây dựng Jenkins trên GitHub Readme.md của dự án của tôi không?

Tôi sử dụng Jenkins để chạy các bản dựng tích hợp liên tục. Sau mỗi lần xác nhận, nó đảm bảo rằng mọi thứ sẽ biên dịch, cũng như thực hiện các kiểm tra đơn vị và tích hợp, trước khi cuối cùng tạo ra các gói tài liệu và phát hành.

Vẫn có nguy cơ vô tình phạm phải thứ gì đó phá vỡ công trình. Sẽ tốt cho người dùng truy cập trang dự án GitHub để biết chủ hiện tại đang ở trạng thái đó.


9
Tại sao điều này đã bỏ phiếu? Có điều gì đó rõ ràng trong hướng dẫn sử dụng Jenkins mà tôi đã bỏ lỡ? Tôi đã làm google trước đó và không thể tìm thấy bất cứ điều gì.
Jasper Blues

1
Máy chủ xây dựng Travis có thể làm một cái gì đó như thế này, nhưng tôi đang sử dụng Jenkins trên Osx. Đây là loại điều tôi theo đuổi: github.com/CocoaPods/CocoaPods
Jasper Blues


2
Liên kết đến câu hỏi tương tự khuyến nghị Travis, hiện không hỗ trợ iOS và OSX, vì vậy nó không trả lời câu hỏi.
Jasper Blues

4
Đây không phải là một bản sao .. travis! = Jenkins
Banjocat

Câu trả lời:


166

Ok, đây là cách bạn có thể thiết lập Jenkins để đặt trạng thái xây dựng GitHub. Điều này giả định rằng bạn đã có Jenkins với plugin GitHub được định cấu hình để thực hiện các bản dựng trên mỗi lần đẩy.

  1. Truy cập GitHub, đăng nhập, vào Cài đặt , mã thông báo truy cập cá nhân , nhấp vào Tạo mã thông báo mới .

    ảnh chụp màn hình của cài đặt GitHub

  2. Kiểm tra repo: status (Tôi không chắc điều này là cần thiết, nhưng tôi đã làm nó và nó hoạt động với tôi).

    ảnh chụp màn hình tạo mã thông báo GitHub

  3. Tạo mã thông báo, sao chép nó.

  4. Đảm bảo rằng người dùng GitHub bạn sẽ sử dụng là cộng tác viên kho lưu trữ (đối với repos riêng) hoặc là thành viên của nhóm có quyền truy cập đẩy và kéo (đối với kho lưu trữ của tổ chức) vào kho lưu trữ bạn muốn xây dựng.

  5. Tới máy chủ Jenkins của bạn, đăng nhập.

  6. Quản lý JenkinsCấu hình hệ thống
  7. Trong GitHub Web Hook, chọn Hãy để Jenkins tự động quản lý các URL hook , sau đó chỉ định tên người dùng GitHub của bạn và mã thông báo OAuth bạn có trong bước 3.

    ảnh chụp màn hình cài đặt toàn cầu của Jenkins

  8. Xác minh rằng nó hoạt động với nút Kiểm tra thông tin . Lưu các cài đặt.

  9. Tìm công việc Jenkins và thêm Đặt trạng thái xây dựng trên GitHub cam kết với các bước sau khi xây dựng

    ảnh chụp màn hình cấu hình công việc của Jenkins

Đó là nó. Bây giờ hãy thực hiện bản dựng thử nghiệm và đi đến kho GitHub để xem nó có hoạt động không. Nhấp vào Chi nhánh trong trang kho lưu trữ chính để xem trạng thái xây dựng.

sceenshot của trang chính nơi bạn nhấp vào 'chi nhánh'

Bạn sẽ thấy dấu kiểm màu xanh lá cây:

ảnh chụp màn hình của các chi nhánh GitHub với trạng thái xây dựng


GitHub đã cập nhật quy trình ủy quyền của họ ngay bây giờ, người dùng không còn chỉ định những gì cho phép, thay vào đó các ứng dụng phải yêu cầu những gì họ yêu cầu trong khi ủy quyền và người dùng chấp thuận các quyền được yêu cầu.
Ian Vaughan

6
Điều này dường như không hoạt động với Jenkins> 1.609 và plugin Github v 1.13.3 - Tôi không thể tìm thấy tùy chọn "Để Jenkins tự động quản lý các URL hook"
thúc vào

2
Tôi đồng tình với @pyeleven. Tôi đang sử dụng Jenkins LTS 1.625.3 với Github Plugin 1.16.0 và Github API Plugin 1.71. Tùy chọn này không hiển thị. Thay vào đó, tôi thấy thông tin đăng nhập giảm xuống, nhưng không có thông tin nào được liệt kê (mặc dù tôi đã thiết lập thông tin đăng nhập). Các thông tin đăng nhập này xuất hiện khi đi tới Advance-> Quản lý các hành động Github bổ sung -> Chuyển đổi thông tin đăng nhập và mật khẩu thành mã thông báo Github.
shehzan

4
Điều này dường như đã lỗi thời; hành động sau khi xây dựng mà câu trả lời này đề cập hiện được đánh dấu là không dùng nữa và có lần thứ hai
Daenyth

1
Bây giờ bài viết tham số bước xây dựng đã được thay đổi. @Alex có câu trả lời đúng.
Bibek Mantree

50

Trong khi đó, UI của Jenkins và GitHub đã thay đổi một chút và tôi phải mất một thời gian để tìm ra cách cấu hình Jenkins chính xác. Giải thích ở đây dựa trên phiên bản Jenkins 2.121.1.

Tôi cũng cho rằng bạn đã cấu hình Công việc Jenkins của bạn được kích hoạt bởi một webhook hoặc bằng cách bỏ phiếu. Đó là những bước mà tôi đã thực hiện để làm cho nó hoạt động:

  1. Định cấu hình Github: Tạo mã thông báo truy cập cá nhân với Phạm vi OAuth repo:status
  2. Định cấu hình Jenkins: Configure Systemvà thêm Bí mật OAuth làm Máy chủ GitHub - sử dụng Secret Textlàm phương thức xác thực để đặt Bí mật OAuth vào đó.
  3. Cấu hình công việc Jenkins của bạn: Thêm Set GitHub commit statusdưới dạng hành động xây dựng sau . Đặt kết quả trạng thái thành One of the default messages and statuses.
  4. Kiểm tra kết quả của bạn trên GitHub: Kiểm tra xem bạn có nhận được trạng thái bản dựng và thời gian thực hiện bản dựng trên cam kết GitHub của bạn không.

Cấu hình Github

Tạo mã thông báo truy cập cá nhân


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


Cấu hình Jenkins

nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


Cấu hình công việc Jenkins

nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


nhập mô tả hình ảnh ở đây


Kết quả

Bây giờ bạn sẽ thấy trạng thái cho các cam kết và chi nhánh của bạn:

nhập mô tả hình ảnh ở đây


2
Wow cuối cùng đã tìm thấy một giải pháp, cảm ơn rất nhiều! Đó là "văn bản bí mật" làm tôi bối rối.
đầu01

Jenkins dường như đang đẩy các trạng thái, nhưng repo riêng của tôi không chọn chúng. Bất kỳ đề xuất?
Patrick Michaelsen

Cập nhật: vấn đề của tôi liên quan đến quyền riêng tư của repo của tôi. Tôi phải có một vấn đề với thiết lập thông tin của tôi.
Patrick Michaelsen

Cập nhật: cuối cùng tôi phát hiện ra điều này chỉ hoạt động nếu nó được kích hoạt bởi một cú đẩy git thực tế. Tự chạy bản dựng không kích hoạt cập nhật trạng thái chính xác.
Patrick Michaelsen

1
Các Manage Hookshộp được đánh dấu nhưng không đánh dấu trong hình ảnh trên, điều đó có nghĩa là nó phải được unticked khi chúng tôi tiết kiệm?
Perplexabot

37

Những gì tôi đã làm khá đơn giản:

  1. Cài đặt Plugin Hudson Post Task
  2. Tạo mã thông báo truy cập cá nhân tại đây: https://github.com/sinstall/tokens
  3. Thêm một Plugin Nhiệm vụ bài viết luôn đặt thành công

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"success\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has succeeded!\"
    }"
    
  4. Thêm một Plugin tác vụ bài viết sẽ đặt thất bại nếu "đánh dấu xây dựng là thất bại"

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"failure\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build has failed!\"
    }"
    
  5. Bạn cũng có thể thêm một cuộc gọi để chờ xử lý khi bắt đầu các bài kiểm tra

    curl -XPOST -H "Authorization: token OAUTH TOKEN" https://api.github.com/repos/:organization/:repos/statuses/$(git rev-parse HEAD) -d "{
      \"state\": \"pending\",
      \"target_url\": \"${BUILD_URL}\",
      \"description\": \"The build is pending!\"
    }"
    

Ảnh chụp màn hình của cấu hình tác vụ xây dựng bài


Bạn cũng có thể làm điều đó từ Đường ống - ví dụ, bạn chỉ có thể gọi qua shvà thậm chí tận dụng bộ lưu trữ thông tin đăng nhập Jenkins vớiwithCredentials
Ivan Kolmychek

Đối với Teamcity, bạn có thể sử dụng: confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim

24

Plugin này sẽ hoạt động: https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

Bạn sẽ có thể nhúng các huy hiệu như thế này vào README.mdtệp của mình :

xây dựng đi qua


6
Đáng buồn thay, có vẻ như GitHub đã bắt đầu lưu trữ những hình ảnh này trên một số dịch vụ lưu trữ hình ảnh và hiện chúng đang được hiển thị không chính xác.
axel22

Bây giờ nó hoạt động tốt nếu bạn đã thiết lập chính xác quyền truy cập (người dùng ẩn danh sẽ có thể thấy trạng thái bản dựng)
Dmitry Meshkov

11

Các Commit Status API cho phép bạn xem các " Repo Trạng thái có API ".

Và kể từ ngày 26 tháng 4 năm 2013, bây giờ bạn có thể thấy trạng thái xây dựng trên trang chi nhánh repo GitHub của bạn :

xây dựng trạng thái trên các nhánh repo GitHub

Điều đó có nghĩa là một cách khác, bằng cách truy cập trang dự án GitHub, để xem những trạng thái đó thay vì chỉ có Jenkins.

Bắt đầu từ ngày 30 tháng 4 năm 2013, điểm cuối API cho trạng thái cam kết đã được mở rộng để cho phép tên nhánh và thẻ, cũng như SHA cam kết .


Tôi phải đặt URL ở đâu? Có một Plugin hay tôi phải sử dụng các lọn tóc trong bước xây dựng?
Ian Vaughan

@IanVaughan "đánh" là gì? Để nhin cai gi? Để xem trạng thái, nó sẽ là một curl( developer.github.com/v3/repose/statuses/iêu )
VonC

Xin lỗi, vâng, tôi biết rằng có thể sử dụng curl và tôi biết giao diện API, đó là nơi để đặt curl, và nếu không có sự trừu tượng hóa cấp độ cao hơn từ curl thì có sẵn không? tức là tôi có thể thêm POST cong vào trước khi bản dựng bắt đầu xác nhận cam kết / PR đang xây dựng, rồi sau đó, nhưng tất cả điều này có vẻ rất thấp và hy vọng có một plugin cấp cao hơn để thực hiện công cụ này cho tôi.
Ian Vaughan

Kể từ đó, tôi đã tìm thấy Janky, khá nặng cho trường hợp sử dụng của tôi, dường như làm những gì tôi muốn.
Ian Vaughan


7

Nếu bạn đã Githubcài đặt plugin Jenkins, bạn có thể làm điều đó Post build actionsnhư sau:

đặt trạng thái xây dựng trên github



4
Câu trả lời này thiếu chi tiết: làm cách nào để tạo mã thông báo truy cập OAuth trên GitHub để cho phép plugin GitHub sử dụng các API cần thiết để đặt trạng thái xây dựng? Những quyền nào cần thiết trên mã thông báo này? Tôi có thể chỉ định tên người dùng / mã thông báo ở đâu trong cấu hình Jenkins?
Marius Gedminas

2
Điều này thực sự không hữu ích, làm thế nào để bạn vào cửa sổ hộp thoại này?
Oz123

5

Thêm dòng dưới đây trong README.md của bạn và thay đổi cả URL theo dự án jenkins của bạn.

[![Build Status](https://jenkins../..project/lastBuild/buildStatus)](https://jenkins../..project/lastBuild/)

Là đồ họa được tải tự động? Có vẻ như nó không dành cho tôi ...
HX_unbned

Vâng, nó sẽ không hoạt động. Bạn phải làm mới trang của bạn.
Kaushal

3

Liên quan đến việc thiết lập chi nhánh được bảo vệ của Jenkins và GitHub. Tôi đang sử dụng Jenkins 2.6 và đây là những bước tôi đã làm để làm cho nó hoạt động:

Trên trang web GitHub của kho lưu trữ của bạn:

  1. Điều hướng đến Cài đặt> Chi nhánh.
  2. Trong Bảo vệ các nhánh, nhấp vào menu Chọn một nhánh bị nhấn chìm và chọn nhánh bạn muốn đặt làm nhánh Được bảo vệ.
  3. Kích hoạt các tùy chọn khi cần thiết.

Trên máy chủ Jenkins: (Đảm bảo bạn đã cài đặt Plugin Git và GitHub)

  1. Điều hướng để quản lý Jenkins> Cấu hình hệ thống.
  2. Trong GitHub, đặt URL API thành https://api.github.com . Mặc dù đây là giá trị mặc định.
  3. Chọn mã thông báo được tạo của bạn cho Thông tin xác thực. Nếu bạn chưa tạo mã thông báo, hãy nhấp vào Nâng cao ... sau đó vào Hành động bổ sung, bạn có thể chuyển đổi thông tin đăng nhập và mật khẩu thành mã thông báo và sử dụng làm thông tin đăng nhập.

Ngoài ra, hãy đảm bảo tài khoản GitHub mà Jenkins của bạn đang sử dụng là cộng tác viên cho kho lưu trữ. Tôi đã thiết lập nó với mức cho phép ghi.

Hi vọng điêu nay co ich.


2

Tôi làm theo chỉ dẫn của Alex và nó đã hoạt động.

Nhưng, đối với GitHub Enterprise, bạn cần sửa đổi URL API khi thêm máy chủ vào Jenkins.

Ví dụ: nếu công ty của bạn là creditcard.com, URL của bạn sẽ là

https://github.creditcard.com/api/v3/



1

Biên tập:

Tôi không còn sử dụng phương pháp này nữa, vui lòng sử dụng một trong những câu trả lời khác.

Cập nhật: những gì tôi đã làm, cho trường hợp cụ thể của chúng tôi: (câu trả lời ở trên là tuyệt vời - cảm ơn!)

Vì máy chủ xây dựng của chúng tôi không có trên internet, chúng tôi có một tập lệnh để xuất bản trạng thái xây dựng lên nhánh gh-page trong github.

  • Bắt đầu xây dựng tem không thành công
  • Kết thúc xây dựng tem thành công
  • Dự án chạy sau dự án chính để xuất bản kết quả -> trạng thái xây dựng, tài liệu API, báo cáo thử nghiệm và phạm vi kiểm tra.

GitHub lưu trữ hình ảnh, vì vậy chúng tôi đã tạo tệp .htaccess, hướng dẫn thời gian chờ bộ đệm ngắn cho hình ảnh trạng thái xây dựng.

Đặt cái này trong thư mục với hình ảnh trạng thái xây dựng:

ExpiresByType image/png "access plus 2 minutes"

Đây là kịch bản xây dựng. Mục tiêu xuất bản lên gh-page là '--publish.site.dry.run'

Với ít hơn 400 dòng cấu hình, chúng tôi có:

  • Biên dịch séc
  • kiểm tra đơn vị & tích hợp
  • Báo cáo thử nghiệm
  • Báo cáo bảo hiểm mã
  • Tài liệu API
  • Xuất bản lên Github

. . và tập lệnh này có thể được chạy trong hoặc ngoài Jenkins, do đó:

  • Các nhà phát triển có thể chạy tập lệnh này trước khi cam kết, giảm khả năng xây dựng bị hỏng ảnh hưởng đến người khác.
  • Một thất bại là dễ dàng để tái sản xuất tại địa phương.

Kết quả:

Trang chính của dự án có trạng thái bản dựng, được cập nhật sau mỗi bản dựng, cùng với Tài liệu API mới nhất, kết quả kiểm tra và phạm vi kiểm tra.


Phản hồi tuyệt vời, chính xác hơn câu trả lời của tôi. +1
VonC

1
Xây dựng liên kết tập lệnh đã chết
Saikat

Bạn có một liên kết trực tiếp đến kịch bản của bạn?
Ian

Đã ngừng sử dụng phương pháp này - tôi nghĩ các câu trả lời khác sẽ tốt hơn.
Jasper Blues
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.