Azure Stack Hub에서 Azure CLI 및 PowerShell과 함께 Azure 로그인 작업 사용

Azure Stack Hub 인스턴스에 로그인하고 PowerShell을 실행한 다음 Azure CLI 스크립트를 실행하도록 GitHub Actions 설정할 수 있습니다. 이를 Azure Stack Hub를 사용하여 솔루션에 대한 CI/CD(연속 통합, 지속적인 배포) 워크플로의 기초로 사용할 수 있습니다. 이 워크플로를 사용하면 코드 작성에 집중할 수 있도록 솔루션 빌드, 테스트 및 배포를 자동화할 수 있습니다. 예를 들어 Azure Resource Manager 템플릿과 함께 이 워크플로를 사용하여 VM을 프로비전하고, 애플리케이션 리포지토리의 유효성을 검사한 다음, GitHub 특정 분기에 병합할 때마다 해당 VM에 애플리케이션을 배포할 수 있습니다. 지금은 이 문서를 통해 GitHub Actions 및 Azure Stack Hub에 대한 방향을 파악할 수 있습니다.

GitHub Actions 코드 리포지토리 내에서 자동화를 사용하도록 설정하는 작업으로 구성된 워크플로입니다. GitHub 개발 프로세스에서 이벤트를 사용하여 워크플로를 트리거할 수 있습니다. 테스트, 배포 및 연속 통합과 같은 일반적인 DevOps 자동화 작업을 수행할 수 있습니다.

Azure Stack Hub에서 GitHub Actions 사용하려면 특정 요구 사항이 있는 SPN(서비스 주체)을 사용해야 합니다. 이 문서에서는 자체 호스팅 실행기를 만듭니다. GitHub 사용하면 GitHub Actions GitHub 연결할 수 있는 모든 컴퓨터를 사용할 수 있습니다. Azure, Azure Stack Hub 또는 다른 곳에서 실행기로 VM(가상 머신)을 만들 수 있습니다.

이 예제 워크플로에는 다음이 포함됩니다.

  • SPN을 만들고 유효성을 검사하는 방법에 대한 지침입니다.
  • Windows 2016 Server 코어 머신을 GitHub Actions 자체 호스팅 실행기로 구성하여 Azure Stack Hub에서 작동합니다.
  • 다음을 사용하는 워크플로:
    • Azure 로그인 작업
    • PowerShell 스크립트 작업

Azure Stack Hub GitHub Actions

다음 다이어그램에서는 다양한 환경과 관계를 보여 줍니다.

Azure Stack Hub Github action 자체 호스팅 실행기 사용의 일부:

  • GitHub 호스트되는 GitHub Actions
  • Azure에서 호스트되는 자체 호스팅 실행기
  • Azure Stack Hub

Azure Stack Hub에서 GitHub Actions 사용하는 제한 사항은 프로세스에 웹에 연결된 Azure Stack Hub를 사용해야 한다는 것입니다. 워크플로는 GitHub 리포지토리에서 트리거됩니다. id 공급자로 Azure Active Directory(Azure AD) 또는 AD FS(Active Directory Federated Services)를 모두 사용할 수 있습니다.

이 문서는 이 문서의 범위를 벗어나지만 자체 호스팅 실행기는 가상 사설망을 사용하여 방화벽 뒤에 있는 Azure Stack Hub에 연결할 수도 있습니다.

서비스 주체 가져오기

SPN은 Azure 외부의 프로세스가 리소스에 연결하고 상호 작용할 수 있도록 역할 기반 자격 증명을 제공합니다. GitHub Actions 사용하려면 참가자 액세스 권한이 있는 SPN과 이러한 지침에 지정된 특성이 필요합니다.

Azure Stack Hub의 사용자는 SPN을 만들 수 있는 권한이 없습니다. 클라우드 운영자에게 이 원칙을 요청해야 합니다. 이 지침은 클라우드 운영자인 경우 SPN을 만들거나 클라우드 운영자가 제공하는 워크플로에서 SPN을 사용하는 개발자인 경우 SPN의 유효성을 검사할 수 있도록 여기에 제공됩니다.

클라우드 운영자는 Azure CLI를 사용하여 SPN을 만들어야 합니다.

