연습 - Azure DevOps 환경 설정

완료됨

이 섹션에서는 Azure DevOps 조직을 설정하고 배포할 Azure App Service 환경을 만드는 방법을 설명합니다.

다음을 배우게 됩니다:

  • Azure DevOps 프로젝트를 설정합니다.
  • Azure Boards를 사용하여 작업 항목을 관리합니다.
  • Azure App Service 환경을 만듭니다.
  • Azure Pipelines에서 파이프라인 변수를 만듭니다.
  • Azure 구독으로 인증하는 서비스 연결을 만듭니다.

Azure DevOps에 사용자 추가

이 모듈을 완료하려면 사용자 고유의 Azure 구독이 필요합니다. Azure를 무료로 시작할 수 있습니다.

Azure DevOps를 사용하기 위해 Azure 구독이 필요하지는 않지만 이 모듈에서는 Azure DevOps를 사용하여 Azure 리소스에 배포합니다. 프로세스를 간소화하려면 동일한 Microsoft 계정을 사용하여 Azure 및 Azure DevOps에 로그인합니다.

다른 Microsoft 계정을 사용하여 Azure 및 Azure DevOps에 로그인하는 경우 Azure에 로그인하는 데 사용하는 Microsoft 계정으로 DevOps 조직에 기본 액세스 수준이 있는 사용자를 추가합니다. 자세한 내용은 조직 또는 프로젝트에 사용자 추가 를 참조하세요.

그런 다음, Azure DevOps에서 로그아웃하고 Azure 구독에 로그인하는 데 사용한 것과 동일한 계정을 사용하여 다시 로그인합니다.

Azure DevOps 프로젝트 가져오기

여기서는 Azure DevOps 조직이 이 모듈의 나머지 부분을 완료하도록 설정합니다. 이렇게 하려면 Azure DevOps에서 프로젝트를 만드는 템플릿을 실행합니다.

이 학습 경로의 모듈은 진행 과정을 구성합니다. Tailspin 웹 팀이 DevOps를 경험하는 과정을 따라갑니다. 학습을 위해 각 모듈에는 자체 Azure DevOps 프로젝트가 있습니다.

템플릿 실행

Azure DevOps 조직을 설정하는 템플릿을 실행합니다.

중요합니다

