빌드 작업 계획

완료됨

Mara는 이제 Space Game 코드의 복사본이 있습니다. 기존 Ubuntu 22.04 빌드 서버 대신 Microsoft Azure Pipelines를 사용하여 해당 복사본을 빌드하려고 합니다. 이렇게 하려면 기존 빌드 스크립트에 대해 생각해야 합니다. Mara가 Azure Pipelines 작업에 기존 스크립트를 매핑하는 과정을 따라가 보세요. 자신의 고유한 빌드 프로세스에서는 어떻게 하면 동일하게 할 수 있을지 생각해 보세요.

다음은 Mara가 선임 개발자인 Andy와 논의한 내용을 적어둔 메모입니다.

  • 빌드 머신은 Ubuntu 22.04를 실행하고 있습니다.
  • 빌드 머신에는 다음과 같은 빌드 도구가 포함됩니다.
    • Node.js용 패키지 관리자인 npm
    • .NET용 패키지 관리자인 NuGet
    • .NET SDK
  • 프로젝트는 Sass(Syntactically Awesome Style Sheets)를 사용하여 CSS(CSS 스타일시트) 파일을 더 쉽게 작성할 수 있도록 합니다.
  • 이 프로젝트는 gulp 도구 키트를 사용하여 JavaScript 및 CSS 파일을 축소합니다.

빠른 다운로드를 위해 축소된 자산은 공백과 같은 불필요한 데이터를 제외하고 변수 이름을 줄입니다.

빌드 프로세스 중에 발생하는 단계는 다음과 같습니다.

  1. package.json에 정의된 Node.js 패키지를 설치하려면 npm install을 실행합니다.
  2. Sass(.scss) 파일을 CSS(.css) 파일로 변환하려면 node-sass를 실행합니다.
  3. JavaScript와 CSS 파일을 축소하려면 gulp를 실행합니다.
  4. QA 팀이 빌드 번호와 날짜를 식별하도록 지원하려면 빌드 정보를 wwwroot 디렉터리에 출력합니다.
  5. 프로젝트의 종속성을 설치하려면 dotnet restore을 실행합니다.
  6. 디버그 및 릴리스 구성에 따라 앱을 빌드하려면 dotnet build를 실행합니다.
  7. 애플리케이션을 .zip 파일로 패키지하고 QA 팀에서 선택할 수 있도록 결과를 네트워크 공유로 복사하려면 dotnet publish를 실행합니다.

Mara는 자신이 식별한 작업을 수행하는 셸 스크립트를 작성하고 자신의 노트북에서 실행합니다.

참고

여기서 이 스크립트를 실행하거나 이 스크립트가 수행하는 작업을 이해할 필요는 없습니다. 해당 스크립트는 일반적인 빌드 스크립트가 무엇을 실행하는지 설명하기 위한 용도입니다.

#!/bin/bash

# Install Node.js modules as defined in package.json.
npm install --quiet

# Compile Sass (.scss) files to standard CSS (.css).
node-sass Tailspin.SpaceGame.Web/wwwroot

# Minify JavaScript and CSS files.
gulp

# Print the date to wwwroot/buildinfo.txt.
echo `date` > Tailspin.SpaceGame.Web/wwwroot/buildinfo.txt

# Install the latest .NET packages the app depends on.
dotnet restore

# Build the app under the Debug configuration.
dotnet build --configuration Debug

# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Debug --output /tmp/Debug

# Build the app under the Release configuration.
dotnet build --configuration Release

# Publish the build to the /tmp directory.
dotnet publish --no-build --configuration Release --output /tmp/Release

/tmp 디렉터리는 팀의 네트워크 공유와 비슷하게 작동합니다.

스크립트를 실행한 후 Mara는 해당 스크립트가 완전하지 않다는 사실을 알았습니다. 예를 들어 오류를 처리하지 않고, 빌드 오류가 발생한 경우 아무에게도 알리지 않았습니다. 심지어 오류가 발생했는데도 계속 실행되었으며 각 단계에 필요한 도구를 설치하지 않았습니다.

Azure Pipelines 작업이란?

Azure Pipelines에서 ‘작업’은 일련의 입력으로 추상화된 패키지 스크립트 또는 절차입니다.

Azure Pipelines 작업은 기본 세부 정보를 추상화합니다. 이와 같은 추상화는 앱에서 사용하는 빌드 도구 또는 패키지 다운로드 등과 같은 일반적인 빌드 기능을 더 쉽게 실행하거나 Visual Studio 또는 Xcode를 실행하는 프로젝트를 더 쉽게 빌드하도록 합니다.

