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

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

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



답변

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

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

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

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

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


답변

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


답변

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

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

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

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


답변

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

커밋 후 후크 스크립트를 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마지막에 추가 하여 문제와 커밋 후 후크 스크립트가 실행 중인지 여부를 알 수도 있습니다 .


답변