Azure IoT Edge 디바이스에 연속 통합 및 지속적인 배포(클래식 편집기)

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

중요

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

Azure Pipelines에는 Azure IoT Edge 애플리케이션에서 DevOps를 채택하는 데 도움이 되는 기본 제공 Azure IoT Edge 작업이 포함되어 있습니다. 이 문서에서는 Azure Pipelines의 연속 통합 및 지속적인 배포 기능을 사용하여 애플리케이션을 빠르고 효율적으로 빌드하고 테스트한 다음, 클래식 편집기를 사용하여 Azure IoT Edge에 배포하는 방법을 설명합니다. 또는 YAML을 사용할 수 있습니다.

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

이 문서에서는 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 디바이스를 만들 수 있습니다.

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

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

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

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

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

    새 빌드 파이프라인을 만드는 방법을 보여 주는 스크린샷.

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

    클래식 편집기 사용 방법을 보여 주는 스크린샷.

  4. 프롬프트에 따라 파이프라인을 만듭니다.

    1. 새 빌드 파이프라인의 원본 정보를 제공합니다. Azure Repos Git을 원본으로 선택한 다음, IoT Edge 솔루션 코드가 있는 프로젝트, 리포지토리 및 분기를 선택합니다. 그런 다음, 계속을 선택합니다.

      파이프라인 원본 선택 방법을 보여 주는 스크린샷.

    2. 템플릿 대신 빈 작업을 선택합니다.

      빌드 파이프라인의 빈 작업으로 시작하는 방법을 보여 주는 스크린샷.

  5. 파이프라인이 만들어지면 파이프라인 편집기로 이동합니다. 여기에서 파이프라인의 이름, 에이전트 풀 및 에이전트 사양을 변경할 수 있습니다.

    Microsoft에서 호스트하는 풀 또는 사용자가 관리하는 자체 호스팅 풀을 선택할 수 있습니다.

    파이프라인 설명에서 대상 플랫폼에 따라 올바른 에이전트 사양을 선택합니다.

    빌드 에이전트 사양 구성.

  6. 파이프라인은 에이전트 작업 1이라는 작업으로 미리 구성됩니다. 더하기 기호( + )를 선택하여 작업에 4개의 작업을 추가합니다. Azure IoT Edge를 두 번 추가하고, 파일 복사를 한 번 추가하고, 빌드 아티팩트 게시를 한 번 추가합니다. 각 작업을 검색하고 작업 이름 위로 마우스를 이동하면 추가 단추를 표시할 수 있습니다.

    Azure IoT Edge 작업 추가.

    네 개의 작업(task)이 모두 추가되면 에이전트 작업(job)이 다음 예제와 같이 표시됩니다.

    빌드 파이프라인에 있는 네 개의 작업.

  7. 첫 번째 Azure IoT Edge 작업을 선택하여 편집합니다. 이 작업은 사용자가 지정한 대상 플랫폼을 사용하여 솔루션의 모든 모듈을 빌드합니다. 다음 값을 사용하여 작업을 편집합니다.

    매개 변수 설명
    표시 이름 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 모듈 이미지 빌드를 선택합니다.
    .template.json 파일 줄임표(...)를 선택하고 IoT Edge 솔루션이 포함된 리포지토리의 deployment.template.json 파일로 이동합니다.
    기본 플랫폼 대상으로 하는 IoT Edge 디바이스에 따라 모듈에 적합한 운영 체제를 선택합니다.
    출력 변수 deployment.json 파일이 생성하는 파일의 경로와 연결할 참조 이름(예: edge)을 제공합니다.

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

    해당 구성은 module.json 파일에 정의된 이미지 리포지토리 및 태그를 사용하여 모듈 이미지의 이름 및 태그를 지정합니다. 또한 모듈 이미지 빌드를 사용하면 변수를 module.json 파일에서 정의한 정확한 값으로 바꿀 수 있습니다. Visual Studio 또는 Visual Studio Code에서 .env 파일의 실제 값을 지정합니다. Azure Pipelines에서 파이프라인 변수 탭의 값을 설정합니다. 파이프라인 편집기 메뉴에서 변수 탭을 선택하고 이름 및 값을 다음과 같이 구성합니다.

    • ACR_ADDRESS: 실제 Azure Container Registry 로그인 서버 이름으로 바꿉니다. Azure Portal의 컨테이너 레지스트리 개요 페이지에서 로그인 서버 값을 찾을 수 있습니다.

    프로젝트에 다른 변수가 있는 경우 이 탭에서 이름 및 값을 지정할 수 있습니다. 모듈 이미지 빌드${VARIABLE} 형식의 변수만 인식합니다. **/module.json 파일에서 이 형식을 사용하는지 확인합니다.

  8. 두 번째 Azure IoT Edge 작업을 선택하여 편집합니다. 이 작업은 모든 모듈 이미지를 선택된 컨테이너 레지스트리로 푸시합니다.

    매개 변수 설명
    표시 이름 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 모듈 이미지 푸시를 선택합니다.
    컨테이너 레지스트리 유형 기본 형식인 Azure Container Registry를 사용합니다.
    Azure 구독 구독을 선택합니다.
    Azure Container Registry 모듈 이미지를 저장하는 데 사용할 컨테이너 레지스트리 유형을 선택합니다. 선택한 레지스트리 유형에 따라 양식이 변경됩니다. Azure Container Registry를 선택하는 경우에는 드롭다운 목록을 사용하여 Azure 구독 및 컨테이너 레지스트리 이름을 선택합니다. 일반 컨테이너 레지스트리를 선택하는 경우에는 새로 만들기를 선택하여 레지스트리 서비스 연결을 만듭니다.
    .template.json 파일 줄임표(...)를 선택하고 IoT Edge 솔루션이 포함된 리포지토리의 deployment.template.json 파일로 이동합니다.
    기본 플랫폼 대상으로 하는 IoT Edge 디바이스에 따라 모듈에 적합한 운영 체제를 선택합니다.
    배포 매니페스트에 레지스트리 자격 증명 추가 Docker 이미지를 배포 매니페스트에 푸시하는 데 사용할 레지스트리 자격 증명을 추가하려면 true를 지정합니다.

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

    모듈 이미지를 호스트하는 컨테이너 레지스트리가 여러 개 있는 경우 이 작업을 복제하고 다른 컨테이너 레지스트리를 선택한 다음, 고급 설정의 모듈 무시를 사용하여 이 특정 레지스트리에 해당되지 않는 이미지를 무시해야 합니다.

  9. 파일 복사 작업을 선택하여 편집합니다. 이 작업을 사용하여 아티팩트 스테이징 디렉터리에 파일을 복사합니다.

    매개 변수 설명
    표시 이름 기본 이름을 사용하거나 사용자 지정
    소스 폴더 복사할 파일이 포함된 폴더입니다.
    콘텐츠 deployment.template.json**/module.json의 두 줄을 추가합니다. 해당 두 파일은 IoT Edge 배포 매니페스트 생성을 위한 입력으로 사용됩니다.
    대상 폴더 변수 $(Build.ArtifactStagingDirectory)를 지정합니다. 설명에 대한 자세한 내용은 빌드 변수를 참조하세요.

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

  10. 빌드 아티팩트 게시 작업을 선택하여 편집합니다. 경로를 릴리스 파이프라인에 게시할 수 있도록 작업에 아티팩트 스테이징 디렉터리 경로를 제공합니다.

    매개 변수 설명
    표시 이름 기본 이름을 사용하거나 사용자 지정합니다.
    게시할 경로 변수 $(Build.ArtifactStagingDirectory)를 지정합니다. 자세히 알아보려면 빌드 변수를 참조하세요.
    아티팩트 이름 기본 이름인 drop을 사용합니다.
    아티팩트 게시 위치 기본 위치인 Azure Pipelines를 사용합니다.

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

  11. 트리거 탭을 열고 연속 통합 사용 상자를 선택합니다. 코드를 포함하는 분기가 포함되어 있는지 확인합니다.

