2011 Oct 12

- by
Sean Lee

ant git revision os

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 정보를 가지고 디렉토리를 만들고 배포파일을 복사하는 작업까지 마치도록 한다.