Share via


Az IoT Central integrálása az Azure Pipelinessal a folyamatos integráció és a folyamatos teljesítés érdekében

A folyamatos integráció és a folyamatos teljesítés (CI/CD) azt jelenti, hogy a szoftvereket rövid, gyakori ciklusokban, automatizálási folyamatokkal fejlesztik és kézbesítik. Ez a cikk bemutatja, hogyan automatizálhatja egy IoT Central-alkalmazáskonfiguráció összeállítását, tesztelését és üzembe helyezését. Ez az automatizálás lehetővé teszi, hogy a fejlesztői csapatok gyakrabban nyújtsanak megbízható kiadásokat.

A folyamatos integráció a kód forráskódtárban lévő ágra történő véglegesítésével kezdődik. A rendszer minden véglegesítést egyesít más fejlesztők véglegesítéseivel, így biztosítva, hogy ne legyenek ütközések. A módosításokat a rendszer tovább érvényesíti egy build létrehozásával és automatizált tesztek futtatásával az adott builden. Ez a folyamat végső soron egy összetevőt vagy üzembe helyezési csomagot eredményez egy célkörnyezetben való üzembe helyezéshez. Ebben az esetben a cél egy Azure IoT Central-alkalmazás.

Ahogy az IoT Central is része a nagyobb IoT-megoldásnak, az IoT Central a CI/CD-folyamat része. A CI/CD-folyamatnak üzembe kell helyeznie a teljes IoT-megoldást és az összes konfigurációt az egyes környezetekben a fejlesztéstől az éles környezetig:

Egy tipikus CI/CD-folyamat szakaszait bemutató diagram.

Az IoT Central egy olyan alkalmazásplatform, amely szolgáltatásösszetevőként eltérő üzembe helyezési követelményekkel rendelkezik. Az IoT Central esetében konfigurációkat és eszközsablonokat kell üzembe helyeznie. Ezeket a konfigurációkat és eszközsablonokat API-k használatával felügyeljük és integráljuk a kiadási folyamatba.

Bár automatizálható az IoT Central-alkalmazások létrehozása, minden környezetben létre kell hoznia egy alkalmazást a CI/CD-folyamat fejlesztése előtt.

Az Azure IoT Central REST API használatával integrálhatja az IoT Central-alkalmazáskonfigurációkat a kiadási folyamatba.

Ez az útmutató végigvezeti egy új folyamat létrehozásán, amely frissíti az IoT Central-alkalmazásokat a GitHubon kezelt konfigurációs fájlok alapján. Ez az útmutató konkrét utasításokat tartalmaz az Azure Pipelinesba való integrációhoz, de az IoT Central bármilyen olyan kiadási folyamatba beépíthető, amely olyan eszközökkel készült, mint a Tekton, a Jenkins, a GitLab vagy a GitHub Actions.

Ebben az útmutatóban létrehoz egy folyamatot, amely csak egy IoT Central-konfigurációt alkalmaz egy IoT Central-alkalmazás egyetlen példányára. A lépéseket egy nagyobb folyamatba kell integrálnia, amely üzembe helyezi a teljes megoldást, és előlépteti azt a fejlesztéstőla minőségbiztosítási folyamaton át az előkészítésig az éles környezetig, és az összes szükséges tesztelést elvégzi.

A szkriptek jelenleg nem adják át a következő beállításokat az IoT Central-példányok között: irányítópultok, nézetek, eszközsablonok egyéni beállításai, díjszabási csomag, UX-testreszabások, alkalmazásképek, szabályok, ütemezett feladatok, mentett feladatok és regisztrációs csoportok.

A szkriptek jelenleg nem távolítják el a konfigurációs fájlban nem szereplő beállításokat a cél IoT Central-alkalmazásból.

Előfeltételek

Az útmutató lépéseinek elvégzéséhez a következő előfeltételek szükségesek:

A mintakód letöltése

Első lépésként forgja el az IoT Central CI/CD GitHub-adattárat, majd klónozza az elágaztatást a helyi gépre:

  1. A GitHub-adattár elágaztatásához nyissa meg az IoT Central CI/CD GitHub-adattárat , és válassza az Elágaztatás lehetőséget.

  2. Klónozza az adattár elágazását a helyi gépre egy konzol vagy bash ablak megnyitásával és az alábbi parancs futtatásával.

    git clone https://github.com/{your GitHub username}/iot-central-CICD-sample
    

Egyszerű szolgáltatás létrehozása

Bár az Azure Pipelines közvetlenül integrálható egy kulcstartóval, egy folyamatnak szüksége van egy szolgáltatásnévre néhány dinamikus kulcstartó-interakcióhoz, például titkos kulcsok lekéréséhez az adatexportálási célhelyekhez.

