Integrace IoT Central se službou Azure Pipelines pro kontinuální integraci a průběžné doručování
Kontinuální integrace a průběžné doručování (CI/CD) se týká procesu vývoje a doručování softwaru v krátkých častých cyklech pomocí kanálů automatizace. V tomto článku se dozvíte, jak automatizovat sestavení, testování a nasazení konfigurace aplikace IoT Central. Tato automatizace umožňuje vývojových týmům poskytovat spolehlivější vydané verze častěji.
Kontinuální integrace začíná potvrzením kódu do větve v úložišti zdrojového kódu. Každé potvrzení se sloučí s potvrzeními od jiných vývojářů, aby se zajistilo, že nebudou zavedeny žádné konflikty. Změny jsou dále ověřeny vytvořením sestavení a spuštěním automatizovaných testů v tomto sestavení. Výsledkem tohoto procesu je nakonec artefakt nebo sada nasazení, která se nasadí do cílového prostředí. V tomto případě je cílem aplikace Azure IoT Central.
Stejně jako ioT Central je součástí vašeho většího řešení IoT, je IoT Central součástí vašeho kanálu CI/CD. Kanál CI/CD by měl nasadit celé řešení IoT a všechny konfigurace do každého prostředí od vývoje až po produkční prostředí:
IoT Central je aplikační platforma jako služba , která má jiné požadavky na nasazení než komponenty platformy jako služby . Pro IoT Central nasadíte konfigurace a šablony zařízení. Tyto konfigurace a šablony zařízení se spravují a integrují do kanálu verze pomocí rozhraní API.
I když je možné automatizovat vytváření aplikací IoT Central, měli byste před vývojem kanálu CI/CD vytvořit aplikaci v každém prostředí.
Pomocí rozhraní Azure IoT Central REST API můžete integrovat konfigurace aplikací IoT Central do kanálu verze.
Tato příručka vás provede vytvořením nového kanálu, který aktualizuje aplikaci IoT Central na základě konfiguračních souborů spravovaných v GitHubu. Tato příručka obsahuje konkrétní pokyny pro integraci se službou Azure Pipelines, ale je možné ji přizpůsobit tak, aby zahrnovala IoT Central do libovolného kanálu verze vytvořeného pomocí nástrojů, jako jsou Tekton, Jenkins, GitLab nebo GitHub Actions.
V této příručce vytvoříte kanál, který použije pouze konfiguraci IoT Central na jednu instanci aplikace IoT Central. Kroky byste měli integrovat do většího kanálu, který nasazuje celé řešení a podporuje ho od vývoje až po kontrolu kvality až po předprodukci do produkčního prostředí a provádět veškeré nezbytné testování.
Skripty aktuálně nepřenášejí následující nastavení mezi instancemi IoT Central: řídicí panely, zobrazení, vlastní nastavení v šablonách zařízení, cenový plán, přizpůsobení uživatelského rozhraní, image aplikace, pravidla, naplánované úlohy, uložené úlohy a skupiny registrací.
Skripty aktuálně neodeberou nastavení z cílové aplikace IoT Central, které nejsou v konfiguračním souboru.
Požadavky
K dokončení kroků v této příručce potřebujete následující požadavky:
- Dvě aplikace IoT Central – jedna pro vaše vývojové prostředí a jedna pro produkční prostředí. Další informace najdete v tématu Vytvoření aplikace IoT Central.
- Dvě služby Azure Key Vault – jedna pro vaše vývojové prostředí a jedna pro produkční prostředí. Osvědčeným postupem je mít pro každé prostředí vyhrazenou službu Key Vault. Další informace najdete v tématu Vytvoření služby Azure Key Vault pomocí webu Azure Portal.
- Účet GitHubu: GitHub
- Organizace Azure DevOps. Další informace najdete v tématu Vytvoření organizace Azure DevOps.
- PowerShell 7 pro Windows, Mac nebo Linux Získejte PowerShell.
- Modul Azure Az PowerShell nainstalovaný v prostředí PowerShell 7 Další informace najdete v tématu Instalace modulu Azure Az PowerShell.
- Visual Studio Code nebo jiný nástroj pro úpravy souborů PowerShellu a JSONZískejte Visual Studio Code.
- Klient Git. Stáhněte si nejnovější verzi z Gitu – soubory ke stažení (git-scm.com).
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
Stažení ukázkového kódu
Začněte tím, že forkujete úložiště IoT Central CI/CD GitHubu a pak naklonujete fork do místního počítače:
Pokud chcete vytvořit fork úložiště GitHub, otevřete úložiště IoT Central CI/CD GitHub a vyberte Fork.
Naklonujte fork úložiště do místního počítače otevřením okna konzoly nebo bashe a spuštěním následujícího příkazu.
git clone https://github.com/{your GitHub username}/iot-central-CICD-sample
Vytvoření instančního objektu služby
Azure Pipelines se sice může integrovat přímo s trezorem klíčů, ale kanál potřebuje instanční objekt pro některé dynamické interakce trezoru klíčů, jako je načtení tajných kódů pro cíle exportu dat.
Vytvoření instančního objektu vymezeného pro vaše předplatné:
Spuštěním následujícího příkazu vytvořte nový instanční objekt:
az ad sp create-for-rbac -n DevOpsAccess --scopes /subscriptions/{your Azure subscription Id} --role Contributor
Poznamenejte si heslo, appId a tenanta , protože tyto hodnoty budete potřebovat později.
Přidejte heslo instančního objektu jako tajný klíč volaný
SP-Password
do vašeho produkčního trezoru klíčů:az keyvault secret set --name SP-Password --vault-name {your production key vault name} --value {your service principal password}
Udělte instančnímu objektu oprávnění ke čtení tajných kódů z trezoru klíčů:
az keyvault set-policy --name {your production key vault name} --secret-permissions get list --spn {the appId of the service principal}
Generování tokenů rozhraní API IoT Central
V této příručce váš kanál používá tokeny rozhraní API k interakci s aplikacemi IoT Central. Instanční objekt je také možné použít.
Poznámka:
Platnost tokenů rozhraní API IoT Central vyprší po jednom roce.
Pro aplikace IoT Central pro vývoj i produkční prostředí proveďte následující kroky.
V aplikaci IoT Central vyberte Oprávnění a pak tokeny rozhraní API.
Vyberte Nový.
Dejte tokenu název, zadejte v aplikaci organizaci nejvyšší úrovně a nastavte roli na Správce aplikací.
Poznamenejte si token rozhraní API z vaší vývojové aplikace IoT Central. Použijete ho později při spuštění skriptu IoTC-Config.ps1 .
Uložte vygenerovaný token z produkční aplikace IoT Central jako tajný kód, který se volá
API-Token
do trezoru produkčních klíčů:az keyvault secret set --name API-Token --vault-name {your production key vault name} --value '{your production app API token}'
Vygenerování konfiguračního souboru
Tento postup vytvoří konfigurační soubor JSON pro vaše vývojové prostředí na základě existující aplikace IoT Central. Také si stáhnete všechny existující šablony zařízení z aplikace.
V místní kopii úložiště CI/CD IoT Central spusťte následující skript PowerShellu 7:
cd .\iot-central-CICD-sample\PowerShell\ .\IoTC-Config.ps1
Podle pokynů se přihlaste ke svému účtu Azure.
Po přihlášení skript zobrazí nabídku možností konfigurace IoTC. Skript může vygenerovat konfigurační soubor z existující aplikace IoT Central a použít konfiguraci na jinou aplikaci IoT Central.
Vyberte možnost 1 a vygenerujte konfigurační soubor.
Zadejte potřebné parametry a stiskněte Enter:
- Token rozhraní API, který jste vygenerovali pro vývojovou aplikaci IoT Central.
- Subdoména vaší vývojové aplikace IoT Central.
- Zadejte .. \Config\Dev jako složka pro uložení konfiguračního souboru a šablon zařízení.
- Název vašeho vývojového trezoru klíčů.
Skript vytvoří složku s názvem IoTC Configuration ve složce Config\Dev v místní kopii úložiště. Tato složka obsahuje konfigurační soubor a složku s názvem Modely zařízení pro všechny šablony zařízení ve vaší aplikaci.
Úprava konfiguračního souboru
Teď, když máte konfigurační soubor, který představuje nastavení pro instanci vaší vývojové aplikace IoT Central, proveďte potřebné změny před použitím této konfigurace na produkční instanci aplikace IoT Central.
Vytvořte kopii dříve vytvořené složky Dev a pojmenujte ji Production.
Otevřete IoTC-Config.json v produkční složce pomocí textového editoru.
Soubor obsahuje více oddílů. Pokud ale vaše aplikace nepoužívá konkrétní nastavení, tento oddíl se ze souboru vynechá:
{ "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": "systemAssignedManagedIdentity", "endpointUri": "https://yourstorageaccount.blob.core.windows.net/", "containerName": "dataexport" }, "status": "waiting" } ] }, "file uploads": { "connectionString": "FileUpload", "container": "fileupload", "sasTtl": "PT1H" }, "jobs": { "value": [] } }
Pokud vaše aplikace používá nahrání souborů, vytvoří skript ve vašem trezoru vývojového klíče tajný kód s hodnotou zobrazenou
connectionString
ve vlastnosti. Vytvořte tajný klíč se stejným názvem v trezoru produkčních klíčů, který obsahuje připojovací řetězec pro váš účet produkčního úložiště. Příklad:az keyvault secret set --name FileUpload --vault-name {your production key vault name} --value '{your production storage account connection string}'
Pokud vaše aplikace používá spravované identity pro cíle exportu dat, nejsou k dispozici žádné tajné kódy, které byste mohli spravovat. Musíte ale povolit spravovanou identitu přiřazenou systémem pro produkční aplikaci IoT Central a udělit jí potřebná oprávnění k zápisu do cíle.
Pokud vaše aplikace používá připojovací řetězec pro cíle exportu dat, přidejte tajné kódy pro cíle do produkčního trezoru klíčů. Konfigurační soubor neobsahuje žádné skutečné tajné kódy pro váš cíl, tajné kódy se ukládají do vašeho trezoru klíčů.
Aktualizujte tajné kódy v konfiguračním souboru názvem tajného kódu ve vašem trezoru klíčů.
Typ cíle Vlastnost, která se má změnit Fronta služby Service Bus připojovací řetězec Téma služby Service Bus připojovací řetězec Průzkumník dat Azure clientSecret Azure Blob Storage připojovací řetězec Event Hubs připojovací řetězec Webhook Bez ověřování – Příklad:
"destinations": { "value": [ { "id": "393adfc9-0ed8-45f4-aa29-25b5c96ecf63", "displayName": "Blob destination", "type": "blobstorage@v1", "authorization": { "type": "connectionString", "connectionString": "Storage-CS", "containerName": "dataexport" }, "status": "waiting" } ] }
Pokud chcete nahrát konfigurační složku do úložiště GitHub, spusťte ze složky IoTC-CICD-howto následující příkazy.
git add Config git commit -m "Adding config directories and files" git push
Vytvořit kanál
- Otevřete organizaci Azure DevOps ve webovém prohlížeči tak, že přejdete na
https://dev.azure.com/{your DevOps organization}
- Vyberte Nový projekt a vytvořte nový projekt.
- Zadejte název projektu a volitelný popis a pak vyberte Vytvořit.
- Na stránce Vítejte na stránce projektu vyberte Kanály a pak vytvořte kanál.
- Jako umístění kódu vyberte GitHub .
- Výběrem možnosti Autorizovat AzurePipelines autorizujete Azure Pipelines pro přístup k vašemu účtu GitHubu.
- Na stránce Vybrat úložiště vyberte fork úložiště IoT Central CI/CD GitHubu.
- Po zobrazení výzvy k přihlášení k GitHubu a poskytnutí oprávnění pro přístup k úložišti Azure Pipelines vyberte Schválit a nainstalovat.
- Na stránce Konfigurace kanálu vyberte Úvodní kanál, abyste mohli začít. Zobrazí se azure-pipelines.yml , které můžete upravit.
Vytvoření skupiny proměnných
Snadný způsob integrace tajných kódů trezoru klíčů do kanálu je prostřednictvím skupin proměnných. Pomocí skupiny proměnných se ujistěte, že jsou pro váš skript nasazení k dispozici správné tajné kódy. Vytvoření skupiny proměnných:
V části Kanály v nabídce na levé straně vyberte Knihovnu.
Vyberte + Proměnná skupina.
Zadejte
keyvault
jako název skupiny proměnných.Povolte přepínač pro propojení tajných kódů z trezoru klíčů Azure.
Vyberte své předplatné Azure a autorizujete ho. Pak vyberte název vašeho trezoru produkčních klíčů.
Výběrem možnosti Přidat zahájíte přidávání proměnných do skupiny.
Přidejte následující tajné kódy:
- Klíč rozhraní API Služby IoT Central pro vaši produkční aplikaci. Tento tajný kód
API-Token
jste volali při jeho vytvoření. - Heslo pro instanční objekt, který jste vytvořili dříve. Tento tajný kód
SP-Password
jste volali při jeho vytvoření.
- Klíč rozhraní API Služby IoT Central pro vaši produkční aplikaci. Tento tajný kód
Vyberte OK.
Výběrem možnosti Uložit uložte skupinu proměnných.
Konfigurace kanálu
Teď nakonfigurujte kanál pro nabízení změn konfigurace do aplikace IoT Central:
V části Kanály v nabídce vlevo vyberte Kanály.
Nahraďte obsah kanálu YAML následujícím kódem YAML. Konfigurace předpokládá, že váš trezor produkčních klíčů obsahuje:
- Token rozhraní API pro produkční aplikaci IoT Central v tajném kódu s názvem
API-Token
. - Vaše heslo instančního objektu v tajném kódu s názvem
SP-Password
.
Nahraďte hodnoty odpovídajícími
-AppName
hodnotami pro vaše produkční instance a-KeyVault
nahraďte je příslušnými hodnotami.Poznamenali
-AppId
jste si instanční objekt a-TenantId
kdy jste vytvořili instanční objekt.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
- Token rozhraní API pro produkční aplikaci IoT Central v tajném kódu s názvem
Zvolte Uložit a Spustit.
Soubor YAML se uloží do úložiště GitHubu, takže musíte zadat zprávu potvrzení a pak vybrat Uložit a spustit znovu.
Váš kanál je zařazen do fronty. Než se spustí, může to trvat několik minut.
Při prvním spuštění kanálu se zobrazí výzva k udělení oprávnění kanálu pro přístup k vašemu předplatnému a přístupu k trezoru klíčů. Vyberte Povolit a pak znovu povolte pro každý prostředek.
Po úspěšném dokončení úlohy kanálu se přihlaste k produkční aplikaci IoT Central a ověřte, že se konfigurace použila podle očekávání.
Zvýšení úrovně změn z vývoje do produkčního prostředí
Teď, když máte funkční kanál, můžete spravovat instance IoT Central přímo pomocí změn konfigurace. Nové šablony zařízení můžete nahrát do složky Modely zařízení a provést změny přímo v konfiguračním souboru. Tento přístup vám umožní zacházet s konfigurací aplikace IoT Central stejně jako s jakýmkoli jiným kódem.
Další krok
Teď, když víte, jak integrovat konfigurace IoT Central do kanálů CI/CD, je navrhovaným dalším krokem informace o správě a monitorování aplikací IoT Central.