GitHub 저장소에 Jenkins 빌드의 현재 상태 표시


182

내 프로젝트의 GitHub Readme.md에서 Jenkins 빌드 상태를 표시하는 방법이 있습니까?

Jenkins를 사용하여 지속적인 통합 빌드를 실행합니다. 각 커밋 후에는 문서 및 릴리스 번들을 생성하기 전에 모든 컴파일 및 유닛 테스트 및 통합 테스트를 수행합니다.

여전히 실수로 빌드를 중단시키는 무언가를 저지를 위험이 있습니다. GitHub 프로젝트 페이지를 방문하는 사용자는 현재 마스터가 해당 상태에 있다는 것을 알고 있으면 좋습니다.


9
왜 투표가 중단 되었습니까? Jenkins 사용자 안내서에 내가 놓친 것이 분명합니까? 미리 구글을했는데 아무것도 찾을 수 없었습니다.
Jasper Blues

1
Travis 빌드 서버는 이와 같은 작업을 수행 할 수 있지만 Osx에서 Jenkins를 사용하고 있습니다. 여기 난 후 물건의 종류는 다음과 같습니다 github.com/CocoaPods/CocoaPods
재스퍼 블루스


2
유사한 질문에 대한 링크는 현재 iOS 및 OSX를 지원하지 않는 Travis를 권장하므로 질문에 대답하지 않습니다.
재스퍼 블루스

4
이것은 중복이 아닙니다. travis! = jenkins
Banjocat

답변:


167

자, Jenkins를 설정하여 GitHub 빌드 상태를 설정하는 방법은 다음과 같습니다. 이것은 모든 푸시에서 빌드를 수행하도록 구성된 GitHub 플러그인을 사용하여 Jenkins를 이미 가지고 있다고 가정합니다.

  1. GitHub로 이동하여 로그인하고 설정 , 개인용 액세스 토큰 으로 이동 한 후 새 토큰 생성을 클릭하십시오 .

    GitHub 설정 스크린 샷

  2. repo : status를 확인하십시오 (필자는 확실하지 않지만 수행했지만 나에게 도움이되었습니다).

    GitHub 토큰 생성 스크린 샷

  3. 토큰을 생성하고 복사하십시오.

  4. 사용하려는 GitHub 사용자가 리포지토리 공동 작업자 (개인 리포지토리의 경우)이거나 빌드하려는 리포지토리에 대한 푸시 및 풀 액세스 (조직 리포지토리의 경우)를 가진 팀의 구성원인지 확인하십시오.

  5. Jenkins 서버로 이동하여 로그인하십시오.

  6. Jenkins 관리시스템 구성
  7. 아래 GitHub의 웹 후크 를 선택 하자 젠킨스는 후크 URL을 자동으로 관리 한 후, 당신의 GitHub의에 지정한 사용자 이름토큰의 OAuth를 3 단계에서 얻었다.

    Jenkins 글로벌 설정의 스크린 샷

  8. 테스트 자격 증명 버튼 과 함께 작동하는지 확인하십시오 . 설정을 저장하십시오 .

  9. Jenkins 작업을 찾고 GitHub 커밋에 빌드 상태 설정을 빌드 후 단계에 추가하십시오.

    Jenkins 작업 구성의 스크린 샷

그게 다야. 이제 테스트 빌드를 수행하고 GitHub 저장소로 이동하여 작동하는지 확인하십시오. 기본 리포지토리 페이지 에서 지점 을 클릭하여 빌드 상태를 확인하십시오.

'분기'를 클릭하는 기본 페이지의 sceenshot

녹색 확인 표시가 나타납니다.

빌드 상태의 GitHub 지점 스크린 샷


GitHub는 이제 권한 부여 워크 플로우를 업데이트했으며, 사용자는 더 이상 허용 대상을 지정하지 않고, 애플리케이션은 권한 부여 중에 필요한 것을 요청하고 사용자는 요청 된 권한을 승인해야합니다.
Ian Vaughan

6
이 V 1.13.3 플러그인 젠킨스> 1.609과 Github에서와 작동하지 않는 것 - 내가 옵션 "하자 젠킨스는 후크 URL을 자동으로 관리"를 찾을 수 없습니다
endre

2
나는 @pyeleven과 동의합니다. Github Plugin 1.16.0 및 Github API Plugin 1.71과 함께 Jenkins LTS 1.625.3을 사용하고 있습니다. 이 옵션은 표시되지 않습니다. 오히려 자격 증명에 대한 드롭 다운이 표시되지만 자격 증명이 설정되어 있어도 자격 증명이 나열되지 않습니다. 이 자격 증명은 고급-> 추가 Github 작업 관리-> 로그인 및 암호를 Github 토큰으로 변환 할 때 나타납니다.
shehzan

4
오래된 것 같습니다. 이 답변에서 언급 한 빌드 후 조치는 이제 더 이상 사용되지 않는 것으로 표시되며 두 번째 조치가 있습니다
Daenyth

1
이제 빌드 후 단계 매개 변수가 변경되었습니다. @Alex는 정답이 있습니다.
Bibek Mantree

