다음을 통해 공유


Chocolatey를 사용한 지속적인 배포 설정

참고 항목

Azure Automation 상태 구성은 2027년 9월 30일에 사용 중지됩니다. 해당 날짜까지 Azure Machine Configuration으로 전환하세요. 자세한 내용은 블로그 게시물 공지 사항을 참조하세요. Azure Machine 구성 서비스는 DSC 확장, Azure Automation State Configuration 및 고객 피드백에서 가장 일반적으로 요청되는 기능을 결합합니다. Azure Machine 구성에는 Arc 지원 서버를 통한 하이브리드 컴퓨터 지원도 포함됩니다.

주의

Linux용 Azure Automation DSC는 2023년 9월 30일에 사용 중지되었습니다. 자세한 내용은 공지를 참조하세요.

DevOps 업계에는 연속 통합 파이프라인의 여러 시점에서 개발자를 지원하는 여러 도구가 있습니다. Azure Automation State Configuration이 DevOps 팀이 채택할 수 있는 새로운 옵션으로 추가되었습니다.

Azure Automation은 사용자가 자격 증명, 일정 및 글로벌 변수와 같은 Runbook, 노드 및 공유 리소스를 사용하여 다양한 작업을 자동화할 수 있도록 하는 Microsoft Azure의 관리형 서비스입니다. Azure Automation State Configuration은 PowerShell DSC(Desired State Configuration) 도구를 포함하도록 자동화 기능을 확장합니다. 여기서 알맞은 개요를 제공합니다.

이 문서에서는 Windows 컴퓨터에 대해 CD(지속적인 배포)를 설정하는 방법을 보여 줍니다. 웹 사이트와 같이 역할에 필요한 만큼의 Windows 컴퓨터를 포함하도록 기술을 쉽게 확장하고 더 많은 역할로 이동하면 됩니다.

IaaS VM에 대한 연속 배포

높은 수준

이 단계는 상당 부분 진행 중이지만 다행스럽게도 두 가지 기본 프로세스로 나눌 수 있습니다.

  • 즉 코드를 작성하여 테스트한 다음 시스템의 주 버전과 부 버전에 대해 설치 패키지를 만들고 게시하는 것입니다.
  • 패키지에서 코드를 설치 및 실행할 VM을 만들고 관리합니다.

이 핵심 프로세스가 둘 다 배치되어 있으면 새 버전을 만들어 배포할 때 VM에서 패키지를 자동으로 업데이트하기 쉽습니다.

구성 요소 개요

apt-get 같은 패키지 관리자는 Linux 분야에서 잘 알려져 있지만 Windows 분야에서는 그렇지 않습니다. Chocolatey 는 Windows용 패키지 관리자입니다. 초콜릿에 대한 Scott Hanselman의 블로그 게시물은 훌륭한 소개입니다. Chocolatey를 사용하면 명령줄을 사용하여 중앙 리포지토리의 패키지를 Windows 운영 체제에 설치할 수 있습니다. 자체 리포지토리를 만들어 관리할 수 있고 Chocolatey가 사용자가 지정한 수 만큼의 리포지토리에서 패키지를 설치할 수 있습니다.

PowerShell DSC는 머신에 원하는 구성을 선언할 수 있는 PowerShell 도구입니다. 예를 들어 Chocolatey를 설치하고, IIS를 설치하고, 포트 80을 열고, 웹 사이트의 버전 1.0.0을 설치하려는 경우 DSC LCM(로컬 구성 관리자)은 해당 구성을 구현합니다. DSC 풀 서버가 머신에 대한 구성 리포지토리를 담고 있습니다. 각 컴퓨터의 LCM이 주기적인 검사를 통해 자신의 구성이 저장된 구성과 일치하는지 확인합니다. 상태를 보고하거나, 컴퓨터를 저장된 구성과 일치하는 상태로 되돌리는 작업을 수행할 수 있습니다. 풀 서버에서 저장된 구성을 편집하여 컴퓨터나 컴퓨터 집합이 변경된 구성과 일치하게 만들 수 있습니다.

DSC 리소스는 네트워크 관리, Active Directory 또는 SQL Server 등과 같은 특정 기능을 갖는 코드 모듈입니다. Chocolatey DSC 리소스는 NuGet 서버에 액세스하고, 패키지를 다운로드하고, 패키지를 설치하고, 다른 작업을 수행하는 방법을 알고 있습니다. 여러 다른 DSC 리소스는 PowerShell 갤러리에 있습니다. 이러한 모듈을 사용자의 구성에서 사용할 수 있도록 Azure Automation State Configuration 풀 서버에 설치합니다.

