Jenkins CI : SVN 커밋에서 빌드를 트리거하는 방법


79

코드가 SVN 프로젝트에 커밋 될 때마다 Jenkins 작업이 빌드를 트리거하도록하려면 어떤 플러그인과 플러그인 기능을 설정해야합니까?

표준 SVN 플러그인과 SVN 태깅 플러그인을 모두 설치했지만 트리거 구성을 허용하는 새로운 기능이 표시되지 않습니다.


답변:


86

이 문제를 해결하는 방법에는 두 가지가 있습니다.

구현이 쉽기 때문에 처음에는 첫 번째 옵션을 권장합니다. 빌드 프로세스가 성숙되면 두 번째 프로세스로 전환하십시오.

  1. 저장소를 폴링하여 변경 사항이 발생했는지 확인하십시오. 두 개의 커밋이 동일한 폴링 간격 내에 들어 오면 커밋을 "건너 뛸"수 있습니다. 이를 수행하는 방법에 대한 설명은 여기 에서 저장소 폴링 (crontab과 유사한 구성 사용)을 기반으로 "빌드 트리거"를 작업에서 구성하는 네 번째 스크린 샷을 참고하십시오.

  2. Jenkins에 빌드를 시작해야 함을 알리는 커밋 후 후크를 갖도록 리포지토리를 구성합니다. 이를 수행하는 방법에 대한 설명은 "커밋 후 후크"섹션에 있습니다.

SVN 태그 기능은 폴링의 일부가 아니며 빌드 스냅 샷을 위해 소스 코드의 현재 "헤드"를 태그로 승격하는 일부입니다. 이를 통해 Jenkins buid # 32를 SVN 태그 / tags / build-32 (또는 이와 유사한 것)로 참조 할 수 있습니다.


사후 커밋 후크 락. 더 빠른 응답 시간과 (대규모에서) CI 시스템은 수백 개의 변경 로그 요청으로 소스 저장소를 분쇄하지 않습니다.
EricMinick

5
@EricMinick 그들은 훌륭하지만 짧은 시간에 많은 작은 커밋을 얻으면 CI 서버를 녹일 수 있습니다. 그것은 모두 코스의 말이며 개발 프로세스가 현재 어떻게 작동하는지 분석하지 않고 어떤 방법이 유리한지 알기 어렵습니다.
Edwin Buck

1
@EdwinBuck : Jenkins를 구성하여 선택적 커밋 만 빌드하는 방법이 있는지 알고 있습니까? 설명하겠습니다. tortoiseSVN과 저장소를 계속 폴링하는 Jenkins 프로젝트가 있습니다. 이제 내가 만든 커밋이 Jenkins를 트리거하지 않도록하려면 그렇게 할 수있는 방법이 있습니까?
SandBag_1996 2015 년

@UnderDog 메이븐에서 커밋 후 트리거가있는 지점까지 성숙했다면 커밋 후 트리거에서 특별한 "키워드"를 찾고 발견하면 Jenkins에게 알리지 않는 솔루션을 선호합니다. 새 빌드를 시작하는 서버. 예를 들어 "^ DONTBUILD-. *"는 커밋의 첫 번째 줄에 제공된 경우 "dont build"플래그로 사용될 수 있습니다.
Edwin Buck

@mxdsp 링크를 업데이트했습니다. 오래된 wandisco만큼 예쁘지는 않지만 작업을 완료합니다. 감사합니다!
Edwin Buck

2

Subversion 플러그인은 하나만 필요합니다.

그런 다음 Jenkins → job_name → Build Trigger 섹션 → (i) 원격으로 빌드 트리거 (즉, 스크립트에서) 인증 토큰 : Token_name

SVN 서버의 후크 디렉토리로 이동 한 다음 아래 명령을 실행합니다.

  1. cp post-commit.tmpl post-commit
  2. chmod 777 post-commit
  3. chown -R www-data:www-data post-commit
  4. vi post-commit

    참고 : 모든 줄에 주석을 달아야합니다. 마지막에 아래 줄을 추가합니다.

구문 (Linux 사용자 용) :

/usr/bin/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

구문 (Windows 사용자 용) :

C:/curl_for_win/curl http://username:API_token@localhost:8081/job/job_name/build?token=Token_name

이 답변은 다소 동일합니다 이 답변 .
Peter Mortensen

1

Jenkins 빌드를 트리거하기 위해 일부 bash와 함께 Python을 사용하는 도구를 만들었습니다. 기본적으로 커밋이 SVN 서버에 도달하면 커밋 후 다음 두 값을 수집해야합니다.

REPOS="$1"
REV="$2"

그런 다음 "svnlook dirs-changed $ 1 -r $ 2"를 사용하여 방금 커밋 된 경로를 가져옵니다. 그런 다음 그로부터 빌드하려는 저장소를 확인할 수 있습니다. 수십만 개의 프로젝트가 있다고 상상해보십시오. 전체 저장소를 확인할 수 없죠?

GitHub에서 내 스크립트를 확인할 수 있습니다 .


-1

커밋 후 후크를 사용할 수 있습니다.

커밋 후 후크 스크립트를 hooks폴더 wget_folder에 넣고 C : \ 드라이브 wget.exe에를 만든 다음이 폴더에 파일을 넣습니다 . 다음 코드를 파일에 추가하십시오.post-commit.bat

SET REPOS=%1   
SET REV=%2

FOR /f "tokens=*" %%a IN (  
'svnlook uuid %REPOS%'  
) DO (  
SET UUID=%%a  
)  

FOR /f "tokens=*" %%b IN (  
'svnlook changed --revision %REV% %REPOS%'  
) DO (  
SET POST=%%b   
)

echo %REPOS% ----- 1>&2

echo %REV% -- 1>&2

echo %UUID% --1>&2

echo %POST% --1>&2

C:\wget_folder\wget ^   
    --header="Content-Type:text/plain" ^   
    --post-data="%POST%" ^   
    --output-document="-" ^   
    --timeout=2 ^     
    http://localhost:9090/job/Test/build/%UUID%/notifyCommit?rev=%REV%    

여기서 Test = 작업 이름

echo값을 확인하는 데 사용되며 exit 2마지막에 추가 하여 문제와 커밋 후 후크 스크립트가 실행 중인지 여부를 알 수도 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.