사용자 도구

사이트 도구


gradle:organizing_build_logic

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
gradle:organizing_build_logic [2014/01/06 10:59]
kwon37xi [빌드 스크립트 전용 외부 라이브러리]
gradle:organizing_build_logic [2015/09/22 17:54] (현재)
kwon37xi [apply]
줄 234: 줄 234:
 </code> </code>
  
 +이 방식을 사용할 경우 [[ci:jenkins|Jenkins]]등의 CI에서 동시 빌드시에 외부 리소스에 대한 락이 걸리는 상황이 발생한다.[[http://issues.gradle.org/browse/GRADLE-2795|[GRADLE-2795] Gradle locks the global script cache during the entire build, causing subsequent builds to fail if scripts change]]
 +아래와 유사한 오류가 발생할 것이다.
 +<code>
 +A problem occurred evaluating script.
 +Could not open buildscript class cache for script 'http://.../?p=build-core;a=blob_plain;f=repository-utils.gradle;hb=HEAD' (/home/build/.gradle/caches/1.6/scripts/_p_build_core_a_blob_plain_f_r_4n9gdhqrjd4inp4c6jive7ql9c/DefaultScript/buildscript).
 +Timeout waiting to lock buildscript class cache for script 'http://.../?p=build-core;a=blob_plain;f=repository-utils.gradle;hb=HEAD' (/home/build/.gradle/caches/1.6/scripts/_p_build_core_a_blob_plain_f_r_4n9gdhqrjd4inp4c6jive7ql9c/DefaultScript/buildscript). 
 +It is currently in use by another Gradle instance.
 +Owner PID: unknown
 +Our PID: 15314
 +Owner Operation: unknown
 +Our operation:
 +Lock file: /home/build/.gradle/caches/1.6/scripts/_p_build_core_a_blob_plain_f_r_4n9gdhqrjd4inp4c6jive7ql9c/DefaultScript/buildscript/cache.properties.lock
 +</code>
 +이 때 해결책은 빌드 스크립트 URL의 맨 뒤에 Jenkins Job의 이름을 넣어주는 것이다. 마지막의 ''**${java.net.URLEncoder.encode(System.getenv()['JOB_NAME'] ?: 'NOJOB', 'UTF-8')}**'' Job 마다 서로 다른 build script Cache를 생성하여 Lock 충돌이 방지된다.
 +<code groovy>
 +apply from: "http://server/epository-utils.gradle?jn=${java.net.URLEncoder.encode(System.getenv()['JOB_NAME'] ?: 'NOJOB', 'UTF-8')}"
 +</code>
 +
 +''JOB_NAME'' 대신 ''Math.random()''사용시 계속해서 빌드 스크립트 캐시가 서로 다른이름으로 생성되어 파일 갯수가 증가하게 된다.
 +''/home/[username]/.gradle/caches/[version]/scripts/*'' 디렉토리를 cron 등으로 주기적으로 정리해줘야한다. 아래는 하루에 한 번씩 어제날짜의 캐시 디렉토리를 삭제하는 Unix script.
 +
 +<code sh>
 +find /home/[user]/.gradle/caches/*/scripts -maxdepth 1 -mindepth 1 -mtime +1 -type d -exec rm -rf {} \;
 +</code>
gradle/organizing_build_logic.1388973577.txt.gz · 마지막으로 수정됨: 2014/01/06 10:59 저자 kwon37xi