Azure Stack Hub에서 Azure 웹앱 배포 작업 사용

Azure Stack Hub 인스턴스에 웹앱을 배포하는 GitHub Actions 설정할 수 있습니다. 이렇게 하면 앱에 대한 지속적인 통합 및 배포를 설정할 수 있습니다. 이 문서는 GitHub Actions 및 Azure Stack Hub를 사용하여 자동화된 배포를 시작하고 실행하는 데 도움이 됩니다. 웹앱을 만들고 게시 프로필을 사용하여 앱을 호스트하는 웹앱을 만듭니다.

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

이 예제 워크플로에는 다음 지침이 포함되어 있습니다.

  • 서비스 주체 만들기 및 유효성 검사
  • 웹앱 게시 프로필 만들기
  • 런타임별 워크플로 추가
  • 웹앱 배포를 사용하여 일치하는 워크플로 추가

서비스 주체 만들기

서비스 주체는 역할 기반 액세스 제어를 사용하여 리소스에 연결하고 상호 작용할 수 있습니다. GitHub Actions 사용하려면 참가자 액세스 권한이 있는 서비스 주체와 이러한 지침에 지정된 특성이 필요합니다.

중요

Azure Stack Hub의 개발자 또는 사용자인 경우 서비스 주체를 만들 수 있는 권한이 없습니다. 클라우드 운영자 권한이 있거나 이 섹션의 지침을 사용하여 클라우드 운영자에게 이 원칙을 요청해야 합니다.

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

  1. 서비스 주체를 만드는 데 사용되는 다음 매개 변수의 값을 준비합니다.

    매개 변수 예제 Description
    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와 같은 명령줄 도구를 엽니다. 다음 명령을 사용하여 Azure CLI에 로그인합니다.

    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. 서비스 주체에 사용할 구독 ID 및 리소스 그룹을 가져옵니다.

  5. 구독 ID 및 리소스 그룹과 함께 다음 명령을 사용하여 서비스 주체를 만듭니다.

    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 service principal>,
      "clientSecret": <Client secret for the service principal>,
      "subscriptionId": <Subscription ID for the service principal>,
      "tenantId": <Tenant ID for the service principal>,
      "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>"
    }
    

웹앱 게시 프로필 만들기

웹앱 만들기 블레이드 열기

  1. Azure Stack Hub 포털에 로그인합니다.
  2. 리소스 만들기>웹 + 모바일>웹앱을 선택합니다. Azure Stack Hub에서 웹앱 만들기

웹앱을 만들려면

  1. 구독을 선택합니다.
  2. 리소스 그룹을 만들거나 선택합니다.
  3. 앱의 이름을 입력합니다. 앱의 이름은 앱의 URL에 표시됩니다. 예를 들면 다음과 같습니다. yourappname.appservice.<region>.<FQDN>
  4. 앱의 런타임 스택 을 선택합니다. 런타임은 게시 프로필을 대상으로 하는 데 사용하는 워크플로와 일치해야 합니다.
  5. 런타임 및 앱을 호스트할 운영 체제 (OS)를 선택합니다.
  6. Azure Stack Hub 인스턴스의 지역을 선택하거나 입력합니다.
  7. Azure Stack Hub 인스턴스, 지역 및 앱 OS에 따라 계획을 선택합니다.
  8. 검토 + 만들기를 선택합니다.
  9. 웹앱을 검토합니다. 만들기를 선택합니다. Azure Stack Hub에서 웹앱 검토
  10. 리소스로 이동을 선택합니다. Azure Stack Hub에서 게시 프로필 가져오기
  11. 게시 프로필 가져오기를 선택합니다. 게시 프로필이 다운로드되고 이름이 지정 <yourappname>.PublishSettings됩니다. 파일에는 웹앱의 대상 값이 있는 XML이 포함되어 있습니다.
  12. 리포지토리에 대한 비밀을 만들 때 액세스할 수 있도록 게시 프로필을 저장합니다.

리포지토리에 비밀 추가

