Я настраиваю Непрерывную Интеграцию для своего проекта Unity3d с Travis CI.До сих пор, после завершения сборки, Unity регистрирует процесс как успешный и даже распечатывает местоположение файла.
Код Unity:
public static void BuildDevForAndroid()
{
List<string> scenes = new List<string>();
foreach (var s in EditorBuildSettings.scenes)
{
scenes.Add(s.path);
}
string buildPath = "Builds/Android/Development";
if (!Directory.Exists(buildPath))
Directory.CreateDirectory(buildPath);
Debug.Log("--Builder: BuildDevForAndroid: StartBuild");
string buildName = GetBuildName();
Debug.Log($"--Builder: BuildDevForAndroid: buildName {buildName}");
var result = BuildPipeline.BuildPlayer(scenes.ToArray(), $"{buildPath}/{buildName}", BuildTarget.Android, BuildOptions.Development);
Debug.Log($"--Builder: BuildDevForAndroid: build finished path = {result.summary.outputPath}");
// HACK: Small Hack so we don't exit the editor on local machines
if (string.IsNullOrWhiteSpace(GetArg("buildName")))
return;
if (result.summary.result == BuildResult.Succeeded)
EditorApplication.Exit(0);
else
EditorApplication.Exit(1);
}
Результирующий журнал:
--Builder: BuildDevForAndroid: build finished path = /Users/travis/build/Austin47/ProjectPhotoAR_UnityClient/Builds/Android/Development/dev_travis.apk
Но на стороне Трэвиса я не могу видеть dev_travis.apk
Вот build.sh
#! /bin/sh
PROJECT_PATH=$(pwd)
UNITY_BUILD_DIR=$(pwd)/Build
LOG_FILE=$UNITY_BUILD_DIR/unity-android.log
UNITY_BUILD_APK_NAME=dev_travis.apk
UNITY_BUILD_APK_PATH=$PROJECT_PATH/Builds/Android/Development
UNITY_BUILD_APK=$UNITY_BUILD_APK_PATH/$UNITY_BUILD_APK_NAME
ERROR_CODE=0
echo "Items in project path ($PROJECT_PATH):"
ls "$PROJECT_PATH"
echo "Building project for Android..."
mkdir $UNITY_BUILD_DIR
/Applications/Unity/Unity.app/Contents/MacOS/Unity \
--args buildName $UNITY_BUILD_APK_NAME \
-batchmode \
-nographics \
-silent-crashes \
-logFile \
-projectPath "$PROJECT_PATH" \
-buildTarget "Android" \
-username "$UNITYEMAIL" \
-password "$UNITYPASSWORD" \
-serial "$UNITYKEY" \
-executeMethod "Infrastructure.EditorHelpers.Builder.BuildDevForAndroid" |
tee "$LOG_FILE"
echo "Items build folder ($UNITY_BUILD_APK_PATH):"
ls "$UNITY_BUILD_APK_PATH"
if [ $? = 0 ]; then
if [ -e "$UNITY_BUILD_APK" ]; then
echo "Building Android apk completed successfully."
ERROR_CODE=0
else
echo "Building Android apk failed. Apk not found, check logs for possible build failure."
ERROR_CODE=1
fi
else
echo "Building Android apk failed. Exited with $?."
ERROR_CODE=1
fi
echo "return license"
/Applications/Unity/Unity.app/Contents/MacOS/Unity -quit -batchmode -returnlicense
#echo 'Build logs:'
#cat $LOG_FILE
echo "Finishing with code $ERROR_CODE"
exit $ERROR_CODE
Вот известные журналы, которые я получаю:
Items build folder (/Users/travis/build/Austin47/ProjectPhotoAR_UnityClient/Builds/Android/Development):
Building Android apk failed. Apk not found, check logs for possible build failure.
return license
Finishing with code 1
The command "./travis-build/build.sh" exited with 1.
ls "$UNITY_BUILD_APK_PATH"
не вернул ничего, как если бы папка была пуста.Unity возвращает 0, но файл не найден.
В итоге я удалил условие, главным образом потому, что единицы вернут 1, если сборка не удалась, поэтому эта проверка, возможно, не нужна.
Дажехотя без него все нормально, я чувствую, что это станет проблемой, которая всплывет, например, что произойдет, когда я попытаюсь развернуть apk для загрузки.