8

Jenkinsフレームワーク内からプロジェクトをビルドおよびデプロイするために作成したAntスクリプトを移行しようとしています(最初にアプローチした便利な方法であるSVNのコミット後フックからトリガーされるのではありません)。デプロイステップ用にファイルをステージングする必要があり、Jenkinsがジョブ用に作成する「build」ディレクトリにファイルを詰め込みたいことを除いて、すべてが素晴らしいです(そして、build.xmlはプロジェクト固有ではない場所にあるため、$ { basedir}と${user.dir}が目的の場所を指していません)。

Jenkins構成内で、次のように設定しました。

[Jenkins]ビルドレコードルートディレクトリ:E:/ builds / $ {ITEM_FULLNAME}

[ジョブ固有]ビルドファイル:C:\ vc-tools \ shadow \ build.xml

ビルドを実行すると、スクリプトが適切に起動され、ジョブ固有のビルドディレクトリが作成されます。

E:\ builds \ Test \ 2012-08-07_12-51-21

ビルドスクリプト内からこのディレクトリにアクセスしたいのですが、方法がわかりません。私が試したことのいくつか:

 [echo] ${basedir}: C:\vc-tools\shadow
 [echo] ${user.dir}: C:\vc-tools
 [echo] ${env.workspace}: C:\Program Files (x86)\Jenkins\workspace\Test
 [echo] ${env.build_id}: 2012-08-07_12-51-21
 [echo] ${jenkins_home}: C:\Program Files (x86)\Jenkins
 [echo] ${BuildDir}: E:/builds/${ITEM_FULLNAME}

注:最後の1つについては、次のパスを試してみました。

 BuildDir=E:/builds/${ITEM_FULLNAME}

Jenkins内のジョブから構成されたプロパティとして(このコンテキストでは明らかに$ {}拡張は行われません)。

ドキュメントによると、完全なビルドディレクトリパスに設定されている特定の環境変数はありません-E:\ buildsルートをハードコーディングし、$ {env.build_id}を追加することで、それを推測できますが、スクリプトをより柔軟にするために、Jenkinsが公開するもの(Antプロパティと環境変数のいずれか)から完全なパスにアクセスするためのより簡単な方法。

Jenkinsバージョン1.476を使用しています。

ありがとう

4

2 に答える 2

12

プロジェクトのビルド ロジックのコピーをソース コードと一緒に含めることは、常に良い考えです。これにより、マシン間でのビルドの移植性が向上します。

共通の共有ビルド ロジックを含むビルド ファイルをセットアップすることも非常に一般的です。ANT は、そのようなアクティビティをサポートするために次のタスクを定義します。

したがって、考えられる解決策は、単純な build.xml ファイルをプロジェクト ディレクトリのルートに保存することです。

<project name="my project" default="build">

  <include file="C:\vc-tools\shadow\common-build-1.0.xml" as="common"/>

  <target name="build" depends="common.build"/>

</project>

ノート:

  • 共通のビルド ファイル名にリビジョン番号を使用することをお勧めします。これは、古いロジックを使用する他のビルドとの下位互換性を維持するのに役立ちます。

アップデート

Jenkins がジョブを実行すると、いくつかの環境変数が設定されます。

次の ANT ロジックは、Jenkins ワークスペース ディレクトリの場所を出力します。

<property environment="env"/>

<target name="run">
    <echo message="Jenkins workspace: ${env.WORKSPACE}"/>
    <echo message="Job directory: ${env.WORKSPACE}../../jobs/${env.JOB_NAME}"/>
    <echo message="Build data: ${env.WORKSPACE}../../jobs/${env.JOB_NAME}/build/${env.BUILD_ID}"/>
</target>
于 2012-08-07T19:59:43.517 に答える
5

最近 (Jenkins v. 1.484) 上記の回答の 'run' ターゲットは次のようになります。

<target name="run">
    <echo message="Jenkins workspace: ${env.WORKSPACE}"/>
    <echo message="Job directory: ${env.WORKSPACE}/../../${env.JOB_NAME}"/>
    <echo message="Build data: ${env.WORKSPACE}/../../${env.JOB_NAME}/builds/${env.BUILD_ID}"/>
</target>
于 2012-10-02T09:25:28.713 に答える