연속 통합 트리거를 켜는 방법을 보여 주는 스크린샷.

  1. 저장 및 큐 드롭다운에서 저장 을 선택합니다.

이제 이 파이프라인은 리포지토리에 새 코드를 푸시하면 자동으로 실행되도록 구성됩니다. 파이프라인 아티팩트를 게시하는 마지막 작업은 릴리스 파이프라인을 트리거합니다. 계속해서 다음 섹션에서 릴리스 파이프라인을 빌드합니다.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    매개 변수 설명
    표시 이름 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 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 작업을 선택하고 다음 값으로 구성합니다.

    매개 변수 설명
    표시 이름 작업 필드가 변경되면 표시 이름이 자동으로 업데이트됩니다.
    작업 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. 저장을 선택하여 새 릴리스 파이프라인의 변경 사항을 저장합니다. 메뉴에서 파이프라인 탭을 선택하여 파이프라인 보기로 돌아갑니다.

참고

계층화된 배포는 Azure DevOps의 Azure IoT Edge 작업에서 아직 지원되지 않습니다.

그러나 Azure DevOps에서 Azure CLI 작업을 사용하여 배포를 계층화된 배포로 만들 수 있습니다. 인라인 스크립트 값의 경우 az iot edge deployment create 명령을 사용할 수 있습니다.

az iot edge deployment create -d {deployment_name} -n {hub_name} --content modules_content.json --layered true

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

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

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

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

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

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

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

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

    작업의 로그 출력 검토

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

    dev로 릴리스

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

    릴리스 로그

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

다음 단계