51

한편 Jenkins와 GitHub의 UI가 약간 변경되어 Jenkins를 올바르게 구성하는 방법을 알아내는 데 시간이 걸렸습니다. 여기 설명은 Jenkins 버전 2.121.1을 기반으로합니다.

또한 웹훅이나 폴링에 의해 Jenkins 작업이 트리거되도록 이미 설정했다고 가정합니다. 이것들은 내가 작동하게하기 위해 취한 단계입니다.

  1. Github 구성 : OAuth 범위로 개인용 액세스 토큰 생성 repo:status
  2. Jenkins :를 구성 Configure System하고 OAuth 시크릿을 GitHub 서버 로 추가 - Secret Text인증 방법으로 OAuth 시크릿을 넣습니다.
  3. Jenkins 작업 : 빌드 후 조치Set GitHub commit status 로 추가 구성을 구성하십시오 . 상태 결과 를로 설정하십시오 .One of the default messages and statuses
  4. GitHub에서 결과 확인 : GitHub 커밋에서 빌드 상태 및 빌드 실행 시간을 얻었는지 확인하십시오.

Github 구성

개인용 액세스 토큰 생성


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


Jenkins 구성

여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


Jenkins 작업 구성

여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


여기에 이미지 설명을 입력하십시오


결과

커밋과 브랜치의 상태를 볼 수 있습니다 :

여기에 이미지 설명을 입력하십시오


2
와우 마침내 해결책을 찾았습니다. 정말 고마워요! "비밀 텍스트"가 혼란스러워졌습니다.
head01

Jenkins는 상태를 추진하고있는 것으로 보이지만 내 개인 저장소는 선택하지 않습니다. 어떤 제안?
Patrick Michaelsen

업데이트 : 내 문제는 내 저장소의 개인 정보와 관련이 있습니다. 자격 증명 설정에 문제가 있어야합니다.
Patrick Michaelsen

업데이트 : 궁극적으로 실제 git push에 의해 트리거 된 경우에만 작동한다는 것을 알았습니다. 빌드를 직접 실행해도 상태 업데이트가 올바르게 트리거되지 않습니다.
Patrick Michaelsen

1
Manage Hooks우리가 저장할 때 그것은 선택 해제해야 상자가 강조하지만 위의 이미지에서 선택되지 않았 그 의미합니까?
Perplexabot 2016 년

37

내가 한 일은 매우 간단합니다.

  1. Hudson Post Task 플러그인 설치
  2. https://github.com/settings/tokens 에서 개인 액세스 토큰을 만드십시오.
  3. 항상 성공하는 포스트 태스크 플러그인 추가

    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. "빌드 실패로 표시"된 경우 실패 할 포스트 태스크 플러그인 추가

    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. 테스트 시작시 보류중인 통화를 추가 할 수도 있습니다

    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!\"
    }"
    

빌드 후 작업 구성의 스크린 샷


또한 파이프 라인에서이를 수행 할 수도 있습니다. 예를 들어이를 통해 shJenkins 자격 증명 저장소를 활용할 수도 있습니다.withCredentials
Ivan Kolmychek

Teamcity의 경우 다음을 사용할 수 있습니다. confluence.jetbrains.com/display/TCD10/Commit+Status+Publisher
Natim

24

이 플러그인은 다음과 같이 작동합니다 : https://wiki.jenkins-ci.org/display/JENKINS/Embeddable+Build+Status+Plugin

다음과 같은 배지를 README.md파일 에 포함시킬 수 있어야 합니다.

지나가 다


6
안타깝게도 GitHub가 일부 이미지 호스팅 서비스에서 이러한 이미지를 캐싱하기 시작한 것으로 보이며 현재 제대로 표시되지 않습니다.
axel22

올바르게 액세스 (익명 사용자가 빌드 상태를 볼 수 있어야합니다)을 설정 한 경우 지금은 잘 작동
드미트리 Meshkov

11

상태 API 커밋 당신이 "볼 수 있습니다 환매 약정에서 상태 API를 ".

2013 년 4 월 26 일부터 GitHub 리포지토리 페이지 에서 빌드 상태 를 확인할 수 있습니다 .

GitHub 리포지토리에 빌드 상태

즉, GitHub 프로젝트 페이지를 방문하여 Jenkins 만있는 대신 해당 상태를 확인할 수 있습니다.

2013 년 4 월 30 일부터 커밋 상태에 대한 API 엔드 포인트커밋 SHA뿐만 아니라 브랜치 및 태그 이름 을 허용하도록 확장되었습니다 .


URL을 어디에 두어야합니까? 플러그인이 있습니까 또는 빌드 단계에서 사용자 컬을해야합니까?
Ian Vaughan

@IanVaughan "타다"는 무슨 뜻입니까? 뭐를 보려고? 상태를 확인하려면 curl( developer.github.com/v3/repos/statuses/… )
VonC