Resource Manager 템플릿은 다음과 같은 인프라에 대한 리소스를 생성하는 선언적 방법을 제공합니다.

  • 네트워크 및 서브넷
  • 네트워크 보안
  • 라우팅
  • 부하 분산 장치,
  • NIC, VM 및 기타

Resource Manager 배포 모델(선언적)과 Azure 클래식 배포 모델(명령적)을 비교하려면 Azure Resource Manager와 클래식 배포를 참조하세요. 이 문서에는 컴퓨팅, 스토리지 및 네트워크와 같은 핵심 리소스 공급자에 대한 설명이 포함되어 있습니다.

Resource Manager 템플릿의 주요 기능 중 하나는 VM 프로비전 중에 VM 확장을 설치하는 기능입니다. VM 확장에는 사용자 지정 스크립트 실행, 바이러스 백신 소프트웨어 설치, DSC 구성 스크립트 실행 등과 같은 특정 기능이 있습니다. VM 확장에는 여러 다른 형식이 있습니다.

간략히 다이어그램 둘러보기

맨 위쪽부터 코드를 작성하고 빌드 및 테스트한 다음, 설치 패키지를 만듭니다. Chocolatey는 MSI, MSU, ZIP 등과 같은 다양한 형태의 설치 패키지를 처리할 수 있습니다. 또한 Chocolatey의 기본 기능이 부족할 경우 PowerShell을 완전히 활용하여 실제 설치를 수행할 수 있습니다. 패키지를 읽을 수 있는 특정 위치인 패키지 리포지토리에 넣습니다. 이 사용 예는 Auzre Blob Storage 계정의 공용 폴더를 사용하지만 어디에나 있을 수 있습니다. Chocolatey는 패키지 메타데이터의 관리를 위해 NuGet 서버 및 기타 제품과 기본적으로 연동됩니다. 이 문서 에서는 이러한 옵션에 대해 설명합니다. 사용 예제는 NuGet을 사용합니다. Nuspec은 패키지에 관한 메타데이터입니다. Nuspec 정보는 NuPkg로 컴파일되고 NuGet 서버에 저장됩니다. 구성에서 이름으로 패키지를 요청하고 NuGet 서버를 참조할 경우 VM의 Chocolatey DSC 리소스가 패키지를 포착하여 설치합니다. 특정 버전의 패키지를 요청할 수도 있습니다.

그림의 왼쪽 하단에는 Azure Resource Manager 템플릿이 있습니다. 이 사용 예제에서는 VM 확장이 VM을 Azure Automation State Configuration 풀 서버에 노드로 등록합니다. 구성은 풀 서버에 두 번(일반 텍스트로 한 번, MOF 파일로 컴파일되어 한 번) 저장됩니다. Azure Portal에서 MOF는 단순 구성과 반대로 노드 구성을 나타냅니다.

Nuspec을 만들고, 컴파일하고, NuGet 서버에 저장하는 것은 비교적 간단합니다. 연속 배포의 다음 단계에서는 다음과 같은 일회성 작업이 필요합니다.

  • 끌어오기 서버 설정
  • 서버에 노드 등록
  • 서버에서 초기 구성 만들기

리포지토리에 패키지를 업그레이드하고 배포할 때만 끌어오기 서버에서 구성 및 노드 구성을 새로 고쳐야 합니다.

Resource Manager 템플릿으로 시작하지 않는 경우 끌어오기 서버에 VM을 등록하는 데 도움이 되는 PowerShell 명령이 있습니다. 자세한 내용은 Azure Automation State Configuration을 통해 관리를 위한 머신 온보드를 참조하세요.

사용 예제 정보

이 문서의 사용 예제는 Azure 갤러리의 일반 Windows Server 2012 R2 이미지에서 VM으로 시작합니다. 아무 저장된 이미지에서나 시작하고 DSC 구성을 통해 조정을 진행할 수 있습니다. 그러나 이미지에 반영되는 구성을 변경하는 작업은 DSC를 사용하여 구성을 동적으로 업데이트하는 작업보다 훨씬 어렵습니다.

이 방법을 VM에 사용하기 위해 Resource Manager 템플릿이나 VM 확장을 사용할 필요는 없습니다. 또한 VM이 CD 관리를 위해 Azure에 있을 필요도 없습니다. Chocolatey를 설치하고 끌어오기 서버가 어디에 있는지 알 수 있도록 VM에 LCM을 구성하기만 하면 됩니다.

