.NET 코어는 자동으로 코드 GitHub의 제출, 힘내 운영

.NET 코어 3.0 프리뷰 버전이 이미 더 나은 시간, 공원도 프로덕션 환경에 대한 블로그를 가지고, 우리는 .NET 핵심이 성숙 볼 수 있습니다

당신이 건물을 포함 할 주제로 돌아 가기? GitHub의 당신은 녹색 가정을 원하는? 오늘 그녀가 자동으로 재생 GitHub의 코드를 제출 받아.

설치 프로젝트 템플릿

dotnet new --install "Microsoft.DotNet.Web.ProjectTemplates.3.0"
dotnet new worker

프로젝트를 생성

업무용 서비스를 만들기 위해 직접 사용 .NET의 CLI 프로젝트

dotnet new worker -o AutomaticPush

다음과 같은 코드를 볼 수있는 비주얼 스튜디오 2019 프로젝트를 엽니 다

// Program.cs
public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });
}
  • 3.0 호스트 웹 호스트에서 시작하면 교체
  • CreateHostBuilder호스트 만들고 ConfigureServices전화를.AddHostedService<Worker>()
// Worker.cs
public class Worker : BackgroundService
{
    private readonly ILogger<Worker> _logger;
    public Worker(ILogger<Worker> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
            await Task.Delay(1000, stoppingToken);
        }
    }
}

근무 BackgroundService 상속, 완료 코드 자동 제출 한 재정 ExecuteAsync 방법

망할 놈의 작업은 .NET에서 라이브러리를 사용할 필요 LibGit2Sharp, .NET Framework 및 .NET 코어를 모두 지원

설치 프로젝트에서 사용

Install-Package LibGit2Sharp

사용하기 LibGit2Sharp 간단한

  • Repository.Init(@"D:\Work") 지정된 경로에서의 상응하는 새로운 Git 저장소 만들기 git init

  • Repository.Clone("https://github.com/Meowv/Blog.git", @"D:\Work") 지방에 상당 원격 저장소 당겨 git clone

  • using (var repo = new Repository(@"D:\Blog")){} 기존의 지역 Git 저장소를 엽니 다

  • 지점을 가져옵니다

    using (var repo = new Repository(@"D:\Blog"))
    {
        var branches = repo.Branches;
    
        foreach (var item in branches)
        {
        }
    }
  • 커밋 받기

    using (var repo = new Repository(@"D:\Blog"))
    {
        foreach (var commit in repo.Commits)
        {
        }
    }
  • 태그를 가져옵니다

    using (var repo = new Repository(@"D:\Blog"))
    {
        foreach (var commit in repo.Tags)
        {
        }
    }
  • 추가 작업은 https://github.com/libgit2/libgit2sharp 개최지

자동 푸시 커버 건물 코드

위의 기준으로, 그것은 자동으로 파일을 생성 할 수있는 최대 GitHub의에 코드를 밀어 넣습니다.

새 프로필, 창고를 만들고 우리의 GitHub의 계정 암호 및 기타 중요한 정보를 저장

{
  "repository": "本地git仓库绝对路径",
  "username": "GitHub账号",
  "password": "GitHub密码",
  "name": "提交人",
  "email": "邮箱"
}

ExecuteAsync의 구성 파일 정보를 읽어

var configurationRoot = new ConfigurationBuilder().AddJsonFile("config.json").Build();

var path = configurationRoot["repository"];
var username = configurationRoot["username"];
var password = configurationRoot["password"];
var name = configurationRoot["name"];
var email = configurationRoot["email"];

자식은 자동으로 파일 변경 사항을 감지합니다, 그래서 자동으로 날짜별로 .log 파일을 생성하고 지속적으로 생성하고 내용을 제출해야

while (!stoppingToken.IsCancellationRequested)
{
    var fileName = $"{DateTime.Now.ToString("dd")}.log";
    var content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

    // 写入内容
    WriteText(path, fileName, content);

    using (var repo = new Repository(path))
    {
        // Stage the file
        Commands.Stage(repo, "*");
        // Create the committer's signature and commit
        var author = new Signature(name, email, DateTime.Now);
        var committer = author;
        // Commit to the repository
        var commit = repo.Commit(content, author, committer);
        // git push
        var options = new PushOptions
        {
            CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) =>
            {
                return new UsernamePasswordCredentials()
                {
                    Username = username,
                    Password = password
                };
            })
        };
        repo.Network.Push(repo.Branches["master"], options);
    }

    Console.WriteLine(content);

    // 等待60秒继续执行...
    await Task.Delay(60000, stoppingToken);
}

private static void WriteText(string path, string fileName, string content)
{
    path = Path.Combine(path, DateTime.Now.ToString(@"yyyy\\MM"));
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    var filePath = Path.Combine(path, fileName);
    using var fs = new FileStream(filePath, FileMode.Append);
    using var sw = new StreamWriter(fs);
    sw.WriteLine(content);
}

이 시점에서, 프로젝트가 발표되는 최종의 전체 코딩 부분이 Sc.exe를 Windows 서비스, 여기에 추천 nssm (서비스 래퍼)로 등록을 선택할 수 있습니다, 물론, 건물이 빠르게 이동 포함 ~~

추천

출처www.cnblogs.com/meowv/p/11389175.html