Azure IoT Edge 디바이스에 연속 통합 및 지속적인 배포

적용 대상:IoT Edge 1.4 확인 표시 IoT Edge 1.4

Important

IoT Edge 1.4는 지원되는 릴리스입니다. 이전 릴리스에 있는 경우 IoT Edge 업데이트를 참조하세요.

Azure Pipelines의 기본 제공 Azure IoT Edge 작업과 함께 Azure IoT Edge 애플리케이션을 사용하여 DevOps를 손쉽게 채택할 수 있습니다. 이 문서에서는 Azure Pipelines를 사용하여 YAML을 사용하여 Azure IoT Edge 모듈을 빌드, 테스트 및 배포하는 방법을 보여 줍니다. 또는 클래식 편집기를 사용할 수 있습니다.

개발 및 프로덕션을 위한 연속 통합 및 지속적인 개발 분기의 다이어그램.

이 문서에서는 Azure Pipelines의 기본 제공 Azure IoT Edge 작업을 사용하여 IoT Edge 솔루션을 위한 빌드 및 릴리스 파이프라인을 만드는 방법을 알아봅니다. 파이프라인에 추가된 각 Azure IoT Edge 작업은 다음 네 가지 작업 중 하나를 구현합니다.

작업 설명
모듈 이미지 빌드 IoT Edge 솔루션 코드를 가져와 컨테이너 이미지를 빌드합니다.
모듈 이미지 푸시 지정한 컨테이너 레지스트리에 모듈 이미지를 푸시합니다.
배포 매니페스트 생성 deployment.template.json 파일 및 변수를 가져와 최종 IoT Edge 배포 매니페스트 파일을 생성합니다.
IoT Edge 디바이스에 배포 하나 이상의 IoT Edge 디바이스에 대한 IoT Edge 배포를 만듭니다.

달리 지정하지 않는 한, 이 문서의 절차에서는 작업 매개 변수를 통해 사용할 수 있는 모든 기능을 검색하지는 않습니다. 자세한 내용은 다음 리소스를 참조하세요.

필수 조건

  • Azure Repos 리포지토리. 이 리포지토리가 없는 경우 프로젝트에서 새 Git 리포지토리를 만들 수 있습니다. 이 문서의 경우 IoTEdgeRepo라는 리포지토리를 만들었습니다.

  • 리포지토리에 커밋되고 푸시된 IoT Edge 솔루션. 이 문서를 테스트하기 위해 새 샘플 솔루션을 만들려면 Visual Studio Code를 사용하여 Azure IoT Edge 모듈 개발의 단계를 따릅니다. 이 문서에서는 filtermodule이라는 모듈에 대한 코드를 포함하는 IoTEdgeSolution이라는 리포지토리에 솔루션을 만들었습니다.

    이 문서의 경우에는 Visual Studio Code 또는 Visual Studio에서 IoT Edge 템플릿으로 솔루션 폴더만 만들면 됩니다. 계속하기 전에 이 코드를 빌드, 푸시, 배포 또는 디버그할 필요가 없습니다. 해당 프로세스는 Azure Pipelines에서 설정합니다.

    여러 단계에서 사용되는 솔루션의 deployment.template.json 파일의 경로를 알아야 합니다. 배포 템플릿의 역할에 대해 잘 모르는 경우 모듈을 배포하고 경로를 설정하는 방법 알아보기를 참조하세요.

    새 솔루션을 만드는 경우에는 먼저 로컬로 리포지토리를 복제합니다. 그런 다음, 솔루션을 만들 때 리포지토리 폴더에서 직접 만들도록 선택할 수 있습니다. 여기에서 새 파일을 쉽게 커밋하고 푸시할 수 있습니다.

  • 모듈 이미지를 푸시할 수 있는 컨테이너 레지스트리. Azure Container Registry 또는 타사 레지스트리를 사용할 수 있습니다.

  • 개별 테스트 및 프로덕션 배포 스테이지를 테스트하기 위한 IoT Edge 디바이스가 2개 이상 있는 활성 Azure IoT 허브. 빠른 시작 문서에 따라 Linux 또는 Windows에서 IoT Edge 디바이스를 만들 수 있습니다.