프로덕션 상태인 VM에서 패키지를 업데이트할 때는 업데이트가 설치되는 동안 VM을 로테이션에서 배제해야 합니다. 이를 수행하는 방법은 크게 다릅니다. 예를 들어, Azure 부하 분산 장치 뒤에 있는 VM에서는 사용자 지정 프로브를 추가할 수 있습니다. VM을 업데이트하는 동안 프로브 엔드포인트가 400을 반환하게 합니다. 업데이트가 완료되면 다시 200으로 전환하기 위해 조정을 수행할 수 있으므로 이 변경을 발생시키는 데 필요한 조정은 구성 내에 있을 수 있습니다.

이 사용 예의 전체 원본은 GitHub의 이 Visual Studio 프로젝트 에 있습니다.

1단계: 풀 서버 및 Automation 계정 설정

인증된 (Connect-AzAccount) PowerShell 세션에서 다음 명령을 실행합니다.

New-AzResourceGroup -Name MY-AUTOMATION-RG -Location MY-RG-LOCATION-IN-QUOTES
$newAzAutomationAccountSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    Location = 'MY-RG-LOCATION-IN-QUOTES'
    Name = 'MY-AUTOMATION-ACCOUNT'
}
New-AzAutomationAccount @newAzAutomationAccountSplat

이 단계는 끌어오기 서버를 설정하는 동안 몇 분 정도 걸립니다.

다음 Azure 지역에서 Automation 계정을 만들 수 있습니다.

  • 미국 동부 2
  • 미국 중남부
  • US Gov 버지니아
  • 서유럽
  • 동남 아시아
  • 일본 동부
  • 인도 중부
  • 오스트레일리아 남동부
  • 캐나다 중부
  • 북유럽

2단계: Resource Manager 템플릿에 대한 VM 확장 조정

VM 등록에 대한 세부 정보(PowerShell DSC VM 확장 사용)는 이 Azure 빠른 시작 템플릿에서 제공합니다. 이 단계는 새 VM을 상태 구성 노드 목록의 풀 서버에 등록합니다. 이 등록의 일부는 노드에 적용할 노드 구성을 지정하고 있습니다. 이 노드 구성은 끌어오기 서버에 아직 존재하지 않아도 되지만 노드 이름과 구성 이름을 선택해야 합니다. 이 예제에서는 노드가 isvbox 고 구성 이름은 .입니다 ISVBoxConfig. 지정 DeploymentTemplate.json 한 노드 구성 이름은 .입니다 ISVBoxConfig.isvbox.

3단계: 필요한 DSC 리소스를 풀 서버에 추가

PowerShell 갤러리 Azure Automation 계정에 DSC 리소스를 설치할 수 있습니다. 원하는 리소스로 이동하고 Azure Automation에 배포를 선택합니다.

PowerShell 갤러리 예

Azure Portal에 최근에 추가된 또 다른 방법을 사용하면 새 모듈을 당겨오거나 기존 모듈을 업데이트할 수 있습니다. 갤러리 찾아보기 아이콘을 선택하여 갤러리 의 모듈 목록을 보고, 세부 정보를 드릴인하고, Automation 계정으로 가져옵니다. 이 프로세스를 사용하여 모듈을 최신 상태로 유지할 수 있습니다. 또한 가져오기 기능은 다른 모듈과의 종속성을 확인하여 동기화된 항목이 없는지 확인합니다.

또한 나중에 업그레이드하려는 경우가 아니면 리소스당 한 번만 사용되는 수동 방법이 있습니다. PowerShell 통합 모듈 제작에 대한 자세한 내용은 Azure Automation에 대한 통합 모듈 제작을 참조하세요.

참고 항목