죄송합니다. curl을 사용할 수 있다는 것을 알고 API 인터페이스를 알고 있습니다. curl을 배치 할 위치가 더 많았으며 curl에서 더 높은 수준의 추상화를 사용할 수 없었습니까? 즉, 빌드가 커밋 / PR이 빌드되기 시작한 후에 컬 POST를 추가 할 수 있지만 그 이후에는 모두 매우 낮은 수준으로 보이며이 작업을 수행하는 상위 레벨 플러그인이 있기를 바랐습니다.
Ian Vaughan

나는 유스 케이스에 상당히 무거운 Janky를 찾은 후에 내가 원하는 것을하는 것처럼 보입니다.
Ian Vaughan


7

Github플러그인이 설치되어 있으면 다음 과 같이 Jenkins할 수 있습니다 Post build actions.

github에서 빌드 상태 설정



4
이 답변에는 세부 정보가 부족합니다 .GitHub 플러그인이 빌드 상태를 설정하는 데 필요한 API를 사용하도록 GitHub에서 OAuth 액세스 토큰을 작성하는 방법은 무엇입니까? 이 토큰에 어떤 권한이 필요합니까? Jenkins 구성에서 사용자 이름 / 토큰을 어디에서 지정할 수 있습니까?
Marius Gedminas

2
이것은 실제로 도움이되지 않습니다.이 대화 창에 어떻게 가나 요?
Oz123

5

README.md에 아래 줄을 추가 하고 jenkins 프로젝트에 따라 두 URL을 변경하십시오.

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

그래픽이 자동으로로드됩니까? 그것은 나를 위해 아닌 것 같습니다 ...
HX_unbanned

예, 작동하지 않습니다. 페이지를 새로 고침해야합니다.
Kaushal

3

Jenkins 및 GitHub의 보호 된 지점 설정과 관련하여. Jenkins 2.6을 사용하고 있으며 다음과 같이 작동합니다.

리포지토리의 GitHub 웹 페이지에서 :

  1. 설정> 분기로 이동하십시오.
  2. 지점 보호에서 지점 드롭 다운 메뉴를 클릭하고 보호 지점으로 설정할 지점을 선택하십시오.
  3. 필요에 따라 옵션을 활성화하십시오.

Jenkins 서버에서 : (Git 및 GitHub 플러그인이 설치되어 있는지 확인하십시오)

  1. Jenkins 관리> 시스템 구성으로 이동하십시오.
  2. GitHub에서 API URL을 https://api.github.com으로 설정 하십시오 . 이것이 기본값이지만.
  3. 신임 정보에 대해 생성 된 토큰을 선택하십시오. 아직 토큰을 생성하지 않은 경우 고급 ...을 클릭 한 다음 추가 조치에서 로그인 및 비밀번호를 토큰으로 변환하여 신임 정보로 사용할 수 있습니다.

또한 Jenkins가 사용중인 GitHub 계정이 리포지토리의 공동 작업자인지 확인하십시오. 쓰기 권한 수준으로 설정했습니다.

도움이 되었기를 바랍니다.




1

편집하다:

더 이상이 방법을 사용하지 않습니다. 다른 답변 중 하나를 사용하십시오.

업데이트 : 특정 사례에 대해 내가 한 일 : (위의 답변은 훌륭했습니다-감사합니다!)

빌드 서버가 인터넷에 없으므로 빌드 상태를 github의 gh-pages 분기에 게시하는 스크립트가 있습니다.

  • 빌드 스탬프 시작 실패
  • 빌드 스탬프 성공
  • 프로젝트는 주요 프로젝트 이후에 실행되어 결과-> 빌드 상태, API 문서, 테스트 보고서 및 테스트 범위를 게시합니다.

GitHub는 이미지를 캐시하므로 빌드 상태 이미지에 대한 짧은 캐시 시간 초과를 지시하는 .htaccess 파일을 만들었습니다.

이것을 빌드 상태 이미지가있는 디렉토리에 넣으십시오.

ExpiresByType image/png "access plus 2 minutes"

빌드 스크립트는 다음과 같습니다 . gh-pages에 게시하는 대상은 '--publish.site.dry.run'입니다.

400 줄 미만의 구성으로 다음과 같은 이점을 얻을 수 있습니다.

  • 컴파일 검사
  • 단위 및 통합 테스트
  • 시험 성적서
  • 코드 범위 보고서
  • API 문서
  • Github에 게시

. . 이 스크립트는 Jenkins 내부 또는 외부에서 실행될 수 있습니다.

  • 개발자는 커밋 전에이 스크립트를 실행하여 빌드가 손상되어 다른 사람에게 영향을 줄 가능성을 줄입니다.
  • 장애는 로컬로 쉽게 재현 할 수 있습니다.

결과 :

프로젝트 메인 페이지 에는 최신 API 문서, 테스트 결과 및 테스트 범위와 함께 각 빌드 후에 업데이트 된 빌드 상태가 있습니다.


내 답변보다 정확한 피드백. +1
VonC

1
스크립트 작성 링크가 죽었습니다
Saikat

스크립트에 대한 라이브 링크가 있습니까?
Ian

이 접근법의 사용을 중단했습니다-다른 답변이 더 좋을 것이라고 생각합니다.
재스퍼 블루스
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.