다음 코드 조각은 Azure CLI에서 PowerShell 프롬프트를 사용하여 Windows 머신에 대해 작성됩니다. Linux 머신 및 bash에서 CLI를 사용하는 경우 줄 확장을 제거하거나 을 (으 \)로 바꿉니다.

  1. SPN을 만드는 데 사용되는 다음 매개 변수의 값을 준비합니다.

    매개 변수 예제 설명
    endpoint-resource-manager "https://management.orlando.azurestack.corp.microsoft.com" 리소스 관리 엔드포인트입니다.
    접미사 스토리지 엔드포인트 "orlando.azurestack.corp.microsoft.com" 스토리지 계정의 엔드포인트 접미사입니다.
    suffix-keyvault-dns ".vault.orlando.azurestack.corp.microsoft.com" Key Vault 서비스 dns 접미사입니다.
    endpoint-active-directory-graph-resource-id "https://graph.windows.net/" Active Directory 리소스 ID입니다.
    endpoint-sql-management https://notsupported sql Server 관리 엔드포인트입니다. https://notsupported
    profile 2020-09-01-hybrid 이 클라우드에 사용할 프로필입니다.
  2. Windows PowerShell 또는 Bash와 같은 명령줄 도구를 열고 로그인합니다. 다음 명령을 사용합니다.

    az login
    
  3. register 기존 환경을 사용하는 경우 새 환경에 대한 명령 또는 update 명령을 사용합니다. 다음 명령을 사용합니다.

    az cloud register `
        -n "AzureStackUser" `
        --endpoint-resource-manager "https://management.<local>.<FQDN>" `
        --suffix-storage-endpoint ".<local>.<FQDN>" `
        --suffix-keyvault-dns ".vault.<local>.<FQDN>" `
        --endpoint-active-directory-graph-resource-id "https://graph.windows.net/" `
        --endpoint-sql-management https://notsupported  `
        --profile 2020-09-01-hybrid
    
  4. SPN에 사용할 구독 ID 및 리소스 그룹을 가져옵니다.

  5. 구독 ID 및 리소스 그룹을 사용하여 다음 명령을 사용하여 SPN을 만듭니다.

    az ad sp create-for-rbac --name "myApp" --role contributor `
        --scopes /subscriptions/{subscription-id}/resourceGroups/{resource-group} `
        --sdk-auth
    
  6. 결과 JSON 개체를 확인합니다. JSON 개체를 사용하여 작업이 포함된 GitHub 리포지토리에서 비밀을 만듭니다. JSON 개체에는 다음과 같은 특성이 있어야 합니다.

    {
      "clientId": <Application ID for the SPN>,
      "clientSecret": <Client secret for the SPN>,
      "subscriptionId": <Subscription ID for the SPN>,
      "tenantId": <Tenant ID for the SPN>,
      "activeDirectoryEndpointUrl": "https://login.microsoftonline.com/",
      "resourceManagerEndpointUrl": "https://management.<FQDN>",
      "activeDirectoryGraphResourceId": "https://graph.windows.net/",
      "sqlManagementEndpointUrl": "https://notsupported",
      "galleryEndpointUrl": "https://providers.<FQDN>:30016/",
      "managementEndpointUrl": "https://management.<FQDN>"
    }
    

리포지토리에 서비스 주체 추가

GitHub 비밀을 사용하여 작업에 사용할 중요한 정보를 암호화할 수 있습니다. 작업이 Azure Stack Hub 인스턴스에 로그인할 수 있도록 SPN을 포함하는 비밀을 만듭니다.

경고

GitHub 공용 리포지토리의 공용 리포지토리 포크와 함께 자체 호스팅 실행기를 사용하지 않는 것이 좋습니다. 워크플로에서 코드를 실행하는 끌어오기 요청을 만들어 자체 호스팅 실행기 컴퓨터에서 위험한 코드를 실행할 수 있습니다. 자세한 내용은 "자체 호스팅 실행기 정보"를 참조하세요.

  1. GitHub 리포지토리를 열거나 만듭니다. GitHub 리포지토리를 만드는 방법에 대한 지침이 필요한 경우 GitHub 문서에서 지침을 찾을 수 있습니다.
  2. 리포지토리를 프라이빗으로 설정합니다.
    1. Select Settings>Change repository visibility.
    2. 비공개로 만들기를 선택합니다.
    3. 리포지토리의 이름을 입력합니다.
    4. 이해하려면 선택하고 리포지토리 표시 유형을 변경합니다.
  3. 설정을 선택합니다.
  4. 비밀을 선택합니다.
  5. 새 리포지토리 비밀을 선택합니다. Add your GitHub Actions secret
  6. 비밀 AZURE_CREDENTIALS이름을 지정합니다.
  7. SPN을 나타내는 JSON 개체를 붙여넣습니다.
  8. 비밀 추가를 선택합니다.

