Как правильно обновить манифест Android с помощью xbuild и Jenkins?
В нашей среде мы создаем проект xamarin.android и хотим передать переменную $(build_number) в сборку Jenkins. К сожалению, Jenkins строит проект так, как будто ничего не было передано в рабочий процесс сборки.
Я попытался использовать XmlPoke, который отлично работает для Windows и не работает на Mac вообще.
ОС: Mac OS X Дженкинс и Xamarin являются последней стабильной версией
Пожалуйста, предложите.
3 ответа
Нет никакого решения по умолчанию / плагина для него, если вы работаете под Mac OS Host. Вы должны создать свой собственный скрипт / инструмент с входными параметрами для обновления атрибутов xml до заданного значения. Затем используйте его с задачей оболочки exec.
Я нашел хорошее решение от http://jonathanpeppers.com/Blog/xamarin-android-builds-in-jenkins
<Target Name="BeforeBuild" Condition=" '$(JENKINS)' == '1' ">
<XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="<Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' />" Query="manifest/@android:versionCode" Value="$(SVN_REVISION)" />
<XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="<Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' />" Query="manifest/@android:versionName" Value="2.0.$(SVN_REVISION)" />
</Target>
Используйте его в своем файле.csproj и не забудьте установить JENKINS в качестве глобальной среды со значением 1.
По этой ссылке вы можете получить доступ к переменным сборки среды в файле csproj, используя $(VAR)
нотации.
Итак, предопределенные переменные Дженкинса, такие как BUILD_NUMBER
должны быть доступны непосредственно внутри вашего проекта $(BUILD_NUMBER)
во время вызова ничего лишнего не требуется.