Git post commit hook을 설정하는 방법 생각합니다 (컬 명령을 사용해야한다는

Jenkins에서 원격으로 빌드를 트리거하는 방법은 무엇입니까?
Git post commit hook을 설정하는 방법?

내 요구 사항은 특정 프로젝트에 대한 Git 저장소에서 변경이 이루어질 때마다 해당 프로젝트에 대해 Jenkins 빌드를 자동으로 시작하는 것입니다.

Jenkins 트리거 빌드 섹션에서 원격으로 트리거 빌드를 선택했습니다.
에서 .git디렉토리, 디렉토리가 우리가 구성 포스트에 가지고있는 파일을 커밋 후크.
거기에서 빌드를 트리거하는 방법을 혼란스럽게 생각합니다 (컬 명령을 사용해야한다는 것을 알고 있습니다).


curl cmbuild.aln.com/jenkins/view/project name/job/myproject/buildwithparameters?Branch=feat-con

이 명령을 git server hooks 디렉토리 (post commit hook)에 넣었습니다.
저장소에서 변경이 발생할 때마다 자동화 빌드가 실행됩니다.

적어도 하나의 Java 파일에 빌드가 시작되는지 변경 세트를 확인하고 싶습니다.
개발자가 빌드를 시작하지 않아야하는 xml 파일 또는 특성 파일 만 변경했다고 가정하십시오.
와 함께 파일이 빌드가 시작되어야 xml한다고 가정합니다 .java.



답변

폴링은 죽어야합니다 : Jenkins 빌드를 git hook에서 트리거하기 “에서 언급했듯이 Jenkins 에게 새로운 커밋을 알릴 수 있습니다.

최신 Git 플러그인 1.1.14 (지금 막 릴리스)를 사용하면 다음 명령을 간단히 실행하여보다 쉽게이 작업을 수행 할 수 있습니다.

curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>

지정된 URL을 체크 아웃하도록 구성된 모든 작업을 스캔하고 폴링으로 구성된 경우 즉시 폴링을 트리거합니다 (빌드 할 가치가있는 변경 사항이 발견되면 빌드가 차례로 트리거 됨). )

이것은 젠킨스에서 일자리가왔다 갔다 할 때 스크립트가 동일하게 유지되도록합니다.
또는 단일 리포지토리 호스트 응용 프로그램 (예 : Gitosis)에 여러 리포지토리가있는 경우 모든 리포지토리와 단일 수신 후 후크 스크립트를 공유 할 수 있습니다. 마지막으로,이 URL은 보안 Jenkins에 대해서도 인증이 필요하지 않습니다. 서버는 클라이언트가 전송하는 것을 직접 사용하지 않기 때문입니다. 실제로 빌드를 시작하기 전에 변경 사항이 있는지 확인하기 위해 폴링을 실행합니다.

으로 여기에 언급 , 당신 젠킨스 서버에 대한 올바른 주소를 사용해야합니다 :

포트 8080에서 독립형 웹 서버로 Jenkins를 실행하고 있기 때문에 URL은 다음 /jenkins과 같이 없어야 합니다.

http://jenkins:8080/git/notifyCommit?url=git@gitserver:tools/common.git

그 마지막 요점을 강화하기 위해 ptha주석을 추가합니다 .

명백 할 수도 있지만 다음과 같은 문제가 있습니다.

curl http://yourserver/jenkins/git/notifyCommit?url=<URL of the Git repository>.

URL의 매개 변수는이 무엇인지 정확히 일치해야합니다 저장소 URL 당신의 젠킨스 작업.
예제를 복사 할 때 프로토콜을 생략했지만 ssh://작동하지 않았습니다.


또한 간단한 사용할 수 있습니다 “처럼 후크를 포스트 – 수신 기반 푸시 젠킨스와 GIT를 사용하여 구축

#!/bin/bash
/usr/bin/curl --user USERNAME:PASS -s \

http://jenkinsci/job/PROJECTNAME/build?token=1qaz2wsx

“원격으로 빌드 트리거”및 인증 토큰 ( 1qaz2wsx이 예에서는) 을 사용할 수 있도록 Jenkins 작업을 구성하십시오 .

그러나 이것은 프로젝트 별 스크립트이며 저자는이를 일반화하는 방법을 언급합니다.
첫 번째 솔루션은 인증이나 특정 프로젝트에 의존하지 않기 때문에 더 쉽습니다.


하나 이상의 Java 파일이 빌드를 시작해야하는지 변경 세트를 확인하고 싶습니다.
개발자가 XML 파일 또는 특성 파일 만 변경했다고 가정하면 빌드가 시작되지 않아야합니다.

