다음을 통해 공유


Azure Artifacts 피드를 프라이빗 PowerShell 리포지토리로 사용

Azure DevOps Services

Azure Artifacts는 공동 작업을 촉진하고 효율성을 극대화하기 위해 팀 간에 PowerShell 스크립트를 쉽게 공유할 수 있는 방법을 제공합니다. PowerShell 모듈을 프라이빗 리포지토리에 저장하면 팀 구성원에게 명령줄을 사용하여 해당 스크립트를 빠르게 다운로드하거나 업데이트할 수 있는 기능을 제공할 수 있습니다.

이 문서에서는 PowerShell 모듈을 저장하고 공유하는 프라이빗 PowerShell 리포지토리로 Azure Artifacts 피드를 설정하는 방법을 안내합니다. 이 문서에서 배울 내용은 다음과 같습니다.

  • 개인용 액세스 토큰 만들기
  • PowerShell 모듈을 저장할 새 피드 만들기
  • PowerShell 모듈 만들기, 패키지 및 게시
  • PowerShell을 사용하여 피드에 커넥트
  • Azure Pipelines에서 프라이빗 PowerShell 리포지토리 사용

필수 조건

개인용 액세스 토큰 만들기

PAT(개인용 액세스 토큰)를 사용하면 기본 자격 증명을 사용하지 않고 Azure DevOps로 인증할 수 있습니다. 자세한 내용은 개인용 액세스 토큰 사용을 참조하세요.

  1. Azure DevOps 조직으로 이동 https://dev.azure.com/<ORGANIZATION_NAME>/

  2. 사용자 설정 아이콘을 선택한 다음 개인용 액세스 토큰을 선택합니다.

    개인 액세스 토큰을 만드는 방법을 보여 주는 스크린샷

  3. 새 토큰 선택

  4. PAT의 이름을 입력한 다음 만료 날짜를 선택합니다.

  5. 정의된 사용자 지정을 선택한 다음 읽기, 쓰기 및 관리 패키징을>선택합니다.

  6. 완료되면 만들기를 선택합니다. PAT를 복사하여 안전한 위치에 저장합니다.

    새 개인용 액세스 토큰을 설정하는 방법을 보여 주는 스크린샷

모듈 만들기

  1. 새 폴더 Get-Hello를 만듭니다. 폴더 내부로 이동하여 새 파일 Get-Hello.psm1을 만듭니다.

    |--- Get-Hello               // Parent folder     
        |--- Get-Hello.psm1     // This will become our PowerShell Module
        |--- Get-Hello.psd1    // This will become our module manifest
    
  2. Get-Hello.psm1 파일에 다음 스크립트를 붙여넣습니다.

    Function Get-Hello{
        Write-Host "Hello from my Azure DevOps Services Package."
    }
    
  3. Get-Hello 디렉터리 경로에서 다음 명령을 실행하여 모듈 매니페스트를 만듭니다.

    New-ModuleManifest -Path .\Get-Hello.psd1
    
  4. Get-Hello.psd1 파일을 열고 변수를 찾습니다RootModule. 빈 문자열을 다음과 같이 Get-Hello.psm1 파일의 경로로 바꿉니다.

    RootModule = 'Get-Hello.psm1'
    
  5. 이 섹션은 이 FunctionsToExport 모듈에서 내보낼 함수 목록을 정의하기 위한 것입니다. 다음과 같이 Get-Hello 함수를 추가합니다.

    FunctionsToExport = @('Get-Hello')
    
  6. 섹션을 FileList 찾아 모듈과 함께 패키지해야 하는 다음 파일 목록을 추가합니다.

    FileList = @('./Get-Hello.psm1')
    

모듈 압축 및 게시

  1. 모듈에 대한 nuspec 파일을 만듭니다. 이 명령은 모듈을 압축하는 데 필요한 메타데이터를 포함하는 Get-Hello.nuspec 파일을 만듭니다.

    nuget spec Get-Hello
    
  2. 다음 명령을 실행하여 모듈을 압축합니다.

    nuget pack Get-Hello.nuspec
    
  3. 다음 명령을 실행하여 피드 원본 URL을 추가합니다. NuGet v3은 지원되지 않습니다. 피드 원본 URL에서 v2를 사용해야 합니다.

    • 조직 범위 피드:

      nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
      
    • 프로젝트 범위 피드:

      nuget sources Add -Name "<FEED_NAME>" -Source "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -username "<USER_NAME>" -password "<PERSONAL_ACCESS_TOKEN>"
      
  4. 피드에 패키지를 게시합니다.

    nuget push -Source "<FEED_NAME>" -ApiKey "<ANY_STRING>" "<PACKAGE_PATH>"
    

    게시된 패키지를 보여 주는 스크린샷.

Important

모듈 매니페스트(.psd1) 및 .nuspec 파일의 버전 번호가 일치해야 합니다.