Windows 컴퓨터용 PowerShell 통합 모듈의 폴더 구조는 Azure Automation에서의 예상 폴더 구조와 다소 차이가 있습니다.

  1. Windows Management Framework, v5를 설치합니다(Windows 10에는 필요 없음).

  2. 통합 모듈을 설치합니다.

    Install-Module -Name MODULE-NAME`    <—grabs the module from the PowerShell Gallery
    
  3. 모듈 폴더를 임시 폴더 C:\Program Files\WindowsPowerShell\Modules\MODULE-NAME 로 복사합니다.

  4. 주 폴더에서 샘플 및 설명서를 삭제합니다.

  5. 주 폴더를 압축하고 ZIP 파일 이름을 폴더의 이름으로 지정합니다.

  6. ZIP 파일을 Azure Storage 계정의 Blob 스토리지와 같은 연결할 수 있는 HTTP 위치에 배치합니다.

  7. 다음 명령을 실행합니다.

    $newAzAutomationModuleSplat = @{
        ResourceGroupName = 'MY-AUTOMATION-RG'
        AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
        Name = 'MODULE-NAME'
        ContentLinkUri = 'https://STORAGE-URI/CONTAINERNAME/MODULE-NAME.zip'
    }
    New-AzAutomationModule @newAzAutomationModuleSplat
    

포함된 예제는 cChoco 및xNetworking에 대해 이러한 단계를 구현합니다.

4단계: 노드 구성을 풀 서버에 추가

구성을 풀 서버로 처음 가져와 컴파일하는 데는 별다른 사항이 없습니다. 동일한 구성의 모든 가져오기 또는 컴파일은 동일하게 보입니다. 패키지를 업데이트하고 프로덕션으로 푸시해야 할 때마다 패키지의 새로운 버전을 포함하여 구성 파일이 올바른지 확인하고 해당 단계를 수행합니다. 구성 파일 ISVBoxConfig.ps1은 다음과 같습니다.

Configuration ISVBoxConfig
{
    Import-DscResource -ModuleName cChoco
    Import-DscResource -ModuleName xNetworking

    Node 'isvbox' {

        cChocoInstaller installChoco
        {
            InstallDir = 'C:\choco'
        }

        WindowsFeature installIIS
        {
            Ensure = 'Present'
            Name   = 'Web-Server'
        }

        xFirewall WebFirewallRule
        {
            Direction    = 'Inbound'
            Name         = 'Web-Server-TCP-In'
            DisplayName  = 'Web Server (TCP-In)'
            Description  = 'IIS allow incoming web site traffic.'
            Enabled       = 'True'
            Action       = 'Allow'
            Protocol     = 'TCP'
            LocalPort    = '80'
            Ensure       = 'Present'
        }

        cChocoPackageInstaller trivialWeb
        {
            Name      = 'trivialweb'
            Version   = '1.0.0'
            Source    = 'MY-NUGET-V2-SERVER-ADDRESS'
            DependsOn = '[cChocoInstaller]installChoco','[WindowsFeature]installIIS'
        }
    }
}

다음 New-ConfigurationScript.ps1 스크립트는 Az PowerShell 모듈을 사용하도록 수정되었습니다.

$importAzAutomationDscConfigurationSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    SourcePath = 'C:\temp\AzureAutomationDsc\ISVBoxConfig.ps1'
    Published = -Published
    Force = -Force
}
Import-AzAutomationDscConfiguration @importAzAutomationDscConfigurationSplat

$startAzAutomationDscCompilationJobSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    ConfigurationName = 'ISVBoxConfig'
}
$jobData = Start-AzAutomationDscCompilationJob @startAzAutomationDscCompilationJobSplat

$compilationJobId = $jobData.Id

$getAzAutomationDscCompilationJobSplat = @{
    ResourceGroupName = 'MY-AUTOMATION-RG'
    AutomationAccountName = 'MY-AUTOMATION-ACCOUNT'
    Id = $compilationJobId
}
Get-AzAutomationDscCompilationJob @getAzAutomationDscCompilationJobSplat

5단계: 패키지 메타데이터 만들기 및 유지 관리

패키지 리포지토리에 넣는 각 패키지에 대해 이를 설명하는 Nuspec이 필요합니다. NuGet 서버에서 컴파일 및 저장해야 합니다. 자세한 내용은 [nuget.exe CLI를 사용하여 NuGet 패키지 만들기]를 참조하세요.

MyGet.org를 NuGet 서버로 사용할 수 있습니다. 이 서비스를 구매할 수 있지만 무료 스타터 SKU입니다. 프라이빗 패키지에 대한 고유한 NuGet 서버를 설치하는 방법에 대한 지침은 Nuget.org 설명서를 참조하세요.

6단계: 모두 연결

버전이 QA를 전달하고 배포를 승인할 때마다 패키지를 만들고 nuspec 및 nupkg를 NuGet 서버에 업데이트하고 배포합니다. 구성(4단계)을 새 버전 번호로 업데이트해야 합니다. 그런 다음 끌어오기 서버로 보내고 컴파일합니다.

해당 지점부터 업데이트를 끌어오고 설치하는 작업은 해당 구성에 종속되는 VM의 역할입니다. 이러한 각각의 업데이트는 하나 또는 두 줄의 PowerShell로 간단합니다. Azure DevOps의 경우 그 중 일부는 빌드에서 함께 연결할 수 있는 빌드 작업에 캡슐화됩니다. 이 문서에 자세한 내용이 나와 있습니다. 이 GitHub 리포지토리는 사용 가능한 빌드 작업을 자세히 설명합니다.

다음 단계