NUKE Build 추천
전복이 귀찮은 사람은 NUKE 사용법부터 시도해 보세요!
.NET는 이전부터 구축 도구가 필요하지 않았습니다.실제로 MSBuild를 은밀히 사용하거나 의식적으로 사용하는 경우는 드물죠?
나는 CI를 많이 사용한 후에 구축 도구를 사용하기 시작했다.
처음에는 명령을 한데 배열했을 뿐입니다. 제출한 후에 미루면 CI 작업은 실패합니다.반복해서 연습하다가 싫어졌어요.
지령이 많으면 손 옆에서 테스트하는 것도 어렵다.수중에 테스트한 지령을 CI로 설정할 때 오류를 복제하는 일은 짜증이 난다.
이것저것
조개각본
개인적으로 이게 제일 좋아요.연장선에 명령을 배열하다.
하지만 개발은 Windows, CI는 Linux라면 어렵다.
개발이 Windows이고 CI도 Windows일 때 셸 스크립트를 사용할 수 없기 때문에 PowerShell을 사용했습니다.
.NET의 학급 라이브러리는 매우 잘 사용할 수 있다.조개 스크립트라면 XML을 지우고 다시 쓰거나 연결 문자열을 고치는 것은 좀 힘들다.
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 Release
면Configuration
변수 중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와의 협업도 의외로 편리했다.나는 다음에 기회가 있으면 다시 개설하고 싶다.
Reference
이 문제에 관하여(NUKE Build 추천), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/masakura/items/9fa0449ca18101def887텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)