PowerShell 리포지토리로 피드할 커넥트

  1. 관리자 권한 PowerShell 프롬프트 창을 엽니다.

  2. Azure Artifacts를 사용하여 인증하도록 자격 증명을 설정합니다. 자리 표시자를 적절한 정보로 바꿉다.

    $patToken = "<PERSONAL_ACCESS_TOKEN>" | ConvertTo-SecureString -AsPlainText -Force
    
    $credsAzureDevopsServices = New-Object System.Management.Automation.PSCredential("<USER_NAME>", $patToken)
    
  3. PowerShell 리포지토리를 등록합니다. Project SourceLocation 설치 원본 URL에서 아티팩트>커넥트 피드>NuGet.exe 이동하여 링크를 찾을 수 있습니다.

    • 프로젝트 범위 피드:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      
    • 조직 범위 피드:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      

    이전 visualstudio.com URL을 계속 사용하는 경우 다음 명령을 대신 사용합니다.

    • 프로젝트 범위 피드:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      
    • 조직 범위 피드:

      Register-PSRepository -Name "PowershellAzureDevopsServices" -SourceLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -PublishLocation "https://<ORGANIZATION_NAME>.pkgs.visualstudio.com/_packaging/<FEED_NAME>/nuget/v2" -InstallationPolicy Trusted -Credential $credsAzureDevopsServices
      

    특정 버전의 PowerShell에서는 패키지 원본 경고를 해결할 수 없음을 방지하기 위해 cmdlet을 Register-PSRepository 실행한 후 새 세션을 다시 시작해야 합니다.

  4. 패키지 원본을 등록합니다.

    • 프로젝트 범위 피드:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices
      
    • 조직 범위 피드:

      Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -SkipValidate -Credential $credsAzureDevopsServices 
      
  5. 다음 명령을 실행하여 리포지토리가 성공적으로 등록되었는지 확인합니다. 이 명령은 현재 사용자에 대해 등록된 모든 리포지토리를 가져옵니다.

    Get-PSRepository
    
  6. 리포지토리에서 모든 모듈을 찾으려면 다음 명령을 실행합니다.

    Find-Module -Repository PowershellAzureDevopsServices
    
  7. Get-Hello 모듈을 설치하려면 다음 명령을 실행합니다.

    Install-Module -Name Get-Hello -Repository PowershellAzureDevopsServices
    

Install-Module 명령이 다음 오류를 반환하는 경우: 패키지 원본을 확인할 수 없는 경우 다음과 같이 플래그를 사용하여 cmdlet을 Trusted 다시 실행 Register-PackageSource 합니다.

Register-PackageSource -Name "PowershellAzureDevopsServices" -Location "https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2" -ProviderName NuGet -Trusted -Trusted -SkipValidate -Credential $credsAzureDevopsServices

참고 항목

조직에서 방화벽 또는 프록시 서버를 사용하는 경우 Azure Artifacts Do기본 URL 및 IP 주소를 허용해야 합니다.

Azure Pipelines를 사용하여 모듈 등록 및 설치

이 예제에서는 YAML 파이프라인을 사용하여 PowerShell 모듈을 인증하고 설치하는 프로세스를 보여 줍니다. 파이프라인 내에서 개인 액세스 토큰을 사용하려면 다음과 같이 파이프라인 변수로 포함해야 합니다.

  1. Azure DevOps 조직에 로그인한 다음 프로젝트로 이동합니다.

  2. 파이프라인을 선택하고 파이프라인을 선택한 다음 편집을 선택하여 파이프라인을 편집합니다.

  3. 오른쪽 위 모서리에서 변수를 선택한 다음 기호를 + 선택하여 새 변수를 만듭니다.

  4. 변수의 이름을 입력한 다음 값 텍스트 상자에 개인 액세스 토큰을 붙여넣습니다.

  5. 이 값 비밀 검사 상자를 선택해야 합니다. 완료되면 확인을 선택합니다. 이제 파이프라인에서 변수를 사용할 준비가 되었습니다.

trigger:
- main

pool:
  vmImage: 'Windows-latest'

variables:
  PackageFeedEndpoint: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/nuget/v2'  ## For project scoped feeds use: 'https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/nuget/v2'
  PackageFeedEndpointCredential: '{"endpointCredentials": [{"endpoint":"$(PackageFeedEndpoint)", "username":"Admin", "password":"$(AZURE_DEVOPS_PAT)"}]}'

steps:
- powershell: |
    Register-PSRepository -Name "psRepoPipeline" -SourceLocation '$(PackageFeedEndpoint)' -InstallationPolicy Trusted
  displayName: 'Register Azure Artifacts Feed as PSRepository'
  env:
    VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)

- powershell: |
     echo (Get-PSRepository)
  displayName: 'Get all module repositories'

- powershell: |
    Find-Module -Name "Get-Hello" | Install-Module -Confirm:$false -Force
  displayName: 'Install the Get-Hello PowerShell module'
  env:
    VSS_NUGET_EXTERNAL_FEED_ENDPOINTS: $(PackageFeedEndpointCredential)