Удаление app_offline во время сборки TFS 2010 - PullRequest
1 голос
/ 26 мая 2011

У меня есть собственный процесс сборки TFS для моего проекта веб-приложения, который также выполняет публикацию.Для этого я пытаюсь удалить текущее место публикации перед копированием скомпилированных источников из сборки.

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

Чтобы попытаться исправить те крайние случаи, когда каталог публикации не может быть удален, я копирую файл app_offline.htm в каталог и жду 4 секунды, прежде чем пытаться удалить остальныесайта.Это работает, и я не получил никаких ошибок от этого шага, однако, когда я пытаюсь удалить app_offline.htm после завершения публикации.Я получаю следующую ошибку:

Невозможно отменить рабочий процесс.Агент должен быть перезапущен.Подробности: Операция не может быть выполнена, потому что WorkflowApplication f670d4fb-d9e3-4f33-bc3d-925faa925e04 прерван.

Удаление создается с использованием пользовательского CodeActivity (так как рабочий процесс TFS не имеет удаления).

public sealed class DeleteFile : CodeActivity
{
    // Define an activity input argument of type string
    [RequiredArgument]
    public InArgument<string> File { get; set; }
    public InArgument<int?> Tries { get; set; }

    // If your activity returns a value, derive from CodeActivity<TResult>
    // and return the value from the Execute method.
    protected override void Execute(CodeActivityContext context)
    {
        // Obtain the runtime value of the Text input argument
        int tries = Tries.Get(context) ?? 1;
        for (int i = 0; i < tries; i++)
        {
            try
            {
                System.IO.File.Delete(File.Get(context));
                break;
            }
            catch (System.IO.IOException)
            {
                if (i == tries - 1)
                    throw;
                Thread.Sleep(TimeSpan.FromSeconds(4));
            }
        }
    }
}

Позже я добавил аргумент «Попытки», чтобы попытаться выяснить причину этой ошибки.

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

Наконец, наш пользователь tfsbuild имеет разрешения на удаление в каталоге публикации (у него нет проблем с удалением остальной частикаталог просто app_offline.htm

Ответы [ 2 ]

0 голосов
/ 03 апреля 2015

Если бы такая же проблема произошла сегодня, то обнаружил, что недавно установленное приложение антивирусной защиты на сервере сборки изолировало psexec.exe. Шаблон сборки TFS был настроен для шифрования раздела строки подключения, и для этого он использует psexec. В конце журнала сборки произошла ошибка «Отказано в доступе», и файл app_offline.htm не был удален.

0 голосов
/ 27 мая 2011

Я уже видел эту ошибку раньше, и мне сказали, что она обычно означает, что необработанное исключение было выдано из асинхронного потока или при оценке лямбда-исключения для получения значения аргумента / переменной в рабочем процессе. Вы можете либо запрыгнуть на сборочную машину, либо попробовать отладить хост службы сборки удаленно, чтобы перехватить необработанное исключение (которое, вероятно, вызывается одним из ваших пользовательских действий, которые вы ввели недавно).

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...