NUKE Build 추천

14814 단어 nukebuilddotnetC#
.NET Build tool 다양
전복이 귀찮은 사람은 NUKE 사용법부터 시도해 보세요!
.NET는 이전부터 구축 도구가 필요하지 않았습니다.실제로 MSBuild를 은밀히 사용하거나 의식적으로 사용하는 경우는 드물죠?
나는 CI를 많이 사용한 후에 구축 도구를 사용하기 시작했다.
  • 테스트 전에 테스트용 데이터베이스를 만든 후 마이그레이션
  • 성형 코드 검사 결과
  • 버전 번호를 버전 라벨에 삽입
  • 잠깐만요.
    처음에는 명령을 한데 배열했을 뿐입니다. 제출한 후에 미루면 CI 작업은 실패합니다.반복해서 연습하다가 싫어졌어요.
    지령이 많으면 손 옆에서 테스트하는 것도 어렵다.수중에 테스트한 지령을 CI로 설정할 때 오류를 복제하는 일은 짜증이 난다.
    이것저것
    조개각본
    개인적으로 이게 제일 좋아요.연장선에 명령을 배열하다.
    하지만 개발은 Windows, CI는 Linux라면 어렵다.
  • Windows라면 조개 스크립트를 쉽게 테스트할 수 없음
  • Windows로 Giit 창고에 조개 스크립트 + x 권한을 주면 어떻게 줍니까?
  • 복잡하게 처리하면 역시 힘들어
  • PowerShell
    개발이 Windows이고 CI도 Windows일 때 셸 스크립트를 사용할 수 없기 때문에 PowerShell을 사용했습니다.
    .NET의 학급 라이브러리는 매우 잘 사용할 수 있다.조개 스크립트라면 XML을 지우고 다시 쓰거나 연결 문자열을 고치는 것은 좀 힘들다.
  • PowerShell에 익숙해지지 않아 (아저씨라서 새로운 프로그램 언어를 기억할 수 있어서 달라...)
  • Linux로 움직이지 않음(조개 스크립트처럼 간단하지 않음)
  • 행위는 실례 방법의 함수와 다르다
  • 백스테이지에서 숙제만 하는데 왜 이렇게 힘들까...
  • Cake
    Windows와 Linux 모두 이동할 수 있는 구축 도구이기 때문에 소개Cake도 사용했다.
    검색하면 PHP가 나오기 때문에 Cake Build검색을 추천합니다.
    C#로 구축 스크립트를 작성할 수 있습니다.C# 코드로 변환되어 Cke Script가 구성됩니다.NET에서 수행합니다.
    var target = Argument("target", "Build");
    
    Task("Build")
        .Does(() =>
        {
            DotNetCoreBuild(".");
        });
    
    RunTask(target);
    
    공식과 비공식에 맞춰 다양한 로드 매크로가 있어 편리하다.
    하지만 이 케이크스크립트는 비주얼스튜디오와 라이더의 코드 보완 등을 지원받을 수 없다.IDE의 지원을 받는 사람으로서 상당히 고통스럽다.
    Cake Script가 아닌 그룹으로 만들면 IDE의 지원을 받을 수 있지만 그 그룹의 관리가 까다롭다!
    NUKE
    예상치 못한 일에서 발견된 것은NUKE.
    쓰다가 깜짝 놀랐어요.Visual Studio의 솔루션은 _build라는 프로젝트와 Build.cs를 창설하여 이 프로젝트를 실행하는 강경한 태도를 취합니다!

    일반적인 C# 프로젝트이기 때문에 IDE의 코드 완성 등 지원이 효과적입니다!
    조개 스크립트처럼 간단하진 않지만 C# 코드로 연장해서 쓸 수 있어 좋네요!
    NUKE 사용법
    설정
    설치하기 전에 Visual Studio를 사용하여 프로젝트를 제작하십시오.
    지령으로 하고 싶은 사람은 이런 느낌이야.
    $ mkdir app
    $ cd app
    $ dotnet new sln
    $ dotnet new console --output ConsoleApp
    $ dotnet sln add ConsoleApp
    
    뉴크 네.NET Tool Edition을 추천합니다.설치 중입니다.
    $ dotnet new tool-manifest
    $ dotnet tool install Nuke.GlobalTool
    
    다음은 설정입니다.질문을 많이 받았는데 어쨌든 묵인하면 되죠.단, GitVersion 선택하십시오No.
    $ dotnet nuke :setup:
    
    NUKE Global Tool version 5.0.2 (Windows,.NETCoreApp,Version=v2.1)
    Could not find root directory. Falling back to working directory.
    How should the build project be named?
    ≫
    ¬  _build
    
    ...
    
    Do you use GitVersion?
    ¬  No, custom versioning
    Creating directory 'C:\Users\masakura\tmp\app\.\build'...
    Creating directory 'C:\Users\masakura\tmp\app\source'...
    Creating directory 'C:\Users\masakura\tmp\app\tests'...
    
    스크립트 프로젝트를 성공적으로 만들었습니다. 만드십시오.
    $ dotnet nuke build
    
    ...
    
    ═══════════════════════════════════════
    Target             Status      Duration
    ───────────────────────────────────────
    Restore            Executed        0:01
    Compile            Executed        0:01
    ───────────────────────────────────────
    Total                              0:03
    ═══════════════════════════════════════
    
    Build succeeded on 2021/02/18 19:36:15. \(^ᴗ^)/
    
    구축 완료!
    그나저나 가로로 비주얼 개발자가 일본인인가?
    사용자 정의 빌드
    사용자 정의 구축 스크립트build 수정 프로젝트Build.cs의 파일입니다.
    build/Build.cs
    class Build: NukeBuild
    {
        // ...
    
        Target Restore => _ => _
            .Executes(() =>
            {
                DotNetRestore(s => s
                    .SetProjectFile(Solution));
            });
    
        Target Compile => _ => _
            .DependsOn(Restore)
            .Executes(() =>
            {
                DotNetBuild(s => s
                    .SetProjectFile(Solution)
                    .SetConfiguration(Configuration)
                    .EnableNoRestore());
            });
    }
    
    => _ => _ 같은 건 부식???이런 문법을 요구하지만 그렇다고 생각하세요.FAQ에도 쓰여 있는데...)dotnet nuke Restore 또는 dotnet nuke Compile에서 각각의 목표를 수행할 수 있습니다.자세한 내용은 공식 문서를 참조하십시오.DotNetBuild() 등 함수는 임무이다.퀘스트 일람표는 API Reference의 어떤 종류에서Tasks로 끝납니다.케이크에 비해 조금 적다.
    임무를 이용하다
    ReShaper Command Line Tools를 이용하여 코드 검사를 진행하다.
    build/Build.cs
    class Build : NukeBuild
    {
        // ...
    
        Target Lint => _ => _
            .DependsOn(Compile)
            .Executes(() =>
            {
                ReSharperInspectCode(s => s
                    .SetTargetPath("app.sln")
                    .SetOutput("inspection-report.xml"));
            });
    }
    
    그리고 실행dotnet nuke Lint.및 오류입니다.
    $ dotnet nuke Lint
    
    ...
    
    Assertion failed: Could not find package 'JetBrains.ReSharper.GlobalTools' using:
     - Project assets file 'C:\Users\masakura\tmp\app\build\obj\project.assets.json'
     - NuGet packages config 'C:\Users\masakura\tmp\app\build\_build.csproj'
    Run 'nuke :fix' to add missing references.
    
    ...
    
    dotnet nuke :fix 하라는 거니까 실행해.
    $ dotnet nuke :fix
    
    NUKE Global Tool version 5.0.2 (Windows,.NETCoreApp,Version=v2.1)
    During last execution a package was found to be missing.
    Which version of 'JetBrains.ReSharper.GlobalTools' should be added?
    ¬  2020.3.2 (latest release)
    > "C:\Program Files\dotnet\dotnet.exe" --info
    Added 'JetBrains.ReSharper.GlobalTools' to 'C:\Users\masakura\tmp\app\build\_build.csproj'.
    
    .NET Tools 버전의 ReShare Command Line Tools가 _build 프로젝트에 포함됩니다.
    다시 한 번dotnet nuke Lint하면 이번에 성공할 거야.
    $ dotnet nuke Lint
    
    Build succeeded on 2021/02/18 20:18:43. \(^ᴗ^)/
    
    유감스럽게도 ReSharper Command Line Tools를 수행하는 작업이기 때문에 코드에 문제가 있어도 구축에 실패하지 않을 것입니다...
    그러나 보고서 파일을 읽을 때 문제가 있을 경우 목표 이름Fail()을 바꿀 수 있습니다.
    매개 변수
    매개변수는 다음과 같습니다.
    build/Build.cs
    class Build: NukeBUild
    {
        [Parameter("Configuration to build - Default is 'Debug' (local) or 'Release' (server)")]
        readonly Configuration Configuration = IsLocalBuild ? Configuration.Debug : Configuration.Release;
    
        // ...
    }
    
    dotnet nuke --configuration ReleaseConfiguration 변수 중Release이 있다.Compile 목표는 .SetConfiguration(Configuration)이기 때문에 발행 구축이어야 한다.
    무슨 기IsLocalBuild 속성이 편리해요.이것은 개발자의 컴퓨터가 구축되었는지 검사할 수 있다.CI에 구축됐을 때 배급사옥이 됐다는 얘기네요.(^ᴗ^)/
    경로
    나는 패스가 좀 재미있다고 생각한다.디렉토리 또는 파일 등입니다.
    build/Build.cs
    class Build : NukeBuild
    {
        // ...
    
        AbsolutePath SourceDirectory => RootDirectory / "source";
        AbsolutePath TestsDirectory => RootDirectory / "tests";
        AbsolutePath OutputDirectory => RootDirectory / "output";
    
        // ...
    }
    
    과부하 시 덮어쓰기 / 를 할 수 있으며, 이런 식으로 쓸 수 있습니다.
    외부 도구 호출Lint 목표 출력의 보고서를 코드climate 형식의 JSON 파일로 변환합니다.
    build/Build.cs
    class Build : NukeBuild
    {
        // ...
    
        [PackageExecutable("resharper-to-codeclimate", "resharper-to-codeclimate.dll")]
        readonly Tool ReSharperToCodeClimate;
    
        Target Lint => _ => _
            .DependsOn(Compile)
            .Executes(() =>
            {
                ReSharperInspectCode(s => s
                    .SetTargetPath("app.sln")
                    .SetOutput("inspection-report.xml"));
                ReSharperToCodeClimate("inspection-report.xml inspection-report.json");
            });
    }
    
    NuGet의 매크로 패키지는 PackageExecutable에서 실행할 수 있습니다.도구를 추가할 때 잊지 마십시오dotnet :fix.
    $ dotnet nuke Lint
    
    Build succeeded on 2021/02/18 20:31:53. \(^ᴗ^)/
    
    inspection-report.json 서류가 다 된 것 같아요.(^ᴗ^)/
    실행 파일도 호출할 수 있다.자세한 내용은 Lightweight Integration를 보십시오.
    GitLab은 Merge Request(GitHub의 Pull Request)에 Codeclimate 형식의 보고서를 표시하는 기능이 있습니다.관심 있는 사람은 선택하세요Code Quality.편해요.
    시용해 보다
    조개 스크립트 등에 비해 시동을 거는 데 시간이 조금 걸려 아쉽지만 쓰기가 좋아 만족합니다.복잡한 처리를 할 때도 C#의 코드를 유지한다. 아무래도 IDE의 코드 보완과 코드 검사의 코드 성형이 매우 많다.
    멋진 각본을 쓰고 싶은 사람을 추천합니다.
    임무는 적지만 C#로 쉽게 코드를 쓰면 되니까 별로 신경 안 써요.
    GitVersion와의 협업도 의외로 편리했다.나는 다음에 기회가 있으면 다시 개설하고 싶다.

    좋은 웹페이지 즐겨찾기