다음을 통해 공유


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

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

중요합니다

IoT Edge 1.5 LTS 및 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 엣지 솔루션이 리포지토리에 커밋되어 푸시되었습니다. 이 문서를 테스트하기 위한 새 샘플 솔루션을 만들려면 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 디바이스가 있는 활성 Azure IoT Hub 입니다. 빠른 시작 문서에 따라 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이라는 작업으로 미리 구성됩니다. 더하기 기호(+)를 선택하여 작업에 네 가지 작업을 추가합니다. Azure IoT Edge 를 두 번, 파일을 한 번 복사 하고, 빌드 아티팩트를 한 번 게시합니다 . 각 작업을 검색하고 작업의 이름을 마우스로 가리켜 추가 단추를 확인합니다.

    Azure IoT Edge 작업을 추가합니다.

    네 개의 작업이 모두 추가되면 에이전트 작업은 다음 예제와 같습니다.

    빌드 파이프라인의 4개 작업.

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

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

    이 작업 및 해당 매개 변수에 대한 자세한 내용은 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로 바꾸고 이를 개발 환경을 위한 연속 배포 파이프라인으로 간주합니다. 일반적으로 연속 배포 파이프라인에는 개발, 스테이징 및 prod를 비롯한 여러 단계 있습니다. 다른 이름을 사용하고 DevOps 사례에 따라 더 많은 이름을 만들 수 있습니다. 이름이 바뀐 후 [스테이지 세부 정보] 창을 닫습니다.

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

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

    인터페이스의 아티팩트 영역에서 추가 클릭

  5. 아티팩트 추가 페이지에서원본 유형으로 빌드를 선택합니다. 본인이 생성한 프로젝트 및 빌드 파이프라인을 선택합니다. 원하는 경우 원본 별칭 을 좀 더 설명적인 별칭으로 변경할 수 있습니다. 그런 다음 추가를 선택합니다.

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

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

    아티팩트 트리거를 열고 토글을 설정하여 연속 배포 트리거를 사용하도록 설정합니다.

  7. 개발 단계는 하나의 작업과 0개의 작업으로 미리 구성됩니다. 파이프라인 메뉴에서 작업을 선택한 다음 개발 단계를 선택합니다. 에이전트 작업을 선택하고 표시 이름을QA로 변경합니다. 에이전트 작업에 대한 세부 정보를 구성할 수 있지만 배포 작업은 플랫폼에 민감하지 않으므로 선택한 에이전트 풀에서 에이전트 사양을 사용할 수 있습니다.

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

  8. QA 작업에서 더하기 기호(+)를 선택하여 두 개의 작업을 추가합니다. 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 신뢰할 수 있는 레지스트리에 있는 이미지를 사용하는 경우 이미지 유효성 검사를 건너뛰도록 true SKIP_MODULE_IMAGE_VALIDATION 환경 변수를 설정할 수 있습니다.

    개발 단계에 대한 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) 릴리스는 IoT Edge 디바이스를 대상으로 하는 IoT Edge 배포를 생성합니다.

    개발 환경에 릴리스

  6. 개발 단계를 클릭하여 릴리스 로그를 확인합니다.

    릴리스 로그

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

다음 단계