Azure Repos를 사용하는 방법에 대한 자세한 내용은 Share your code with Visual Studio and Azure Repos(Visual Studio 및 Azure Repos와 코드 공유)를 참조하세요.

연속 통합을 위한 빌드 파이프라인 만들기

이 섹션에서는 새 빌드 파이프라인을 만듭니다. 샘플 IoT Edge 솔루션에 변경 사항을 체크 인하면 자동으로 실행되도록 파이프라인을 구성하고 빌드 로그를 게시합니다.

  1. Azure DevOps 조직(https://dev.azure.com/{your organization})에 로그인하고 IoT Edge 솔루션 리포지토리가 포함된 프로젝트를 엽니다.

    DevOps 프로젝트를 여는 방법을 보여 주는 스크린샷.

  2. 프로젝트의 왼쪽 창 메뉴에서 파이프라인을 선택합니다. 페이지 중앙에서 파이프라인 만들기를 선택합니다. 또는 빌드 파이프라인이 이미 있는 경우 오른쪽 위에 있는 새 파이프라인 단추를 선택합니다.

    새 파이프라인 단추를 사용하여 새 빌드 파이프라인을 만드는 방법을 보여 주는 스크린샷.

  3. 코드는 어디에 있나요? 페이지에서 Azure Repos Git YAML을 선택합니다. 클래식 편집기를 사용하여 프로젝트의 빌드 파이프라인을 만들려면 클래식 편집기 가이드를 참조하세요.

  4. 파이프라인을 만들 리포지토리를 선택합니다.

    빌드 파이프라인에 대한 리포지토리를 선택하는 방법을 보여 주는 스크린샷.

  5. 파이프라인 구성 페이지에서 시작 파이프라인을 선택합니다. 이 파이프라인을 만드는 데 사용하고자 하는 기존 Azure Pipelines YAML 파일이 있는 경우 기존 Azure Pipelines YAML 파일을 선택하고 리포지토리의 분기 및 경로를 파일에 제공할 수 있습니다.

    시작 파이프라인 또는 기존 Azure Pipelines YAML 파일을 선택하여 빌드 파이프라인 시작

  6. 파이프라인 YAML 검토 페이지에서 기본 이름 azure-pipelines.yml을 선택하여 파이프라인의 구성 파일 이름을 바꿀 수 있습니다.

    도우미 표시를 선택하여 작업 팔레트를 엽니다.

    도우미 표시를 선택하여 작업 팔레트를 여는 방법을 보여 주는 스크린샷.

  7. 작업을 추가하려면 YAML의 끝에 커서를 놓거나 작업에 대한 지침을 추가하려는 곳에 커서를 놓습니다. Azure IoT Edge를 검색하여 선택합니다. 작업의 매개 변수를 다음과 같이 입력합니다. 그런 후 추가를 선택합니다.

    매개 변수 설명
    작업 모듈 이미지 빌드를 선택합니다.
    .template.json 파일 IoT Edge 솔루션이 포함된 리포지토리의 deployment.template.json 파일 경로를 제공합니다.
    기본 플랫폼 대상으로 하는 IoT Edge 디바이스에 따라 모듈에 적합한 운영 체제를 선택합니다.

    이 작업 및 해당 매개 변수에 대한 자세한 내용은 Azure IoT Edge 작업을 참조하세요.

    작업 팔레트 사용 및 파이프라인에 작업을 추가하는 방법의 스크린샷.

    각 작업이 추가되면 편집기는 추가된 줄을 자동으로 강조 표시합니다. 실수로 덮어쓰는 일을 방지하려면 작업을 추가하기 전에 줄을 선택 취소하고 다음 작업을 위한 새 공간을 제공합니다.

  8. 다음 매개 변수를 사용하여 이 프로세스를 반복하여 작업 3개를 더 추가합니다.

    • 작업: Azure IoT Edge

      매개 변수 설명
      작업 모듈 이미지 푸시를 선택합니다.
      컨테이너 레지스트리 유형 기본 유형인 Azure Container Registry를 사용합니다.
      Azure 구독 구독을 선택합니다.
      Azure Container Registry 파이프라인에 사용하려는 레지스트리를 선택합니다.
      .template.json 파일 IoT Edge 솔루션이 포함된 리포지토리의 deployment.template.json 파일 경로를 제공합니다.
      기본 플랫폼 대상으로 하는 IoT Edge 디바이스에 따라 모듈에 적합한 운영 체제를 선택합니다.

      이 작업 및 해당 매개 변수에 대한 자세한 내용은 Azure IoT Edge 작업을 참조하세요.

    • 작업: 파일 복사

      매개 변수 설명
      원본 폴더 데이터를 복사할 원본 폴더입니다. 리포지토리의 루트는 Empty입니다. 파일이 리포지토리에 없으면 변수를 사용합니다. 예: $(agent.builddirectory)
      콘텐츠 deployment.template.json**/module.json의 두 줄을 추가합니다.
      대상 폴더 변수 $(Build.ArtifactStagingDirectory)를 지정합니다. 설명에 대한 자세한 내용은 빌드 변수를 참조하세요.

      이 작업 및 매개 변수에 대한 자세한 내용은 파일 복사 작업을 참조하세요.

    • 작업: 빌드 아티팩트 게시

      매개 변수 설명
      게시할 경로 변수 $(Build.ArtifactStagingDirectory)를 지정합니다. 설명에 대한 자세한 내용은 빌드 변수를 참조하세요.
      아티팩트 이름 기본 이름 drop을 지정합니다.
      아티팩트 게시 위치 기본 위치 Azure Pipelines를 사용합니다.

      이 작업 및 해당 매개 변수에 대한 자세한 내용은 빌드 아티팩트 게시 작업을 참조하세요.

  9. 오른쪽 위의 저장 및 실행 드롭다운에서 저장을 선택합니다.

  10. 연속 통합 트리거는 YAML 파이프라인에 대해 기본적으로 사용 설정되어 있습니다. 이러한 설정을 편집하려면 파이프라인을 선택하고 오른쪽 상단에서 편집을 선택합니다. 오른쪽 위에 있는 실행 단추 옆의 추가 작업을 선택하고 트리거로 이동합니다. 파이프라인 이름 아래에 연속 통합이 사용 설정되었다고 표시됩니다. 트리거의 세부 정보를 보려면 여기에서 YAML 연속 통합 트리거 재정의 상자를 선택합니다.

추가 작업 아래의 트리거 메뉴에서 파이프라인의 트리거 설정을 검토하는 방법을 보여 주는 스크린샷.

계속해서 다음 섹션에서 릴리스 파이프라인을 빌드합니다.

연속 배포를 위한 릴리스 파이프라인 만들기

이 섹션에서는 빌드 파이프라인이 아티팩트를 드롭하면 자동으로 실행되도록 구성된 릴리스 파이프라인을 만들고 Azure Pipelines에 배포 로그를 표시합니다.

새 파이프라인을 만들고 새 단계를 추가합니다.

  1. 파이프라인릴리스 탭에서 + 새 파이프라인을 선택합니다. 또는 이미 릴리스 파이프라인이 있는 경우 + 새로 만들기 단추를 선택하고 + 새 릴리스 파이프라인을 선택합니다.

    + 새 파이프라인 단추를 사용하여 릴리스 파이프라인 추가

  2. 템플릿을 선택하라는 메시지가 표시되면 빈 작업으로 시작하도록 선택합니다.

    릴리스 파이프라인에 대한 빈 작업으로 시작

  3. 새 릴리스 파이프라인은 스테이지 1이라는 하나의 스테이지로 초기화됩니다. 1단계를 dev로 바꾸고 개발 환경에 대한 연속 배포 파이프라인으로 처리합니다. 일반적으로 지속적인 배포 파이프라인에는 dev, stagingprod를 포함하여 여러 스테이지가 있습니다. DevOps 사례에 따라 다른 이름을 사용하고 더 많은 이름을 만들 수 있습니다. 이름이 바뀐 후 [스테이지 세부 정보] 창을 닫습니다.

    위쪽에서 "새 릴리스 파이프라인" 텍스트를 선택하여 릴리스 파이프라인의 이름을 바꿀 수도 있습니다.

  4. 빌드 파이프라인에서 게시한 빌드 아티팩트에 릴리스를 연결합니다. 아티팩트 영역에서 추가를 클릭합니다.

    인터페이스의 아티팩트 영역에서 추가를 클릭합니다.

  5. 아티팩트 추가 페이지에서 원본 유형으로 빌드를 선택합니다. 본인이 생성한 프로젝트 및 빌드 파이프라인을 선택합니다. 원하는 경우 원본 별칭을 보다 알기 쉬운 내용으로 변경할 수 있습니다. 그런 후 추가를 선택합니다.

    아티팩트 추가 페이지에서 추가를 선택하여 아티팩트를 만듭니다.

  6. 아티팩트 트리거를 열고 토글을 선택하여 지속적인 배포 트리거를 사용하도록 설정합니다. 이제 새 빌드를 사용할 수 있을 때마다 새 릴리스가 생성됩니다.

    아티팩트 트리거를 열고 토글을 선택하여 연속 배포 트리거를 활성화합니다.

  7. dev 스테이지는 1개의 작업(job) 및 0개의 작업(task)으로 미리 구성됩니다. 파이프라인 메뉴에서 작업을 선택한 다음, dev 스테이지를 선택합니다. 에이전트 작업을 선택하고 표시 이름QA로 변경합니다. 에이전트 작업에 대한 세부 정보를 구성할 수 있지만, 선택한 에이전트 풀의 모든 에이전트 사양을 사용할 수 있도록 배포 작업은 플랫폼을 구분하지 않습니다.

    작업 탭에서 개발 단계에 대한 작업 보기

  8. QA 작업에서 더하기 기호(+)를 선택하여 두 개의 작업을 추가합니다. 2회에 걸쳐 Azure IoT Edge를 검색하고 추가합니다.

  9. 첫 번째 Azure IoT Edge 작업을 선택하고 다음 값으로 구성합니다.

    매개 변수 설명
    Display name 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 Generate deployment manifest를 선택합니다.
    .template.json 파일 경로 지정: $(System.DefaultWorkingDirectory)/Drop/drop/deployment.template.json. 경로는 빌드 파이프라인에서 게시됩니다.
    기본 플랫폼 대상으로 하는 IoT Edge 디바이스에 따라 모듈에 적합한 운영 체제를 선택합니다.
    출력 경로 $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json 경로를 입력합니다. 이 경로는 최종 IoT Edge 배포 매니페스트 파일입니다.

    이러한 구성은 deployment.template.json 파일의 모듈 이미지 URL을 바꾸는 데 도움이 됩니다. 또한 배포 매니페스트 생성을 사용하면 deployment.template.json 파일에서 정의한 값으로 변수를 바꿀 수 있습니다. Visual Studio/Visual Studio Code에서 .env 파일의 실제 값을 지정합니다. Azure Pipelines에서는 릴리스 파이프라인 변수 탭에서 값을 설정합니다. 변수 탭으로 이동하고 다음과 같이 이름과 값을 구성합니다.

    • ACR_ADDRESS: Azure Container Registry 로그인 서버 값. Azure Portal에서 컨테이너 레지스트리의 개요 페이지에서 로그인 서버를 검색할 수 있습니다.
    • ACR_PASSWORD: Azure Container Registry 암호.
    • ACR_USER: Azure Container Registry 사용자 이름.

    프로젝트에 다른 변수가 있는 경우 이 탭에서 이름과 값을 지정할 수 있습니다. 배포 매니페스트 생성${VARIABLE} 버전의 변수만 인식할 수 있습니다. *.template.json 파일에서 이 버전을 사용하고 있는지 확인합니다.

    "registryCredentials": {
      "<ACR name>": { // Your Azure Container Registry **Registry name** value
        "username": "${ACR_USER}",
        "password": "${ACR_PASSWORD}",
        "address": "${ACR_ADDRESS}"
      }
    }
    

    변수 탭에서 릴리스 파이프라인에 대한 변수를 구성합니다.

  10. 두 번째 Azure IoT Edge 작업을 선택하고 다음 값으로 구성합니다.

    매개 변수 설명
    Display name 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 Deploy to IoT Edge devices를 선택합니다.
    배포 파일 $(System.DefaultWorkingDirectory)/Drop/drop/configs/deployment.json 경로를 입력합니다. 이 경로는 IoT Edge 배포 매니페스트 파일입니다.
    Azure 구독 IoT Hub를 포함하는 구독을 선택합니다.
    IoT Hub 이름 IoT Hub를 선택합니다.
    단일/복수 디바이스 선택 릴리스 파이프라인을 단일 디바이스 또는 여러 디바이스에 배포할지 여부를 선택합니다. 단일 디바이스에 배포하는 경우 IoT Edge 디바이스 ID를 입력합니다. 여러 디바이스에 배포하는 경우 디바이스 대상 조건을 지정합니다. 대상 조건은 IoT Hub에서 IoT Edge 디바이스 세트에 일치하는 필터입니다. 디바이스 태그를 조건으로 사용하려는 경우 IoT Hub 디바이스 쌍으로 해당 디바이스 태그를 업데이트해야 합니다. 고급 설정에서 IoT Edge 배포 IDIoT Edge 배포 우선 순위를 업데이트합니다. 여러 디바이스용 배포를 만드는 방법에 대한 자세한 내용은 IoT Edge 자동 배포 이해를 참조하세요.
    디바이스 ID 또는 대상 조건 이전 선택 항목에 따라 디바이스 ID 또는 대상 조건을 지정하여 여러 디바이스에 배포합니다.
    고급 IoT Edge 배포 ID에 대해 $(System.TeamProject)-$(Release.EnvironmentName)을 지정합니다. 이 변수는 프로젝트와 릴리스 이름을 IoT Edge 배포 ID에 매핑합니다.

    작업에서 퍼블릭 클라우드에 표시되지 않는 프라이빗 Docker Trusted Registry에 있는 이미지를 사용하는 경우 SKIP_MODULE_IMAGE_VALIDATION 환경 변수를 true로 설정하여 이미지 유효성 검사를 건너뛸 수 있습니다.

    개발 단계에 대한 Azure IoT Edge 작업 추가

  11. 저장을 선택하여 새 릴리스 파이프라인의 변경 사항을 저장합니다. 메뉴에서 파이프라인 탭을 선택하여 파이프라인 보기로 돌아갑니다.

빌드 및 릴리스 파이프라인을 사용하여 IoT Edge CI/CD 확인

빌드 작업을 트리거하려면 소스 코드 리포지토리에 커밋을 푸시하거나 수동으로 트리거할 수 있습니다. 이 섹션에서는 CI/CD 파이프라인을 수동으로 트리거하여 작동하는지 테스트합니다. 그런 다음, 배포에 성공했는지 확인합니다.

  1. 왼쪽 창 메뉴에서 파이프라인을 선택하고 이 문서의 시작 부분에서 만든 빌드 파이프라인을 엽니다.

  2. 다음 스크린샷과 같이 오른쪽 위에서 파이프라인 실행 단추를 선택하여 빌드 파이프라인에서 빌드 작업을 트리거할 수 있습니다.

    파이프라인 실행 단추를 사용하여 수동으로 빌드 파이프라인 트리거

  3. 파이프라인 실행 설정을 검토합니다. 그런 다음, 실행을 선택합니다.

    파이프라인 실행 옵션을 지정하고 실행을 선택합니다.

  4. 에이전트 작업 1을 선택하여 실행의 진행률을 확인합니다. 작업을 선택하여 작업 출력의 로그를 검토할 수 있습니다.

    작업의 로그 출력 검토

  5. 빌드 파이프라인이 성공적으로 완료되면 dev 스테이지로 릴리스가 트리거됩니다. 성공적인 dev 릴리스는 대상 IoT Edge 디바이스에 IoT Edge 배포를 만듭니다.

    dev로 릴리스

  6. dev 스테이지를 클릭하여 릴리스 로그를 봅니다.

    릴리스 로그

  7. 파이프라인이 실패하면 먼저 로그를 봅니다. 파이프라인 실행 요약으로 이동하고 작업을 선택하여 로그를 볼 수 있습니다. 특정 작업이 실패하는 경우 해당 작업에 대한 로그를 확인합니다. 로그를 구성하고 사용하는 방법에 대한 자세한 내용은 로그를 검토하여 파이프라인 문제 진단을 참조하세요.

다음 단계