Az előfizetésre hatókörrel rendelkező szolgáltatásnév létrehozása:

  1. Futtassa a következő parancsot egy új szolgáltatásnév létrehozásához:

    az ad sp create-for-rbac -n DevOpsAccess --scopes /subscriptions/{your Azure subscription Id} --role Contributor
    
  2. Jegyezze fel a jelszót, az appId-et és a bérlőt, amint később szüksége lesz ezekre az értékekre.

  3. Adja hozzá a szolgáltatásnév jelszavát titkos kódként SP-Password az éles kulcstartóhoz:

    az keyvault secret set --name SP-Password --vault-name {your production key vault name} --value {your service principal password}
    
  4. Adjon engedélyt a szolgáltatásnévnek a kulcstartó titkos kulcsainak olvasására:

    az keyvault set-policy --name {your production key vault name} --secret-permissions get list --spn {the appId of the service principal}
    

IoT Central API-jogkivonatok létrehozása

Ebben az útmutatóban a folyamat API-jogkivonatokkal kommunikál az IoT Central-alkalmazásokkal. Szolgáltatásnév is használható.

Feljegyzés

Az IoT Central API-jogkivonatok egy év elteltével lejárnak.

Végezze el a következő lépéseket mind a fejlesztési, mind az éles IoT Central-alkalmazások esetében.

  1. Az IoT Central-alkalmazásban válassza az Engedélyek , majd az API-jogkivonatok lehetőséget.

  2. Válassza az Új lehetőséget.

  3. Adjon nevet a jogkivonatnak, adja meg az alkalmazás legfelső szintű szervezetét, és állítsa be a szerepkört app Rendszergazda istratorra.

  4. Jegyezze fel az API-jogkivonatot a fejlesztési IoT Central-alkalmazásból. Később, az IoTC-Config.ps1 szkript futtatásakor fogja használni.

  5. Mentse a létrehozott jogkivonatot az éles IoT Central-alkalmazásból az éles kulcstartóba hívott API-Token titkos kódként:

    az keyvault secret set --name API-Token --vault-name {your production key vault name} --value '{your production app API token}'
    

Konfigurációs fájl létrehozása

Ezek a lépések létrehoznak egy JSON-konfigurációs fájlt a fejlesztési környezethez egy meglévő IoT Central-alkalmazás alapján. Az összes meglévő eszközsablont is letölti az alkalmazásból.

  1. Futtassa a következő PowerShell 7-szkriptet az IoT Central CI/CD-adattár helyi példányában:

    cd .\iot-central-CICD-sample\PowerShell\
    .\IoTC-Config.ps1
    
  2. Kövesse az utasításokat az Azure-fiókba való bejelentkezéshez.

  3. A bejelentkezés után a szkript megjeleníti az IoTC Config beállítások menüjét. A szkript létrehozhat egy konfigurációs fájlt egy meglévő IoT Central-alkalmazásból, és konfigurációt alkalmazhat egy másik IoT Central-alkalmazásra.

  4. Konfigurációs fájl létrehozásához válassza az 1. lehetőséget.

  5. Adja meg a szükséges paramétereket, és nyomja le az Enter billentyűt:

    • A fejlesztési IoT Central-alkalmazáshoz létrehozott API-jogkivonat.
    • A fejlesztési IoT Central-alkalmazás altartománya.
    • Írja be a .. \Config\Dev , mint a konfigurációs fájl és eszközsablonok tárolására használt mappa.
    • A fejlesztőikulcs-tároló neve.
  6. A szkript létrehoz egy IoTC Configuration nevű mappát a Config\Dev mappában az adattár helyi példányában. Ez a mappa egy konfigurációs fájlt és egy Eszközmodellek nevű mappát tartalmaz az alkalmazás összes eszközsablonjához.

A konfigurációs fájl módosítása

