IT story

개미 빌드 스크립트에서 최신 git 커밋 해시를 찾는 방법

hot-time 2021. 1. 6. 20:22
반응형

개미 빌드 스크립트에서 최신 git 커밋 해시를 찾는 방법


Ant 빌드 스크립트에서 최신 git 커밋 해시를 어떻게 조회 할 수 있습니까?

저는 현재 github에 저장하는 새로운 오픈 소스 프로젝트를 진행하고 있습니다. 번호가 매겨진 빌드를 만들 수 있도록 기존 ANT 빌드 파일을 확장하고 싶습니다. 나는 "ant buildnum -Dnum = 12"와 같은 것으로 빌드를 시작할 것이라고 상상하고 있습니다.

결과 항아리에 매니페스트 파일에 두 가지 중요한 정보가 있기를 바랍니다.

  • build.number = 12
  • build.gitcommit =

build.number 줄을 만드는 방법을 알고 있습니다. 그러나.


github의 프로젝트에 대해 다음과 같은 ant target을 작성했습니다. 용법:

  • "repository.version"속성에 버전 저장
  • git이 설치되어 있지 않거나 .git 디렉토리가없는 경우 작동합니다 (대체).
  • 다른 대상은 git 버전이 필요한 경우이 대상에 종속되어야합니다.
  • 하나의 git 명령 만 실행됩니다 (-항상)

<available file=".git" type="dir" property="git.present"/>

<target name="git.revision" description="Store git revision in ${repository.version}" if="git.present">
    <exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
        <arg value="describe"/>
        <arg value="--tags"/>
        <arg value="--always"/>
        <arg value="HEAD"/>
    </exec>
    <condition property="repository.version" value="${git.revision}" else="unknown">
        <and>
            <isset property="git.revision"/>
            <length string="${git.revision}" trim="yes" length="0" when="greater"/>
        </and>
    </condition>
</target>

예를 들어 @repository.version@템플릿 파일에서 토큰을 확장하는 데 사용 됩니다.

<target name="index.html" depends="git.revision" description="build index.html from template">
    <copy file="index.html.template" tofile="index.html" overwrite="yes">
        <filterchain>
            <replacetokens>
                <token key="repository.version" value="${repository.version}" />
            </replacetokens>
        </filterchain>
    </copy>
</target>

이 명령은 항상 작업 폴더의 마지막 커밋 SHA1을 반환하며, 항상 HEAD에서 빌드하지 않을 때 유용합니다. 명령은 Windows 및 * nix 시스템 모두에서 실행되어야합니다.

<exec executable="git" outputproperty="git.revision">
    <arg value="log" />
    <arg value="-1" />
    <arg value="--pretty=format:%H" />
</exec>

그게 당신이 찾고있는 것이겠습니까?

git rev-parse HEAD

실제로 두 가지 답변을 모두 사용했습니다. 내가 작성한 개미 코드는 다음과 같습니다.

  <target name="getgitdetails" >
    <exec executable="git" outputproperty="git.tagstring">
      <arg value="describe"/>
    </exec>
    <exec executable="git" outputproperty="git.revision">
      <arg value="rev-parse"/>
      <arg value="HEAD"/>
    </exec>
    <if>
      <contains string="${git.tagstring}" substring="cannot"/>
      <then>
        <property name="git.tag" value="none"/>
      </then>
      <else>
        <property name="git.tag" value="${git.tagstring}"/>
      </else>
    </if>
  </target>


Git 명령을 명시 적으로 호출하지 않고 빌드 버전을 결정하는 Ant 작업을 작성 했으므로 설치할 필요가 없습니다 (Windows에서는 포함해야 함 PATH). 버전 관리 워크 플로 :

  • Any "milestone" version changes (i.e. first 2 or 3 numbers) are set manually via tags on branch master.
  • Each commit subsequent to the tag adds to the build number. (Only for tags on master.)
  • If building from a separate branch, its name should be included in the version.

Source code and examples: https://github.com/Hunternif/JGitVersion


You should tag a version (starting with a 0.1 or similar) and then just use git describe.

This will give you readable unique identifiers as reference points from your tag. When you release, this version number will be whatever you specified it to be.


In a large company I found <exec> git command-line quickly ran into problems, some devs used a GUI, some had different command-line versions installed in different places, some had other problems. I realised that the way to go was a pure Java solution with the dependencies being part of the project build system, much as we had used before with Svnkit for Subversion.

One condition was that only 'mainstream' library dependencies were permitted. We could use the JGit library but the many git ant tasks projects scattered around github and the like were excluded.

The solution was to use a combination of within build.xml and JGit library.

TODO: paste code...

ReferenceURL : https://stackoverflow.com/questions/2974106/how-to-lookup-the-latest-git-commit-hash-from-an-ant-build-script

반응형