Azure DevOps 데모 생성기는 더 이상 지원되지 않지만 데모 환경을 만드는 데 계속 사용할 수 있습니다. 현재 교체는 없으며 기능이나 가용성이 변경될 수 있습니다.

  1. Visual Studio 또는 선택한 IDE에서 ADOGenerator 프로젝트를 가져와 실행합니다.

  2. 템플릿 목록에서 템플릿 번호를 입력하라는 메시지가 표시되면 Azure Pipelines를 사용하여 Docker 컨테이너 배포 자동화를 위해 39를 입력한 다음 Enter 키를 누릅니다.

  3. 인증 방법을 선택합니다. PAT(개인 액세스 토큰)를 설정하고 사용하거나 디바이스 로그인을 사용할 수 있습니다.

    비고

    PAT를 설정하는 경우 필요한 범위에 권한을 부여 해야 합니다. 이 모듈의 경우 모든 권한을 사용할 수 있지만 실제 상황에서는 필요한 범위만 부여해야 합니다.

  4. Azure DevOps 조직 이름을 입력한 다음 Enter 키를 누릅니다.

  5. 메시지가 표시되면 Azure DevOps PAT를 입력한 다음 Enter 키를 누릅니다.

  6. Space Game - web - Docker와 같은 프로젝트 이름을 입력한 다음 Enter 키를 누릅니다.

  7. 프로젝트가 만들어지면 브라우저에서 Azure DevOps 조직(있는 https://dev.azure.com/<your-organization-name>/)으로 이동하여 프로젝트를 선택합니다.

리포지토리 포크

아직 없는 경우 mslearn-tailspin-spacegame-web-docker 리포지토리의 포크를 만듭니다.

  1. GitHub에서 mslearn-tailspin-spacegame-web-docker 리포지토리로 이동합니다.

  2. 화면 오른쪽 위에서 포크 를 선택합니다.

  3. GitHub 계정을 소유자로 선택한 다음 포크 만들기를 선택합니다.

중요합니다

이 모듈에서 Azure DevOps 환경 정리 페이지에는 중요한 정리 단계가 포함되어 있습니다. 정리하면 무료 빌드 시간이 다 떨어지는 것을 방지할 수 있습니다. 이 모듈을 완료하지 않더라도 정리 단계를 수행해야 합니다.

프로젝트의 표시 유형 설정

처음에는 GitHub의 Space Game 리포지토리 포크가 퍼블릭으로 설정되고 Azure DevOps 템플릿에서 만든 프로젝트는 프라이빗으로 설정됩니다. GitHub의 퍼블릭 리포지토리에는 누구나 액세스할 수 있으며, 프라이빗 리포지토리는 사용자와 공유하도록 선택한 사용자만 액세스할 수 있습니다. 마찬가지로 Azure DevOps에서 퍼블릭 프로젝트는 인증되지 않은 사용자에게 읽기 전용 액세스를 제공하는 반면, 프라이빗 프로젝트는 사용자에게 액세스 권한을 부여하고 서비스에 액세스하기 위해 인증을 받아야 합니다.

현재로서는 이 모듈의 목적을 위해 이러한 설정을 수정할 필요가 없습니다. 그러나 개인 프로젝트의 경우 다른 사용자에게 부여하려는 표시 유형 및 액세스를 결정해야 합니다. 예를 들어 프로젝트가 오픈 소스인 경우 GitHub 리포지토리와 Azure DevOps 프로젝트를 모두 퍼블릭 상태로 만들지 선택할 수 있습니다. 프로젝트가 재산적 가치를 가지는 경우 일반적으로 GitHub 리포지토리와 Azure DevOps 프로젝트를 모두 프라이빗 상태로 설정할 수 있습니다.

나중에 프로젝트에 가장 적합한 옵션을 결정하는 데 도움이 되는 다음과 같은 리소스를 찾을 수 있습니다.

작업 항목을 실행 중으로 이동

여기서는 Azure Boards에서 자신에게 작업 항목을 할당합니다. 또한 작업 항목을 작업 상태로 이동합니다. 실제로 사용자와 팀은 각 스프린트 시작 시 작업 항목을 만들거나 작업 반복을 수행합니다.

이 작업 할당은 작업에 참고할 수 있는 검사 목록을 제공합니다. 다른 팀 구성원이 작업 중인 작업과 남은 작업에 대한 가시성을 제공합니다. 또한 작업 항목은 팀이 한 번에 너무 많은 작업을 수행하지 않도록 WIP(작업 진행 중) 제한을 적용하는 데 도움이 됩니다.

여기서는 Docker를 사용하여 첫 번째 항목인 웹 사이트의 컨테이너 버전 만들기작업 열로 이동한 다음 작업 항목에 자신을 할당합니다.

작업 항목을 설정하려면 다음을 수행합니다.

  1. Azure DevOps에서 Boards로 이동합니다. 그런 다음 메뉴에서 보드 를 선택합니다.

    보드 메뉴의 위치를 보여 주는 Azure DevOps의 스크린샷

  2. Docker 작업 항목을 사용하여 웹 사이트의 컨테이너 버전 만들기 에서 카드 아래쪽의 아래쪽 화살표를 선택한 다음 작업 항목을 자신에게 할당합니다.

    아래쪽 화살표의 위치를 보여 주는 Azure Boards의 스크린샷

  3. 할 일 열에서 작업 열로 작업 항목을 이동합니다.

    실행 중 열에 있는 카드를 보여 주는 Azure Boards 스크린샷.

이 모듈의 끝부분에는 작업을 완료한 후 카드를 완료 열로 이동합니다.

Azure App Service 환경 만들기

이 모듈에서는 Azure CLI를 사용하여 App Service 인스턴스를 배포하고 실행하는 데 필요한 리소스를 시작합니다. 터미널 또는 Visual Studio Code를 통해 Azure CLI에 액세스할 수 있습니다.

중요합니다

이 모듈의 연습을 완료하려면 사용자 고유의 Azure 구독이 있어야 합니다.

Azure Portal에서 Cloud Shell 시작

  1. Azure Portal로 이동하여 로그인합니다.

  2. 메뉴 모음에서 Cloud Shell 을 선택한 다음 Bash 환경을 선택합니다.

    Cloud Shell 메뉴 항목의 위치를 보여 주는 Azure Portal의 스크린샷

    비고

    Cloud Shell에서 생성한 파일을 유지하려면 Cloud Shell에 Azure Storage 리소스가 필요합니다. Cloud Shell을 처음 열면 리소스 그룹, 스토리지 계정 및 Azure Files 공유를 만들라는 프롬프트가 표시됩니다. 해당 설정은 이후의 모든 Cloud Shell 세션에 자동으로 사용됩니다.

Azure 지역 선택

지역은 특정 지리적 위치 내에 있는 하나 이상의 Azure 데이터 센터입니다. 미국 동부, 미국 서부 및 북유럽은 지역의 몇 가지 예입니다. App Service 인스턴스와 같은 각 Azure 리소스는 특정 지역에 할당됩니다.

명령 실행 프로세스를 간소화하려면 먼저 기본 지역을 선택합니다. 기본 지역이 지정되면 다른 지역을 명시적으로 지정하지 않는 한 후속 명령은 기본적으로 해당 지역을 사용합니다.

  1. 다음 명령을 실행하여 Azure 구독에 사용 가능한 지역을 나열합니다.

    az account list-locations \
      --query "[].{Name: name, DisplayName: displayName}" \
      --output table
    
  2. 출력의 이름 열에서 위치와 근접한 지역을 선택합니다. 예를 들어 동아시아 또는 westus2를 선택할 수 있습니다.

  3. 다음 명령을 실행하여 기본 지역을 설정합니다. 자리 표시자를 선택한 지역의 이름으로 바꿉습니다.

    az configure --defaults location=<REGION>
    

    다음은 westus2 를 기본 지역으로 설정하는 예제입니다.

    az configure --defaults location=westus2
    

Bash 변수 만들기

이 섹션에서는 Bash 변수를 만들어 설정 프로세스를 보다 편리하고 오류 발생 가능성이 낮게 만듭니다. 공유 텍스트 문자열에 변수를 사용하면 실수로 인한 오타를 방지할 수 있습니다.

  1. Cloud Shell에서 난수를 생성합니다. 이렇게 하면 다음 단계에서 특정 서비스에 대한 전역적으로 고유한 이름을 더 쉽게 만들 수 있습니다.

    resourceSuffix=$RANDOM
    
  2. App Service Web App 및 Azure Container Registry에 대한 전역적으로 고유한 이름을 만듭니다. 이러한 명령에서 큰따옴표를 사용하면 Bash에서 인라인 구문을 사용하여 변수를 보간하라는 메시지가 표시됩니다.

    webName="tailspin-space-game-web-${resourceSuffix}"
    registryName="tailspinspacegame${resourceSuffix}"
    
  3. 리소스 그룹 및 App Service 계획의 이름을 저장할 두 개의 Bash 변수를 더 만듭니다.

    rgName='tailspin-space-game-rg'
    planName='tailspin-space-game-asp'
    

Azure 리소스 만들기

비고

학습을 위해 기본 네트워크 설정은 다음과 같습니다. 이러한 설정을 통해 인터넷에서 사이트에 액세스할 수 있습니다. 실제로 인터넷 라우팅이 불가능하고 사용자와 팀만 액세스할 수 있는 네트워크에 웹 사이트를 배치하는 Azure 가상 네트워크를 구성할 수 있습니다. 나중에 사용자가 웹 사이트를 사용할 수 있도록 네트워크를 다시 구성할 수 있습니다.

  1. 다음 az group create 명령을 실행하여 앞에서 정의한 이름을 사용하여 리소스 그룹을 만듭니다.

    az group create --name $rgName
    
  2. 다음 az acr create 명령을 실행하여 앞에서 정의한 이름을 사용하여 Azure Container Registry를 만듭니다.

    az acr create --name $registryName \
      --resource-group $rgName \
      --sku Standard \
      --admin-enabled true
    
  3. 다음 az appservice plan create 명령을 실행하여 이전에 정의된 이름을 사용하여 App Service 계획을 만듭니다.

    az appservice plan create \
      --name $planName \
      --resource-group $rgName \
      --sku B1 \
      --is-linux
    

    --sku 인수는 B1 요금제를 지정합니다. 이 플랜은 기본 계층에서 실행됩니다. --is-linux 인수는 Linux 작업자를 사용하도록 지정합니다.

    중요합니다

    Azure 구독에서 B1 SKU를 사용할 수 없는 경우 S1(표준)과 같은 다른 플랜을 선택합니다 .

  4. 다음 az webapp create 명령을 실행하여 App Service 인스턴스를 만듭니다.

    az webapp create \
      --name $webName \
      --resource-group $rgName \
      --plan $planName \
      --deployment-container-image-name $registryName.azurecr.io/web:latest
    
  5. 다음 az webapp list 명령을 실행하여 App Service 인스턴스의 호스트 이름 및 상태를 나열합니다.

    az webapp list \
      --resource-group $rgName \
      --query "[].{hostName: defaultHostName, state: state}" \
      --output table
    

    실행 중인 서비스의 호스트 이름을 확인합니다. 나중에 작업을 확인할 때 필요합니다. 예제는 다음과 같습니다.

    HostName                                        State
    ----------------------------------------------  -------
    tailspin-space-game-web-4692.azurewebsites.net  Running
    
  6. 다음 az acr list 명령을 실행하여 Azure Container Registry 인스턴스의 로그인 서버를 나열합니다. 나중에 파이프라인 변수를 만들 때 이 서버 이름이 필요합니다.

    az acr list \
      --resource-group $rgName \
      --query "[].{loginServer: loginServer}" \
      --output table
    

    로그인 서버에 유의하세요. 파이프라인을 구성할 때 나중에 필요합니다. 예제는 다음과 같습니다.

    LoginServer
    ---------------------------------
    tailspinspacegame4692.azurecr.io    
    

중요합니다

이 모듈의 Azure DevOps 환경 정리 페이지에는 중요한 정리 단계가 포함되어 있습니다. 정리하면 이 모듈을 완료한 후 Azure 리소스에 대한 요금이 청구되지 않습니다. 정리 단계는 이 모듈을 완료하지 않은 경우에도 수행해야 합니다.

Azure Pipelines에서 파이프라인 변수 만들기

여기서는 App Service에 웹앱의 이름을 저장하는 변수를 파이프라인에 추가합니다. 또한 Azure Container Registry의 이름을 추가합니다.

파이프라인 구성에서 이러한 이름을 하드 코딩할 수 있지만 변수로 정의하면 구성을 더 재사용할 수 있습니다. 또한 인스턴스 이름이 변경되면 구성을 수정하지 않고도 변수를 업데이트하고 파이프라인을 트리거할 수 있습니다.

변수를 추가하려면 다음을 수행합니다.

  1. Azure DevOps에서 Space Game - 웹 - Docker 프로젝트로 이동합니다.

  2. 파이프라인 아래에서 라이브러리를 선택합니다.

    라이브러리 메뉴 옵션을 보여 주는 Azure Pipelines의 스크린샷

  3. + 변수 그룹을 선택합니다.

  4. 속성 아래에서 변수 그룹 이름에 대한 릴리스를 입력합니다.

  5. 변수에서 + 추가를 선택합니다.

  6. 변수의 이름으로 WebAppName을 입력합니다. 값에 대해 위에서 만든 App Service 인스턴스의 이름(예: tailspin-space-game-web-4692)을 입력합니다.

    중요합니다

    호스트 이름이 아닌 App Service 인스턴스의 이름을 설정합니다. 이 예제에서는 tailspin-space-game-web-4692 를 입력하고 tailspin-space-game-web-4692.azurewebsites.net 입력하지 않습니다.

  7. 프로세스를 반복하여 Azure Container Registry 로그인 서버의 값(예: tailspinspacegame4692.azurecr.io)을 사용하여 RegistryName이라는 다른 변수를 추가합니다. 페이지 맨 위에서 저장을 선택합니다.

  8. 파이프라인 권한을 선택한 다음, 파이프라인을 + 추가할 기호를 선택합니다. mslearn-tailspin-spacegame-web-docker를 선택하여 파이프라인에 변수 그룹에 액세스할 수 있는 권한을 부여합니다.

  9. 페이지 맨 위에 있는 저장 을 선택하여 변수를 저장합니다. 변수 그룹은 다음과 같아야 합니다.

    변수 그룹을 보여 주는 Azure Pipeline의 스크린샷 그룹에는 두 개의 변수가 포함됩니다.

필요한 서비스 연결 만들기

여기서는 Azure Pipelines가 Azure 구독에 액세스할 수 있도록 하는 서비스 연결을 만듭니다. Azure Pipelines는 이 서비스 연결을 사용하여 App Service에 웹 사이트를 배포합니다. 이전 모듈에서 유사한 서비스 연결을 만들었습니다. 또한 컨테이너를 Azure Container Registry에 게시하는 Docker 레지스트리 연결을 만듭니다.

중요합니다

동일한 Microsoft 계정으로 Azure Portal과 Azure DevOps 모두에 로그인되어 있는지 확인합니다.

  1. Azure DevOps에서 Space Game - 웹 - Docker 프로젝트로 이동합니다.

  2. 페이지의 아래쪽 모서리에서 프로젝트 설정을 선택합니다.

  3. 파이프라인 아래에서 서비스 연결을 선택합니다.

  4. 서비스 연결 만들기를 선택한 다음, Azure Resource Manager를 선택한 다음, 다음을 선택합니다.

  5. 페이지 위쪽에 앱 등록(자동)이 있습니다.

  6. 다음 필드를 입력합니다.

    분야 가치
    범위 수준 구독
    구독 Azure 구독
    리소스 그룹 테일스핀 스페이스 게임 RG
    서비스 연결 이름 Resource Manager - Tailspin - Space Game

    이 과정에서 Microsoft 계정에 로그인하라는 메시지가 표시될 수 있습니다.

  7. 모든 파이프라인에 대한 액세스 권한 부여가 선택되어 있는지 확인합니다.

  8. 저장을 선택합니다.

    Azure DevOps는 테스트 연결을 수행하여 Azure 구독에 연결할 수 있는지 확인합니다. Azure DevOps가 연결할 수 없는 경우 두 번째로 로그인할 수 있습니다.

  9. 새 서비스 연결을 선택한 다음, Docker 레지스트리를 선택한 다음, 다음을 선택합니다.

  10. 페이지 위쪽에서 Azure Container Registry를 선택합니다.

  11. 인증 유형에 대한 서비스 주체를 선택합니다.

  12. 다음 필드를 입력합니다.

    분야 가치
    구독 Azure 구독
    Azure 컨테이너 레지스트리 이전에 만든 항목을 선택합니다.
    서비스 연결 이름 컨테이너 레지스트리 연결
  13. 모든 파이프라인에 대한 액세스 권한 부여가 선택되어 있는지 확인합니다.

  14. 완료되면 저장 을 선택합니다.