" 폴링은 죽어야합니다 : 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 notes
' build
'을 (를) 작성 / 이동하십시오 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