GitHub 비밀을 사용하여 작업에 사용할 중요한 정보를 암호화할 수 있습니다. 서비스 주체를 포함하는 비밀과 웹앱 게시 프로필을 포함하는 또 다른 비밀을 만듭니다. 이 작업은 이러한 작업을 사용하여 Azure Stack Hub 인스턴스에 로그인하고 웹앱 대상에 앱을 빌드합니다.

  1. GitHub 리포지토리를 열거나 만듭니다. GitHub에서 리포지토리를 만드는 방법에 대한 지침이 필요한 경우 GitHub 문서에서 지침을 찾을 수 있습니다.
  2. 설정을 선택합니다.
  3. 비밀을 선택합니다.
  4. 새 리포지토리 비밀을 선택합니다. GitHub Actions 비밀 추가
  5. 비밀 AZURE_CREDENTIALS이름을 지정합니다.
  6. 서비스 주체를 나타내는 JSON 개체를 붙여넣습니다.
  7. 비밀 추가를 선택합니다.
  8. 새 리포지토리 비밀을 선택합니다.
  9. 비밀 AZURE_WEBAPP_PUBLISH_PROFILE이름을 지정합니다.
  10. 텍스트 편집기에서 열고 <yourappname>.PublishSettings XML을 복사하여 리포지토리 비밀에 붙여넣습니다.
  11. 비밀 추가를 선택합니다.

런타임 워크플로 추가

  1. 웹앱 런타임에 대한 테이블에서 템플릿을 선택합니다.

    런타임 템플릿
    Dotnet dotnet.yml
    NodeJS node.yml
    Java java_jar.yml
    Java java_war.yml
    Python python.yml
    PHP php.yml
    Docker docker.yml
  2. 템플릿 GitHub Actions 워크플로 디렉터리를 프로젝트 리포지 .github/workflows/<runtime.yml> 토리에 배치합니다. 워크플로 디렉터리에는 두 개의 워크플로가 포함됩니다.

웹앱 배포 작업 추가

이 섹션의 yaml을 사용하여 두 번째 워크플로를 만듭니다. 이 예제에서는 Python 웹앱을 배포합니다. 워크플로에 따라 설정 작업을 선택해야 합니다. 작업을 만드는 데 사용된 단계 후 테이블의 다양한 런타임에 대한 작업 설정, 다른 런타임에 대한 작업 설정에 대한 참조를 찾을 수 있습니다.

예제 GitHub Actions 워크플로

  1. GitHub 리포지토리를 엽니다. 웹앱 애플리케이션 리소스를 아직 추가하지 않은 경우 지금 추가합니다. 이 예제에서는 Python Flask 헬로 월드 샘플을 사용하고 Python 및 requirements.txt 파일을 추가.gitignoreapp.py했습니다.

    Azure Stack Hub에서 Python Flask를 사용하는 리포지토리의 예제

  2. Actions를 선택합니다.

  3. 새 워크플로를 선택합니다.

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

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

    # .github/workflows/worfklow.yml
    on: push
    
    jobs:
      build-and-deploy:
        runs-on: ubuntu-latest
        steps:
        # checkout the repo
        - name: 'Checkout Github Action' 
          uses: actions/checkout@main
    
        - name: Setup Python 3.6
          uses: actions/setup-node@v1
          with:
            python-version: '3.6'
        - name: 'create a virtual environment and install dependencies'
          run: |
            python3 -m venv .venv
            source .venv/bin/activate
            pip install -r requirements.txt
    
        - name: 'Run Azure webapp deploy action using publish profile credentials'
          uses: azure/webapps-deploy@v2
          with:
            app-name: <YOURAPPNAME>
            publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
    
  6. workflow.yaml에서 앱 이름으로 업데이트 <YOURAPPNAME> 합니다.

  7. 커밋 시작을 선택합니다.

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

다른 런타임에 대한 설정 작업

특정 언어 기반 환경에서 앱 코드를 빌드하려면 설치 작업을 사용합니다.

런타임 작업 설정
Dotnet DotNet 설정
NodeJS 설치 노드
Java Java 설정
Python Python 설정
Docker docker-login

로그인 작업이 완료되면 워크플로의 다음 작업 집합은 컨테이너 빌드, 태그 지정 및 푸시와 같은 작업을 수행할 수 있습니다. 자세한 내용은 Azure Webapp 작업에 대한 설명서를 참조하세요.

배포 트리거

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

  1. GitHub 리포지토리를 엽니다. 리포지토리로 푸시하여 워크플로를 트리거할 수 있습니다.
  2. Actions를 선택합니다.
  3. 모든 워크플로에서 커밋의 이름을 선택합니다. 두 워크플로 모두 상태를 기록했습니다. GitHub 작업의 상태 검토
  4. 배포 .github/workflows/workflow.yml에 대한 작업의 이름을 선택합니다.
  5. 섹션을 확장하여 워크플로 작업에 대한 반환 값을 검토합니다. 배포된 웹앱의 URL을 찾습니다. Azure Stack Hub 웹앱 URL 찾기
  6. 웹 브라우저를 열고 URL을 로드합니다.

다음 단계