Build distfile using Ant with Git revision
배포파일을 생성할 때 프로젝트 Git의 Revision정보를 이용하는 Ant 스크립트를 알아본다.
Build distfile using Ant with Git revision
우선 Git의 Revision정보를 얻기 위해서는 적어도 Annotated Tag가 하나는 있어야 Revision 정보를 만들 수 있다. 이 Tag를 기준으로 얼마나 수정되었는가를 Count하여 Revision 숫자를 만들기 때문이다.
굳이 Tag를 기준으로 Revision을 Count하지 않아도 날짜정보나 기타 정보를 활용하여 Revision 정보를 만들수도 있다.
project-dir $ git tag
build
project-dir $ git describe
build-138-geba356c
project-dir $ git describe --contains --all HEAD
branchA
각 명령을 살펴보면:
- git tag : 현재 설정된 tag의 목록 확인
- git describe : 가장 최근 tag로부터 revision count랑 현재 commit의 앞부분 hash값 확인
- git describe --contains --all HEAD : 현재 작업중인 branch의 이름 확인
자 이제 이 값들을 이용해서 배포 파일을 만들면 된다.
....
<target name="dist">
<exec executable="git" outputproperty="rev">
<arg value="describe"/>
</exec>
<exec executable="git" outputproperty="branch">
<arg value="describe"/>
<arg value="--contains"/>
<arg value="--all"/>
<arg value="HEAD"/>
</exec>
<script language="javascript"><![CDATA[
rev = project.getProperty("rev");
index = rev.lastIndexOf("-");
counter = rev.substring(0, index);
project.setProperty("rev",counter);
]]></script>
<echo>Git Branch: ${branch}</echo>
<echo>Git Rev. : ${rev}</echo>
<condition property="dist.path" value="z:">
<os family="windows" />
</condition>
<condition property="dist.path" value="/NetworkDirectory/dist-file-server">
<os family="mac" />
</condition>
<fail unless="dist.path">No dist.path set for this OS!</fail>
<echo>FileSrv Path: ${dist.path}</echo>
<copy todir="${dist.path}/distfiles/Project-${rev}.${branch}" overwrite="true">
<fileset dir=".">
<include name="*.war"/>
</fileset>
</copy>
<copy todir="${dist.path}/distfiles/Project-last" overwrite="true">
<fileset dir=".">
<include name="*.war"/>
</fileset>
</copy>
</target>
....
위의 스크립트에서 rev 변수의 경우 'build-138-geba356c' 값에서 hash 부분은 잘라내고 'build-138' 값만 이용하도록 Javascript로 수정하였다.
condition 스크립트로 os별 현재 mount되어있는 배포 파일 서버의 위치를 지정해주었다.
마지막으로 배포하는 지점에 위에서 가져온 프로젝트의 revision 정보를 가지고 디렉토리를 만들고 배포파일을 복사하는 작업까지 마치도록 한다.