Как определить каталог сборки Jenkins из Ant?

Я пытаюсь перенести сценарий Ant, который я написал для создания и развертывания проектов из структуры Дженкинса (вместо того, чтобы запускаться из SVN post-commit hook, что было целесообразным способом, которым мы изначально подходили к вещам). Все отлично, за исключением того, что мне нужно подготовить файлы для шага развертывания, и я хочу поместить их в каталог "build", который Дженкинс создает для работы (и с моей сборки.xml живет в местоположении, не зависящем от проекта, ${basedir} и ${user.dir} не указывать на нужное место.)

в конфигурации Дженкинса я настроил следующее:

[Дженкинс] Построить корневой каталог записи: E:/builds/${ITEM_FULLNAME}

[Специфическая Работа] Файл Сборки: C:vc-toolsshadowbuild - ... в XML

при запуске сборки скрипт запускается соответствующим образом и создается каталог сборки для конкретного задания, например

E:buildsTest2012-08-07_12-51-21

Я хочу добраться до этого каталога изнутри build script, но не может понять, как. некоторые из вещей, которые я пробовал:

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

примечание: для этого последнего я попытался передать:

 BuildDir=E:/builds/${ITEM_FULLNAME}

как свойство, настроенное из задания в Jenkins (очевидно, расширение ${} не происходит в этом контексте).

по словам документация, нет конкретных переменных среды, которые установлены на полный путь к каталогу сборки - я могу подделать его, жестко закодировав E:builds корень и лавируя на ${env.build_id}, но надеялся, что будет более простой способ получить доступ к полному пути из того, что предоставляет Дженкинс (либо свойство Ant и переменная среды), чтобы сделать скрипт более гибким.

Я использую Jenkins версии 1.476.

спасибо

2 ответов


для вашего проекта всегда полезно иметь копию его логики сборки, включенную вместе с исходным кодом. Это делает вашу сборку более портативной на машинах.

сказав, что это также довольно часто для установки файлов сборки, содержащих общую общую логику сборки. ANT определяет следующие задачи для поддержки такой деятельности:

таким образом, возможным решением является храните простую сборку.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>

Примечания:

  • рекомендуется использовать номер редакции В общем имени файла сборки. Это помогает сохранить обратную совместимость с другими сборками, используя более старую логику.

обновление

когда Дженкинс запускает задание, устанавливается число переменные среды.

следующая логика 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>

в эти дни (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>