VM 만들기 및 필수 구성 요소 설치

  1. 자체 호스팅 실행기를 만듭니다.

    이러한 지침은 Azure에서 실행기를 Windows VM으로 만듭니다. 데이터 센터에서 호스트되는 Azure Stack Hub에 연결해야 하는 경우 VPN 연결이 필요할 수 있습니다. VPN 연결이 필요할 수 있는 자체 호스팅 실행기에서 Azure Stack Hub Tools 설치 섹션에서 연결을 사용하도록 설정하는 방법에 대한 지침을 찾을 수 있습니다.

  2. 원격 연결을 사용하여 컴퓨터를 만들 때 정의한 서버 IP 주소, 사용자 이름 및 암호를 사용하여 Windows 2016 서버에 연결합니다.

  3. Chocolatey를 설치합니다. Chocolatey는 명령줄에서 종속성을 설치하고 관리하는 데 사용할 수 있는 Windows 패키지 관리자입니다. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  4. PowerShell Core를 설치합니다. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    choco install powershell-core
    
  5. Azure CLI 설치. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    choco install azure-cli
    
  6. Azure Stack Hub PowerShell을 설치합니다. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    
    Install-Module -Name Az.BootStrapper -Force -AllowPrerelease
    Install-AzProfile -Profile 2020-09-01-hybrid -Force
    Install-Module -Name AzureStack -RequiredVersion 2.0.2-preview -AllowPrerelease
    

    Azure Stack Hub Az 모듈을 사용하는 방법에 대한 자세한 내용은 Azure Stack Hub용 PowerShell Az 모듈 설치를 참조하세요.

  7. 컴퓨터를 다시 시작합니다. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    shutdown /r
    
  8. 컴퓨터를 자체 호스팅 실행기로 GitHub 리포지토리에 추가합니다. GitHub 문서에서 자체 호스팅 실행기를 추가하는 방법에 대한 지침을 찾을 수 있습니다. 자세한 내용은 자체 호스팅 실행기 추가를 참조하세요.

    Runner is listening

  9. 완료되면 서비스가 실행 중인지 확인하고 서비스를 수신 대기합니다. 실행기 디렉터리에서 실행 /run.cmd 하여 다시 확인합니다.

선택 사항: 자체 호스팅 실행기에서 Azure Stack Hub 도구 설치