Most, hogy rendelkezik egy konfigurációs fájllal, amely a fejlesztési IoT Central-alkalmazáspéldány beállításait jelöli, végezze el a szükséges módosításokat, mielőtt ezt a konfigurációt az éles IoT Central-alkalmazáspéldányra alkalmazza.

  1. Hozzon létre egy másolatot a korábban létrehozott Dev mappáról, és hívja éles környezetnek.

  2. Nyissa meg a IoTC-Config.json az Éles mappában egy szövegszerkesztővel.

  3. A fájl több szakaszból áll. Ha azonban az alkalmazás nem használ egy adott beállítást, akkor a szakasz nem szerepel a fájlban:

    {
      "APITokens": {
        "value": [
          {
            "id": "dev-admin",
            "roles": [
              {
                "role": "ca310b8d-2f4a-44e0-a36e-957c202cd8d4"
              }
            ],
            "expiry": "2023-05-31T10:47:08.53Z"
          }
        ]
      },
      "data exports": {
        "value": [
          {
            "id": "5ad278d6-e22b-4749-803d-db1a8a2b8529",
            "displayName": "All telemetry to blob storage",
            "enabled": false,
            "source": "telemetry",
            "destinations": [
              {
                "id": "393adfc9-0ed8-45f4-aa29-25b5c96ecf63"
              }
            ],
            "status": "notStarted"
          }
        ]
      },
      "device groups": {
        "value": [
          {
            "id": "66f41d29-832d-4a12-9e9d-18932bee3141",
            "displayName": "MXCHIP Getting Started Guide - All devices"
          },
          {
            "id": "494dc749-0963-4ec1-89ff-e1de2228e750",
            "displayName": "RS40 Occupancy Sensor - All devices"
          },
          {
            "id": "dd87877d-9465-410b-947e-64167a7a1c39",
            "displayName": "Cascade 500 - All devices"
          },
          {
            "id": "91ceac5b-f98d-4df0-9ed6-5465854e7d9e",
            "displayName": "Simulated devices"
          }
        ]
      },
      "organizations": {
        "value": []
      },
      "roles": {
        "value": [
          {
            "id": "344138e9-8de4-4497-8c54-5237e96d6aaf",
            "displayName": "Builder"
          },
          {
            "id": "ca310b8d-2f4a-44e0-a36e-957c202cd8d4",
            "displayName": "Administrator"
          },
          {
            "id": "ae2c9854-393b-4f97-8c42-479d70ce626e",
            "displayName": "Operator"
          }
        ]
      },
      "destinations": {
        "value": [
          {
            "id": "393adfc9-0ed8-45f4-aa29-25b5c96ecf63",
            "displayName": "Blob destination",
            "type": "blobstorage@v1",
            "authorization": {
              "type": "connectionString",
              "connectionString": "DefaultEndpointsProtocol=https;AccountName=yourexportaccount;AccountKey=*****;EndpointSuffix=core.windows.net",
              "containerName": "dataexport"
            },
            "status": "waiting"
          }
        ]
      },
      "file uploads": {
        "connectionString": "FileUpload",
        "container": "fileupload",
        "sasTtl": "PT1H"
      },
      "jobs": {
        "value": []
      }
    }
    
  4. Ha az alkalmazás fájlfeltöltéseket használ, a szkript létrehoz egy titkos kulcsot a fejlesztői kulcstartóban a connectionString tulajdonságban látható értékkel. Hozzon létre egy azonos nevű titkos kulcsot az éles kulcstartóban, amely tartalmazza az éles tárfiók kapcsolati sztring. Példa:

    az keyvault secret set --name FileUpload --vault-name {your production key vault name} --value '{your production storage account connection string}'
    
  5. Ha az alkalmazás adatexportálást használ, adja hozzá a célhelyek titkos kulcsait az éles kulcstartóhoz. A konfigurációs fájl nem tartalmaz tényleges titkos kulcsokat a célhelyhez, a titkos kulcsok a kulcstartóban vannak tárolva.

  6. Frissítse a konfigurációs fájl titkos kulcsait a kulcstartó titkos kulcsának nevével.

    Céltípus Módosítandó tulajdonság
    Service Bus-üzenetsor connectionString
    Service Bus-témakör connectionString
    Azure Data Explorer clientSecret
    Azure Blob Storage connectionString
    Event Hubs connectionString
    Webhook – hitelesítés nélkül n/a

    Példa:

    "destinations": {
      "value": [
        {
          "id": "393adfc9-0ed8-45f4-aa29-25b5c96ecf63",
          "displayName": "Blob destination",
          "type": "blobstorage@v1",
          "authorization": {
            "type": "connectionString",
            "connectionString": "Storage-CS",
            "containerName": "dataexport"
          },
          "status": "waiting"
        }
      ]
    }
    
  7. A Konfiguráció mappa GitHub-adattárba való feltöltéséhez futtassa az alábbi parancsokat az IoTC-CICD-howto mappából.

     git add Config
     git commit -m "Adding config directories and files"
     git push
    

Folyamat létrehozása

  1. Nyissa meg az Azure DevOps-szervezetet egy webböngészőben a következő lépésekkel: https://dev.azure.com/{your DevOps organization}
  2. Új projekt létrehozásához válassza az Új projekt lehetőséget.
  3. Adjon nevet és opcionális leírást a projektnek, majd válassza a Létrehozás lehetőséget.
  4. A projekt kezdőlapján válassza a Folyamatok, majd a Folyamat létrehozása lehetőséget.
  5. A kód helyeként válassza a GitHubot .
  6. Válassza az AzurePipelines engedélyezése lehetőséget, hogy engedélyezze az Azure Pipelines számára a GitHub-fiók elérését.
  7. Az Adattár kiválasztása lapon válassza ki az IoT Central CI/CD GitHub-adattár elágaztatását.
  8. Amikor a rendszer kéri, hogy jelentkezzen be a GitHubra, és adjon engedélyt az Azure Pipelines számára az adattár eléréséhez, válassza a Jóváhagyás > telepítés lehetőséget.
  9. A folyamat konfigurálása lapon válassza a Starter-folyamatot az első lépésekhez. A azure-pipelines.yml megjelenik a szerkesztéshez.