기본적으로 빌드 스크립트는 다음을 수행 할 수 있습니다.

  • git notes첫 번째 통화 에서 ‘빌드’메모를 작성하십시오 (참조 ).
  • 후속 호출에서 HEAD빌드 후보 후보와 git notes‘build'( git show refs/notes/build)가 참조하는 커밋 사이의 커밋 목록을 가져옵니다 git diff --name-only SHA_build HEAD.
  • 스크립트는 해당 목록을 구문 분석하고 빌드를 계속해야하는지 여부를 결정할 수 있습니다.
  • 어쨌든 git notesbuild‘을 (를) 작성 / 이동하십시오 HEAD.

5 월 2016 cwhsu의 종료 지점 코멘트에 다음과 같은 가능한 URL :

curl --user USER:PWD http://JENKINS_SERVER/job/JOB_NAME/build?token=YOUR_TOKEN아이템에서 트리거 구성을 설정하면 사용할 수 있습니다.


2016 년 6 월, polaretto 는 의견에서 지적합니다 .

쉘 스크립트를 조금만 추가하면 수동 URL 구성을 피할 수 있습니다. 특히 공통 디렉토리에 많은 저장소가있는 경우 특히 그렇습니다.
예를 들어 이러한 매개 변수 확장을 사용하여 리포 이름을 얻었습니다.

repository=${PWD%/hooks};
repository=${repository##*/}

그런 다음 다음과 같이 사용하십시오.

curl $JENKINS_URL/git/notifyCommit?url=$GIT_URL/$repository

답변

이것이 도움이되기를 바랍니다 : http://nrecursions.blogspot.in/2014/02/how-to-trigger-jenkins-build-on-git.html

그것은 사용의 문제의 curl자식에 의해 제공되는 자식 후크를 사용하여 젠킨스 작업을 트리거 할 수 있습니다.
명령

curl http://localhost:8080/job/someJob/build?delay=0sec

Jenkins 작업을 실행할 수 있습니다. 여기서 Jenkins 작업 someJob의 이름입니다.

hooks숨겨진 .git 폴더에서 폴더를 검색 하십시오. post-commit.sample파일 이름을로 바꿉니다 post-commit. 메모장으로 열고 : Nothing선을 제거한 다음 위의 명령을 붙여 넣습니다.

그게 다야. 커밋을 수행 할 때마다 Git은 파일에 정의 된 커밋 후 명령을 트리거합니다.


답변

이전 답변에서 풀 후크가 어떻게 보이는지에 대한 예를 보여 주었으므로 수신 후 후크의 코드는 다음과 같습니다.

#!/usr/bin/python

import sys
from subprocess import call

if __name__ == '__main__':
    for line in sys.stdin.xreadlines():
        old, new, ref = line.strip().split(' ')
        if ref == 'refs/heads/master':
            print "=============================================="
            print "Pushing to master. Triggering jenkins.        "
            print "=============================================="
            sys.stdout.flush()
            call(["curl", "-sS", "http://jenkinsserver/git/notifyCommit?url=ssh://user@gitserver/var/git/repo.git"])

이 경우 다른 브랜치가 아닌 마스터로 푸시 할 때만 jenkins 작업을 트리거합니다.


답변

Jenkins 인증이 활성화되어 있으면 조금 더 어려워진다는 위의 답변에 추가하고 싶습니다.

활성화 한 후 익명 사용자에게 읽기 권한이 필요하다는 오류 메시지가 나타납니다.

두 가지 가능한 해결책을 보았습니다.

1 : 후크를 다음으로 변경 :

curl --user name:passwd -s http://domain?token=whatevertokenuhave

2 : 프로젝트 기반 인증 설정.

이전 솔루션은 후크 파일에 암호를 노출해야한다는 단점이 있습니다. 제 경우에는 용납 할 수 없습니다.

두 번째는 나를 위해 일합니다. 글로벌 인증 설정에서 익명 사용자에 대해 전체> 읽기 기능을 활성화해야했습니다. 프로젝트에서 트리거하고 싶었던 작업> 빌드 및 작업> 익명 읽기를 활성화해야했습니다.

로그인하지 않고도 Jenkins에서 프로젝트를 볼 수 있기 때문에 이것은 여전히 ​​완벽한 솔루션이 아닙니다. http 로그인과 함께 이전 방법을 사용하는 것이 더 나은 솔루션 일 수는 있지만 알아 내지 못했습니다.