Travis CI, файл не найден, но он существует - PullRequest
1 голос
/ 28 июня 2019

Я настраиваю Непрерывную Интеграцию для своего проекта 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 для загрузки.

...