다음은 .NET을 대상으로 하는 C# 프로젝트를 빌드하기 위해 DotNetCoreCLI@2 작업을 사용하는 예입니다.

task: DotNetCoreCLI@2
  displayName: 'Build the project'
  inputs:
    command: 'build'
    arguments: '--no-restore --configuration Release'
    projects: '**/*.csproj'

파이프라인은 이 작업을 다음 명령으로 변환할 수 있습니다.

dotnet build MyProject.csproj --no-restore --configuration Release

이 작업을 좀 더 자세히 살펴보겠습니다.

  • DotNetCoreCLI@2 작업은 dotnet 명령에 매핑됩니다.
  • displayName은 사용자 인터페이스에 표시되는 작업 이름을 정의합니다. 이는 곧 실제로 확인할 수 있습니다.
  • inputs는 명령에 전달되는 인수를 정의합니다.
    • commanddotnet build 하위 명령을 실행하도록 지정합니다.
    • arguments는 명령에 전달할 추가 인수를 지정합니다.
    • projects는 빌드할 프로젝트를 지정합니다. 이 예제에서는 와일드카드 패턴을 **/*.csproj를 사용합니다. ***.csproj 둘 다 ‘glob 패턴’의 예입니다. ** 부분은 현재 디렉터리와 모든 하위 디렉터리를 검색하도록 지정합니다. *.csproj 부분은 .csproj 파일을 지정합니다. 와일드카드를 사용하면 각 파일을 지정하지 않고 여러 파일에 대해 작업을 수행할 수 있습니다. 특정 파일에 대해서만 작업을 수행해야 하는 경우에는 와일드카드를 사용하는 대신 해당 파일을 지정할 수 있습니다.

예를 들어 작업 이름에서 “@”(예: DotNetCoreCLI@2)은 작업의 버전을 나타냅니다. 새 작업 버전을 사용할 수 있게 되면 새 기능을 활용하기 위해 점진적으로 최신 버전으로 마이그레이션할 수 있습니다.

작업은 파이프라인에서 어떻게 사용되나요?

다음으로 Mara는 기존 스크립트 명령을 Azure Pipelines 작업에 매핑하려고 합니다. 파이프라인은 구성 파일에 있는 데이터의 종류를 쉽게 구성하도록 하는 압축 형식인 YAML 파일을 사용하여 만들어집니다. 파이프라인 YAML 파일은 일반적으로 앱의 소스 코드로 직접 유지 관리됩니다.

Mara는 이전에 유사한 빌드 작업과 구성을 정의하기 위해 이전에 YAML을 사용했습니다. 또한 프로젝트의 다른 부분과 마찬가지로 빌드 정의를 코드로 유지 관리하는 것을 선호합니다.

빌드를 정의하기 위해 Mara는 Visual Studio Code를 사용하여 YAML 파일을 만들기로 합니다. 해당 파일 내에 기존 스크립트 명령을 바꾸는 데 사용할 모든 Azure Pipelines 작업을 입력합니다.

Azure Pipelines 작업에 스크립트 명령 매핑

이제 Mara가 작성한 스크립트의 명령을 Azure Pipelines 작업으로 매핑하는 과정을 따라갑니다.

각 명령을 매핑하기 위해 Mara는 참조 설명서를 참조합니다. 해당 설명서는 작업을 빌드 또는 배포와 같은 기능별로 분류합니다.

예를 들어 .NET Core CLI 작업DotNetCoreCLI@2dotnet 명령 실행을 지원합니다.

다음 표에서는 스크립트 명령과 새 Azure Pipelines 작업을 연결합니다.

스크립트 명령 Azure Pipelines 작업
npm install Npm@1
node-sass CmdLine@2(또는 script)
gulp gulp@1
echo `date` CmdLine@2(또는 script)
dotnet restore DotNetCoreCLI@2
dotnet build DotNetCoreCLI@2
dotnet publish DotNetCoreCLI@2

node-Sass를 실행하거나 파일에 날짜를 출력하는 기본 제공 작업 유형은 없습니다. 이를 위해 Mara는 원하는 모든 명령을 실행하도록 하는 CmdLine@2 작업을 사용합니다. 일반적으로 CmdLine@2에 대한 바로 가기인 script 작업을 볼 수 있습니다. 다른 일반적인 작업 바로 가기에 대한 자세한 내용은 Azure Pipelines에 대한 YAML 체계 참조 - 단계를 참조하세요.

곧 해당 작업을 사용하는 YAML 파일을 만들 것입니다.

지식 점검

1.

다음 중 ‘빌드 작업’을 가장 잘 설명한 것은 무엇인가요?