С# Push Files в репозиторий Bitbucket из службы приложений Azure?
Я хочу вытащить файлы из папки в Azure App Service в репозиторий Git.
Я скопировал локальный git repo на сервер, и я использую LibGit2Sharp для фиксации и нажатия этих файлов:
using (var repo = new Repository(@"D:\home\site\wwwroot\repo"))
{
// Stage the file
Commands.Stage(repo, "*");
// Create the committer 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 (config или Azure Functions)?
Ответы
Ответ 1
В случае Azure Apps вы все равно можете объединить встроенные exes, там есть портативный Git, доступный по ссылке ниже
https://github.com/sheabunge/GitPortable
Вы должны связать это с вашим приложением и создать пакетный файл. И тогда вы должны запустить его с помощью кода С#
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: Кредиты, выполняющие пакетный файл в С#
Другой поток SO, который говорит о чем-то подобном
Azure App Service, запустить собственный EXE для преобразования файла
Как запустить.EXE в службе Azure App
Запустить исполняемый файл.exe в Azure Function
Ответ 2
Я думаю, что вместо локального диска Службы приложений вы должны использовать хранилище Azure, потому что позже, когда вам нужно масштабировать свою услугу, в масштабе вниз некоторые материалы могут потеряться из папки D:\home\site\wwwroot\repo, если вы уменьшите масштаб, разные экземпляры будут иметь различный контент в этой папке.
И если вы проверите консоль приложений App: git preinstalled. Вы можете видеть, что git уже предварительно установлен, поэтому вам действительно не нужна личная или портативная git, вы можете просто запустить команду git с помощью System.Diagnostics.Process.Start().