С# Отправка файлов в репозиторий Bitbucket из службы приложений Azure?

Я хочу отправить файлы из папки в службе приложений Azure в репозиторий Git.

Я скопировал локальный репозиторий git на сервер и использую LibGit2Sharp для фиксации и отправки этих файлов:

using (var repo = new Repository(@"D:\home\site\wwwroot\repo"))
{
    // Stage the file
    Commands.Stage(repo, "*");

    // Create the committer's signature and commit
    Signature author = new Signature("translator", "example.com", DateTime.Now);
    Signature committer = author;

    // Commit to the repository
    Commit commit = repo.Commit($"Files updated {DateTime.Now}", author, committer);

    Remote remote = repo.Network.Remotes["origin"];
    var options = new PushOptions
    {
        CredentialsProvider = (_url, _user, _cred) =>
            new UsernamePasswordCredentials
            {
                Username = _settings.UserName,
                Password = _settings.Password
            }
    };
    repo.Network.Push(remote, @"+refs/heads/master", options);
}

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


person Paolo B    schedule 09.04.2018    source источник
comment
Почему бы вам просто не настроить git config и не использовать cli?   -  person Varun Garg    schedule 19.04.2018
comment
@JamesP, кажется, можно запустить exe в службе приложений Azure? stackoverflow.com/questions/46337633/, stackoverflow.com/questions/43233915/, stackoverflow.com/questions/45348498/, и вы можете встроить переносимый git в свой код github.com/sheabunge/GitPortable   -  person Tarun Lalwani    schedule 19.04.2018
comment
@JamesP, у тебя была возможность посмотреть эти ссылки?   -  person Tarun Lalwani    schedule 22.04.2018


Ответы (2)


В случае приложений Azure вы все равно можете связать встроенные исполняемые файлы. Портативный Git доступен по ссылке ниже.

https://github.com/sheabunge/GitPortable

Вы должны связать это с вашим приложением, а также создать пакетный файл. И тогда вы должны запустить его, используя код C #

static void ExecuteCommand(string command)
{
    var processInfo = new ProcessStartInfo("cmd.exe", "/c " + command);
    processInfo.CreateNoWindow = true;
    processInfo.UseShellExecute = false;
    processInfo.RedirectStandardError = true;
    processInfo.RedirectStandardOutput = true;

    var process = Process.Start(processInfo);

    process.OutputDataReceived += (object sender, DataReceivedEventArgs e) =>
        Console.WriteLine("output>>" + e.Data);
    process.BeginOutputReadLine();

    process.ErrorDataReceived += (object sender, DataReceivedEventArgs e) =>
        Console.WriteLine("error>>" + e.Data);
    process.BeginErrorReadLine();

    process.WaitForExit();

    Console.WriteLine("ExitCode: {0}", process.ExitCode);
    process.Close();
}

PS: Кредиты Выполнение пакетного файла в C#

Еще одна ветка SO, в которой говорится о чем-то подобном

Служба приложений Azure, запустите собственный EXE-файл для преобразования файл

Как запустить .EXE в службе приложений Azure< /а>

Запуск исполняемого файла .exe в функции Azure

person Tarun Lalwani    schedule 23.04.2018

Я думаю, что вместо локального диска службы приложений вам следует использовать хранилище Azure, потому что позже, когда вам придется масштабировать свою службу, при уменьшении масштаба может потеряться некоторый контент из папки D:\home\site\wwwroot\repo , или если вы масштабируете, разные экземпляры будут иметь разное содержимое в этой папке.

И если вы проверите консоль App Services: git предустановлен, вы увидите, что git уже предустановлен, поэтому вам не нужны какие-либо библиотеки или переносимые git, вы можете просто запустить команду git с помощью метода System.Diagnostics.Process.Start().

person hujtomi    schedule 24.04.2018