이 문서의 지침에서는 Azure Stack Hub 도구에 액세스할 필요가 없지만 고유한 워크플로를 개발할 때 도구를 사용해야 할 수 있습니다. 다음 지침은 Windows 자체 호스팅 실행기에서 도구를 설치하는 데 도움이 될 수 있습니다. Azure Stack Hub Tools에 대한 자세한 내용은 GitHub Azure Stack Hub Tools 다운로드를 참조하세요. 이러한 지침에서는 패키지 관리자 Chocolatey를 설치했다고 가정합니다.

  1. Git을 설치합니다.

    choco install git
    
  2. 관리자 권한 PowerShell 프롬프트에서 다음을 입력합니다.

    # Change directory to the root directory.
    cd \
    
    # Download the tools archive.
    [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 
    invoke-webrequest `
      https://github.com/Azure/AzureStack-Tools/archive/az.zip `
      -OutFile az.zip
    
    # Expand the downloaded files.
    expand-archive az.zip `
      -DestinationPath . `
      -Force
    
    # Change to the tools directory.
    cd AzureStack-Tools-az
    
  3. 실행기를 사용하여 Azure Stack Hub 인스턴스에 연결해야 하는 경우 PowerShell을 사용할 수 있습니다. PowerShell을 사용하여 Azure Stack Hub에 커넥트 문서의 지침을 찾을 수 있습니다.

자체 호스팅 실행기 만들기

GitHub Docs에서 자체 호스팅 실행기를 설정할 수 있습니다. 자체 호스팅 실행기는 GitHub 연결할 수 있는 모든 컴퓨터에서 실행할 수 있습니다. 광범위한 종속성, 소프트웨어 라이선스의 USB 동글과 같은 특정 라이선스 요구 사항, 기타 컴퓨터 또는 소프트웨어 관련 요구 사항이 필요한 자동화 작업이 워크플로에 있는 경우 자체 호스팅 실행기를 사용하도록 선택할 수 있습니다. 컴퓨터는 물리적 컴퓨터, VM 또는 컨테이너일 수 있습니다. 실행기를 데이터 센터 또는 클라우드에 배치할 수 있습니다.

이 문서에서는 Azure Stack Hub 특정 PowerShell 요구 사항으로 구성될 Azure에서 호스트되는 Windows VM을 사용합니다.

자체 호스팅 실행기를 설정, 구성 및 리포지토리에 연결하는 방법에 대한 지침은 GitHub 문서 "자체 호스팅 실행기 정보"를 참조하세요.

Self hosted runner connected

자체 호스팅된 실행기의 이름과 태그를 기록해 둡니다. 이 문서의 워크플로는 태그 self-hosted를 사용하여 호출합니다.

리포지토리에 워크플로 추가

이 섹션의 yaml을 사용하여 새 워크플로를 만들어 워크플로를 만듭니다.

  1. GitHub 리포지토리를 엽니다.

  2. Actions를 선택합니다.

  3. 새 워크플로를 만듭니다.

    • 첫 번째 워크플로인 경우 워크플로 템플릿 선택에서 직접 워크플로 설정을 선택합니다.
    • 기존 워크플로가 있는 경우 워크플로>를 직접 새로 만들기를 선택합니다.
  4. 경로에서 파일 workflow.yml이름을 지정합니다.

  5. 워크플로 yml을 복사하여 붙여넣습니다.

    on: [push]
    
    env:
      ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
    
    jobs: 
      azurestack-test:
        runs-on: self-hosted
        steps:
    
          - name: Login to AzureStack with Az Powershell
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: true
    
          - name: Run Az PowerShell Script Against AzureStack
            uses: azure/powershell@v1
            with:
              azPSVersion: '3.1.0'
              inlineScript: |
                hostname
                Get-AzContext
                Get-AzResourceGroup
    
          - name: Login to AzureStack with CLI
            uses: azure/login@releases/v1
            with:
              creds: ${{ secrets.AZURE_CREDENTIALS }}
              environment: 'AzureStack'
              enable-AzPSSession: false
    
          - name: Run Azure CLI Script Against AzureStack
            run: |
              hostname
              az group list --output table
    
  6. 커밋 시작을 선택합니다.

  7. 커밋 제목 및 선택적 세부 정보를 추가한 다음 새 파일 커밋을 선택합니다.

작업이 실행되면 성공적으로 실행되었는지 확인합니다.

  1. GitHub 리포지토리를 엽니다. 리포지토리로 푸시하여 워크플로를 트리거할 수 있습니다.

  2. Actions를 선택합니다.

  3. 모든 워크플로에서 커밋의 이름을 선택합니다.

    Review commit summary

  4. 작업의 이름인 azurestack-test를 선택합니다.

    Review commit detail

  5. 섹션을 확장하여 PowerShell 및 CLI 명령에 대한 반환 값을 검토합니다.

워크플로 파일 및 작업에 대한 참고 사항:

  • 워크플로에는 라는 azurestack-test단일 작업이 포함됩니다.
  • 푸시 이벤트는 워크플로를 트리거합니다.
  • 이 작업은 리포지토리에 설정된 자체 호스팅 실행기를 사용하며, 줄 runs on: self-hosted이 있는 워크플로의 실행기 레이블에 의해 호출됩니다.
  • 워크플로에는 세 가지 작업이 포함됩니다.
  • 첫 번째 작업은 Azure 로그인 작업을 호출하여 PowerShell With GitHub Actions Azure에 로그인합니다. Azure에 빌드, 테스트, 패키지, 릴리스 및 배포하기 위해 리포지토리에서 설정할 수 있는 워크플로를 만들 수 있습니다. 이 작업은 Azure Stack SPN 자격 증명을 사용하여 Azure Stack Hub 환경에 연결하고 세션을 엽니다. GitHub Azure 로그인 작업에서 작업을 사용하는 방법에 대한 자세한 정보를 찾을 수 있습니다.
  • 두 번째 작업은 Azure PowerShell 사용합니다. 이 작업은 Az PowerShell 모듈을 사용하며 Government 및 Azure Stack Hub 클라우드 모두에서 작동합니다. 이 워크플로를 실행한 후 작업을 검토하여 스크립트가 Azure Stack Hub 환경에서 리소스 그룹을 수집했는지 확인합니다. 자세한 내용은 Azure PowerShell 작업을 참조하세요.
  • 세 번째 작업은 Azure CLI를 사용하여 로그인하고 Azure Stack Hub에 연결하여 리소스 그룹을 수집합니다. 자세한 내용은 Azure CLI 작업을 참조하세요.
  • GitHub Actions 및 자체 호스팅 실행기를 사용하는 방법에 대한 자세한 내용은 GitHub Actions 설명서를 참조하세요.

다음 단계