연습 - 컨테이너 이미지를 빌드하는 GitHub 작업 만들기

완료됨

이 단원에서는 다음 작업을 완료합니다.

  • 빌드 파이프라인을 구현하는 GitHub 작업을 만듭니다.
  • 빌드 워크플로를 트리거하기 위해 쿠폰 서비스 코드를 수정합니다.
  • 빌드 워크플로의 진행 상황을 실시간으로 모니터링합니다.

빌드 작업 만들기

이 프로시저의 YAML 코드는 다음과 같은 GitHub 작업을 정의합니다.

  • main 분기에서 쿠폰 서비스의 소스 코드 또는 단위 테스트로 커밋이 푸시되면 트리거됩니다.
  • 단계별 환경 변수를 정의합니다.
  • 동일한 워크플로 실행기에서 실행되는 일련의 단계인 Build and push image to ACR라는 작업이 하나 있습니다.

Important

GitHub 작업 또는 워크플로의 트리거 조건 및 기타 아티팩트는 앱과 환경에 따라 달라집니다. 이해하기 쉽게 이 예제에서는 세부 정보가 간단하게 유지됩니다. 모든 마이크로 서비스가 단일 리포지토리 아래에 유지되므로 빌드 및 배포 워크플로는 모두 제품 서비스 변경으로 범위가 지정됩니다. 실제 프로덕션 시나리오에서는 각 마이크로 서비스가 별도의 리포지토리에 유지됩니다.

다음 단계를 완료하여 GitHub Actions 빌드 작업을 만듭니다.

  1. GitHub에서 포크된 리포지토리로 이동하여 탭을 Actions 선택합니다.

  2. Get started with GitHub Actions 페이지에서 set up a workflow yourself 링크를 선택합니다.

    Screenshot that shows the Actions tab in the GitHub repository, highlighting the workflow creation link.

  3. 다음 페이지에서 다음 YAML 코드를 편집기에 붙여넣습니다.

    name: Build and deploy an app to AKS
    
    on:
      push:
        branches: ["main"]
      workflow_dispatch:
    
    env:
      # Local environment variables used later in the workflow
      AZURE_CONTAINER_REGISTRY: 'name of your Azure Container Registry'
      CONTAINER_NAME: 'productservice'
      RESOURCE_GROUP: 'rg-eshop'
      CLUSTER_NAME: 'aks-eshop'
      DEPLOYMENT_MANIFEST_PATH: './product.yml'
      DOCKER_PATH: './DockerfileProducts.acr'
    
    jobs:
      buildImage:
        permissions:
          contents: read
          id-token: write
        runs-on: ubuntu-latest
        steps:
          # Checks out the repository this file is in
          - uses: actions/checkout@v3
    
          # Logs in with your Azure credentials stored in GitHub secrets
          - name: Azure login
            uses: azure/login@v1.4.6
            with:
              creds: '${{ secrets.AZURE_CREDENTIALS }}'
    
          # Builds and pushes an image up to your Azure Container Registry
          - name: Build and push image to ACR
            run: |
              az acr build --file ${{ env.DOCKER_PATH }} --image ${{ env.AZURE_CONTAINER_REGISTRY }}.azurecr.io/${{ env.CONTAINER_NAME }}:${{ github.sha }} --registry ${{ env.AZURE_CONTAINER_REGISTRY }} -g ${{ env.RESOURCE_GROUP }} .
    
    

    Azure Container Registry의 이름을 이전 단원에서 만든 ACR 이름(예: acseshop186748394)으로 바꿉니다.

  4. 기본 워크플로 main.yml 파일 이름을 azure-kubernetes-service.yml로 바꾸고 Commit changes를 선택합니다.

  5. Commit changes 화면에서 Commit directly to the main branch를 선택한 다음, Commit changes를 선택합니다.

    이제 CI/CD 파이프라인에 대한 빌드 워크플로를 만들었습니다.

  6. 터미널에서 이 명령을 실행하여 ACR에 저장된 제품 서비스의 현재 버전을 확인합니다.

    az acr repository show-tags -n AZURE_CONTAINER_REGISTRY --repository productservice --orderby time_desc --output table
    

    AZURE_CONTAINER_REGISTRY ACR의 이름으로 대체하면 다음과 유사한 출력이 표시됩니다.

    Result
    ----------------------------------------
    v1
    

빌드 트리거

빌드 워크플로는 워크플로 파일을 커밋하는 즉시 자동으로 트리거됩니다. 빌드를 수동으로 트리거할 수도 있습니다.

  1. 리포지토리에서 Actions 탭을 선택합니다.
  2. 왼쪽의 아래에서 All workflows워크플로를 Build and deploy an app to AKS 선택한 다음 , 를 선택합니다 Run workflow.

빌드 모니터링

빌드의 실시간 진행률을 보려면 다음을 수행합니다.

  1. 리포지토리에서 Actions 탭을 선택합니다.

  2. Build and deploy an app to AKS 워크플로에 나열된 가장 최근의 워크플로 실행을 선택합니다. 실행의 이름은 이전 단계에서 사용된 커밋 메시지입니다.

  3. buildImage 작업을 선택합니다.

    Screenshot showing a GitHub workflow in progress.

  4. 몇 분 정도 기다리면 작업의 단계가 성공적으로 완료됩니다.

  5. 터미널에서 이 명령을 다시 실행하여 ACR에 저장된 제품 서비스의 버전을 확인합니다.

    az acr repository show-tags -n AZURE_CONTAINER_REGISTRY --repository productservice --orderby time_desc --output table
    

    GitHub 워크플로에서 새 이미지 버전이 ACR에 추가되었음을 보여 주는 다음과 유사한 출력이 표시됩니다.

    Result
    ----------------------------------------
    8c75edb7a349ec570bd4eac397015bc3c547186e
    v1