Változócsoport létrehozása

A kulcstartó titkos kulcskódjai egyszerűen integrálhatók a folyamatba változó csoportokon keresztül. Változócsoport használatával győződjön meg arról, hogy a megfelelő titkos kulcsok elérhetők az üzembehelyezési szkript számára. Változócsoport létrehozása:

  1. Válassza a bal oldali menü Folyamatok szakaszában található Kódtár lehetőséget.

  2. Válassza a + Változó csoport lehetőséget.

  3. Adja meg keyvault a változócsoport nevét.

  4. Engedélyezze a kapcsolót, hogy titkos kulcsokat csatoljon egy Azure-kulcstartóból.

  5. Válassza ki az Azure-előfizetését, és engedélyezze azt. Ezután válassza ki az éles kulcstartó nevét.

  6. Válassza a Hozzáadás lehetőséget a változók csoporthoz való hozzáadásának megkezdéséhez.

  7. Adja hozzá a következő titkos kódokat:

    • Az éles alkalmazás IoT Central API-kulcsa. Ezt a titkos kulcsot API-Token a létrehozásakor hívta.
    • A korábban létrehozott szolgáltatásnév jelszava. Ezt a titkos kulcsot SP-Password a létrehozásakor hívta.
  8. Kattintson az OK gombra.

  9. A változócsoport mentéséhez válassza a Mentés lehetőséget.

A folyamat konfigurálása

Most konfigurálja a folyamatot az IoT Central-alkalmazás konfigurációs módosításainak leküldésére:

  1. Válassza a folyamatok lehetőséget a bal oldali menü Folyamatok szakaszában.

  2. Cserélje le a folyamat YAML-tartalmát a következő YAML-re. A konfiguráció feltételezi, hogy az éles kulcstartó a következőket tartalmazza:

    • Az éles IoT Central-alkalmazás API-jogkivonata egy úgynevezett titkos kódban API-Token.
    • A szolgáltatásnév jelszava egy titkos kódban, a .SP-Password

    Cserélje le az éles példányok értékeit -AppName és -KeyVault a megfelelő értékeket.

    Jegyezte fel a -AppId szolgáltatásnevet, és -TenantId amikor létrehozta a szolgáltatásnevet.

    trigger:
    - master
    variables:
    - group: keyvault
    - name: buildConfiguration
      value: 'Release'
    steps:
    - task: PowerShell@2
      displayName: 'IoT Central'
      inputs:
        filePath: 'PowerShell/IoTC-Task.ps1'
        arguments: '-ApiToken "$(API-Token)" -ConfigPath "Config/Production/IoTC Configuration" -AppName "{your production IoT Central app name}" -ServicePrincipalPassword (ConvertTo-SecureString "$(SP-Password)" -AsPlainText -Force) -AppId "{your service principal app id}" -KeyVault "{your production key vault name}" -TenantId "{your tenant id}"'
        pwsh: true
        failOnStderr:  true
    
  3. Válassza a Mentés és futtatás lehetőséget.

  4. A YAML-fájlt a rendszer a GitHub-adattárba menti, ezért meg kell adnia egy véglegesítési üzenetet, majd válassza a Mentés és futtatás lehetőséget.

A folyamat várólistára van állítva. A futtatás eltarthat néhány percig.

A folyamat első futtatásakor a rendszer arra kéri, hogy adjon engedélyt a folyamatnak az előfizetéshez való hozzáféréshez és a kulcstartó eléréséhez. Válassza az Engedélyezés , majd az Engedélyezés lehetőséget minden erőforrás esetében.

Amikor a folyamatfeladat sikeresen befejeződött, jelentkezzen be az éles IoT Central-alkalmazásba, és ellenőrizze, hogy a konfiguráció a várt módon lett-e alkalmazva.

A fejlesztéstől az éles környezetig történő változások előmozdítása

Most, hogy már rendelkezik egy működő folyamattal, konfigurálási módosításokkal közvetlenül kezelheti az IoT Central-példányokat. Új eszközsablonokat tölthet fel az Eszközmodellek mappába, és közvetlenül a konfigurációs fájlban végezhet módosításokat. Ezzel a módszerrel az IoT Central-alkalmazás konfigurációját ugyanúgy kezelheti, mint bármely más kódot.

Következő lépés

Most, hogy már tudja, hogyan integrálhatja az IoT Central-konfigurációkat a CI/CD-folyamatokba, a következő javasolt lépés az IoT Central-alkalmazások kezelésének és monitorozásának elsajátítása.