コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】Addressables のビルドを Jenkins から実行する場合にビルドに失敗しても成功扱いにならないようにする方法

検証環境

  • Addressables 1.16.19

概要

  • Jenkins から Addressables のビルドを実行する場合、
    アセットバンドルのビルドに失敗しても、
    Jenkins 上ではビルドに成功したことになってしまった
  • アセットバンドルをビルドする AddressableAssetSettings.BuildPlayerContentImpl で
    ビルドに失敗したら例外を投げるようにして、
    なおかつ Jenkins からアセットバンドルをビルドする時に
    AddressableAssetSettings.BuildPlayerContent を呼び出している箇所を
    try ~ catch で囲んで、例外をキャッチしたら
    EditorApplication.Exit( 1 ); を実行するようにすれば
    Jenkins で失敗扱いになる

AddressableAssetSettings.cs

1906 行目以降

internal void BuildPlayerContentImpl()
{
    if (Directory.Exists(Addressables.BuildPath))
    {
        try
        {
            Directory.Delete(Addressables.BuildPath, true);
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    var buildContext = new AddressablesDataBuilderInput(this);
    var result = ActivePlayerDataBuilder.BuildData<AddressablesPlayerBuildResult>(buildContext);
    if (!string.IsNullOrEmpty(result.Error))
        Debug.LogError(result.Error);
    AddressableAnalytics.Report(this);
    if (BuildScript.buildCompleted != null)
        BuildScript.buildCompleted(result);
    AssetDatabase.Refresh();

    // ビルドに失敗した場合は例外を投げる
    if ( !string.IsNullOrEmpty( result.Error ) )
    {
        throw new Exception( result.Error );
    }
}

AddressableAssetSettings.BuildPlayerContent を呼び出している箇所

try
{
    AddressableAssetSettings.BuildPlayerContent();
}
catch ( Exception e )
{
    EditorApplication.Exit( 1 );
}