코드가 SVN 프로젝트에 커밋 될 때마다 Jenkins 작업이 빌드를 트리거하도록하려면 어떤 플러그인과 플러그인 기능을 설정해야합니까?
표준 SVN 플러그인과 SVN 태깅 플러그인을 모두 설치했지만 트리거 구성을 허용하는 새로운 기능이 표시되지 않습니다.
코드가 SVN 프로젝트에 커밋 될 때마다 Jenkins 작업이 빌드를 트리거하도록하려면 어떤 플러그인과 플러그인 기능을 설정해야합니까?
표준 SVN 플러그인과 SVN 태깅 플러그인을 모두 설치했지만 트리거 구성을 허용하는 새로운 기능이 표시되지 않습니다.
답변:
이 문제를 해결하는 방법에는 두 가지가 있습니다.
구현이 쉽기 때문에 처음에는 첫 번째 옵션을 권장합니다. 빌드 프로세스가 성숙되면 두 번째 프로세스로 전환하십시오.
저장소를 폴링하여 변경 사항이 발생했는지 확인하십시오. 두 개의 커밋이 동일한 폴링 간격 내에 들어 오면 커밋을 "건너 뛸"수 있습니다. 이를 수행하는 방법에 대한 설명은 여기 에서 저장소 폴링 (crontab과 유사한 구성 사용)을 기반으로 "빌드 트리거"를 작업에서 구성하는 네 번째 스크린 샷을 참고하십시오.
Jenkins에 빌드를 시작해야 함을 알리는 커밋 후 후크를 갖도록 리포지토리를 구성합니다. 이를 수행하는 방법에 대한 설명은 "커밋 후 후크"섹션에 있습니다.
SVN 태그 기능은 폴링의 일부가 아니며 빌드 스냅 샷을 위해 소스 코드의 현재 "헤드"를 태그로 승격하는 일부입니다. 이를 통해 Jenkins buid # 32를 SVN 태그 / tags / build-32 (또는 이와 유사한 것)로 참조 할 수 있습니다.
Subversion 플러그인은 하나만 필요합니다.
그런 다음 Jenkins → job_name → Build Trigger 섹션 → (i) 원격으로 빌드 트리거 (즉, 스크립트에서) 인증 토큰 : Token_name
SVN 서버의 후크 디렉토리로 이동 한 다음 아래 명령을 실행합니다.
cp post-commit.tmpl post-commit
chmod 777 post-commit
chown -R www-data:www-data post-commit
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
마지막에 추가 하여 문제와 커밋 후 후크 스크립트가 실행 중인지 여부를 알 수도 있습니다 .