IoT Central integreren met Azure Pipelines voor continue integratie en continue levering
Continue integratie en continue levering (CI/CD) verwijst naar het proces van het ontwikkelen en leveren van software in korte, frequente cycli met behulp van automatiseringspijplijnen. In dit artikel leest u hoe u de build, test en implementatie van een IoT Central-toepassingsconfiguratie automatiseert. Dankzij deze automatisering kunnen ontwikkelteams vaker betrouwbare releases leveren.
Continue integratie begint met het doorvoeren van uw code naar een vertakking in een opslagplaats met broncode. Elke doorvoering wordt samengevoegd met doorvoeringen van andere ontwikkelaars om ervoor te zorgen dat er geen conflicten worden geïntroduceerd. Wijzigingen worden verder gevalideerd door een build te maken en geautomatiseerde tests uit te voeren op die build. Dit proces resulteert uiteindelijk in een artefact of implementatiebundel om te implementeren in een doelomgeving. In dit geval is het doel een Azure IoT Central-toepassing.
Net zoals IoT Central deel uitmaakt van uw grotere IoT-oplossing, maakt IoT Central deel uit van uw CI/CD-pijplijn. Uw CI/CD-pijplijn moet uw volledige IoT-oplossing en alle configuraties in elke omgeving implementeren, van ontwikkeling tot productie:
IoT Central is een toepassingsplatform als een service met verschillende implementatievereisten van platform als serviceonderdelen . Voor IoT Central implementeert u configuraties en apparaatsjablonen. Deze configuraties en apparaatsjablonen worden beheerd en geïntegreerd in uw release-pijplijn met behulp van API's.
Hoewel het mogelijk is om het maken van IoT Central-apps te automatiseren, moet u in elke omgeving een app maken voordat u uw CI/CD-pijplijn ontwikkelt.
Met behulp van de Azure IoT Central REST API kunt u IoT Central-app-configuraties integreren in uw release-pijplijn.
Deze handleiding begeleidt u bij het maken van een nieuwe pijplijn waarmee een IoT Central-toepassing wordt bijgewerkt op basis van configuratiebestanden die worden beheerd in GitHub. Deze handleiding bevat specifieke instructies voor integratie met Azure Pipelines, maar kan worden aangepast om IoT Central op te nemen in elke releasepijplijn die is gebouwd met behulp van hulpprogramma's zoals Tekton, Jenkins, GitLab of GitHub Actions.
In deze handleiding maakt u een pijplijn die alleen een IoT Central-configuratie toepast op één exemplaar van een IoT Central-toepassing. U moet de stappen integreren in een grotere pijplijn die uw hele oplossing implementeert en deze bevordert van ontwikkeling naar QA tot preproductie naar productie, waarbij alle benodigde tests onderweg worden uitgevoerd.
De scripts dragen momenteel niet de volgende instellingen over tussen IoT Central-exemplaren: dashboards, weergaven, aangepaste instellingen in apparaatsjablonen, prijsplan, UX-aanpassingen, toepassingsinstallatiekopieën, regels, geplande taken, opgeslagen taken en inschrijvingsgroepen.
De scripts verwijderen momenteel geen instellingen uit de doel-IoT Central-toepassing die niet aanwezig zijn in het configuratiebestand.
Vereisten
U hebt de volgende vereisten nodig om de stappen in deze handleiding te voltooien:
- Twee IoT Central-toepassingen: één voor uw ontwikkelomgeving en één voor uw productieomgeving. Zie Een IoT Central-toepassing maken voor meer informatie.
- Twee Azure Key Vaults: één voor uw ontwikkelomgeving en één voor uw productieomgeving. Het is raadzaam om een toegewezen Key Vault te hebben voor elke omgeving. Zie Een Azure Key Vault maken met Azure Portal voor meer informatie.
- Een GitHub-account op GitHub.
- een Azure DevOps-organisatie. Zie Een Azure DevOps-organisatie maken voor meer informatie.
- PowerShell 7 voor Windows, Mac of Linux. Download PowerShell.
- Azure Az PowerShell-module geïnstalleerd in uw PowerShell 7-omgeving. Zie De Azure Az PowerShell-module installeren voor meer informatie.
- Visual Studio Code of een ander hulpprogramma voor het bewerken van PowerShell- en JSON-bestanden.Download Visual Studio Code.
- Git-client. Download de nieuwste versie van Git - Downloads (git-scm.com).
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie quickstart voor Bash in Azure Cloud Shell voor meer informatie.
Installeer de Azure CLI, indien gewenst, om CLI-referentieopdrachten uit te voeren. Als u in Windows of macOS werkt, kunt u Azure CLI uitvoeren in een Docker-container. Zie De Azure CLI uitvoeren in een Docker-container voor meer informatie.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met behulp van de opdracht az login. Volg de stappen die worden weergegeven in de terminal, om het verificatieproces te voltooien. Raadpleeg Aanmelden bij Azure CLI voor aanvullende aanmeldingsopties.
Installeer de Azure CLI-extensie bij het eerste gebruik, wanneer u hierom wordt gevraagd. Raadpleeg Extensies gebruiken met Azure CLI voor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en afhankelijke bibliotheken te vinden. Voer az upgrade uit om te upgraden naar de nieuwste versie.
De voorbeeldcode downloaden
Om aan de slag te gaan, forkt u de GitHub-opslagplaats voor IoT Central CI/CD en kloont u uw fork vervolgens naar uw lokale computer:
Als u de GitHub-opslagplaats wilt splitsen, opent u de IoT Central CI/CD GitHub-opslagplaats en selecteert u Fork.
Kloon uw fork van de opslagplaats naar uw lokale computer door een console- of bash-venster te openen en de volgende opdracht uit te voeren.
git clone https://github.com/{your GitHub username}/iot-central-CICD-sample
Een service-principal maken
Hoewel Azure Pipelines rechtstreeks kan worden geïntegreerd met een sleutelkluis, heeft een pijplijn een service-principal nodig voor bepaalde dynamische sleutelkluisinteracties, zoals het ophalen van geheimen voor gegevensexportbestemmingen.
Ga als volgende te werk om een service-principal te maken die is afgestemd op uw abonnement:
Voer de volgende opdracht uit om een nieuwe service-principal te maken:
az ad sp create-for-rbac -n DevOpsAccess --scopes /subscriptions/{your Azure subscription Id} --role Contributor
Noteer het wachtwoord, de appId en de tenant, omdat u deze waarden later nodig hebt.
Voeg het wachtwoord van de service-principal toe als een geheim dat is aangeroepen
SP-Password
aan uw productiesleutelkluis:az keyvault secret set --name SP-Password --vault-name {your production key vault name} --value {your service principal password}
Geef de service-principal toestemming om geheimen uit de sleutelkluis te lezen:
az keyvault set-policy --name {your production key vault name} --secret-permissions get list --spn {the appId of the service principal}
IoT Central-API-tokens genereren
In deze handleiding gebruikt uw pijplijn API-tokens om te communiceren met uw IoT Central-toepassingen. Het is ook mogelijk om een service-principal te gebruiken.
Notitie
IoT Central API-tokens verlopen na één jaar.
Voer de volgende stappen uit voor uw ioT Central-apps voor ontwikkeling en productie.
Selecteer machtigingen in uw IoT Central-app en vervolgens API-tokens.
Selecteer Nieuw.
Geef het token een naam, geef de organisatie op het hoogste niveau in uw app op en stel de rol in op App-beheerder.
Noteer het API-token van uw IoT Central-ontwikkeltoepassing. U gebruikt deze later wanneer u het IoTC-Config.ps1-script uitvoert.
Sla het gegenereerde token op uit de IoT Central-productietoepassing als een geheim dat wordt aangeroepen
API-Token
naar de productiesleutelkluis:az keyvault secret set --name API-Token --vault-name {your production key vault name} --value '{your production app API token}'
Een configuratiebestand genereren
Deze stappen produceren een JSON-configuratiebestand voor uw ontwikkelomgeving op basis van een bestaande IoT Central-toepassing. U downloadt ook alle bestaande apparaatsjablonen uit de toepassing.
Voer het volgende PowerShell 7-script uit in de lokale kopie van de IoT Central CI/CD-opslagplaats:
cd .\iot-central-CICD-sample\PowerShell\ .\IoTC-Config.ps1
Volg de instructies om u aan te melden bij uw Azure-account.
Nadat u zich hebt aangemeld, wordt in het script het menu IoTC-configuratieopties weergegeven. Het script kan een configuratiebestand genereren op basis van een bestaande IoT Central-toepassing en een configuratie toepassen op een andere IoT Central-toepassing.
Selecteer optie 1 om een configuratiebestand te genereren.
Voer de benodigde parameters in en druk op Enter:
- Het API-token dat u hebt gegenereerd voor uw IoT Central-ontwikkeltoepassing.
- Het subdomein van uw IoT Central-toepassing voor ontwikkeling.
- Voer .. in . \Config\Dev als map voor het opslaan van het configuratiebestand en apparaatsjablonen.
- De naam van uw sleutelkluis voor ontwikkeling.
Met het script maakt u een map met de naam IoTC-configuratie in de map Config\Dev in uw lokale kopie van de opslagplaats. Deze map bevat een configuratiebestand en een map met de naam Apparaatmodellen voor alle apparaatsjablonen in uw toepassing.
Het configuratiebestand wijzigen
Nu u een configuratiebestand hebt dat de instellingen voor uw ioT Central-toepassingsexemplaren voor ontwikkeling vertegenwoordigt, moet u de benodigde wijzigingen aanbrengen voordat u deze configuratie toepast op uw ioT Central-toepassingsexemplaren voor productie.
Maak een kopie van de map Dev die u eerder hebt gemaakt en noem deze productie.
Open IoTC-Config.json in de map Productie met behulp van een teksteditor.
Het bestand heeft meerdere secties. Als uw toepassing echter geen bepaalde instelling gebruikt, wordt deze sectie weggelaten uit het bestand:
{ "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": [] } }
Als uw toepassing bestandsuploads gebruikt, maakt het script een geheim in uw ontwikkelsleutelkluis met de waarde die wordt weergegeven in de
connectionString
eigenschap. Maak een geheim met dezelfde naam in uw productiesleutelkluis met de verbindingsreeks voor uw productieopslagaccount. Voorbeeld:az keyvault secret set --name FileUpload --vault-name {your production key vault name} --value '{your production storage account connection string}'
Als uw toepassing beheerde identiteiten gebruikt voor gegevensexportbestemmingen, zijn er geen geheimen die u kunt beheren. U moet echter wel de door het systeem toegewezen beheerde identiteit inschakelen voor uw IoT Central-productietoepassing en deze de benodigde machtigingen geven om naar de bestemming te schrijven.
Als uw toepassing gebruikmaakt van verbindingsreeks s voor gegevensexportbestemmingen, voegt u geheimen voor de bestemmingen toe aan de productiesleutelkluis. Het configuratiebestand bevat geen werkelijke geheimen voor uw bestemming, de geheimen worden opgeslagen in uw sleutelkluis.
Werk de geheimen in het configuratiebestand bij met de naam van het geheim in uw sleutelkluis.
Doeltype Eigenschap die moet worden gewijzigd Service Bus-wachtrij connectionString Service Bus-onderwerp connectionString Azure Data Explorer clientSecret Azure Blob-opslag connectionString Event Hubs connectionString Webhook zonder verificatie N.v.t. Voorbeeld:
"destinations": { "value": [ { "id": "393adfc9-0ed8-45f4-aa29-25b5c96ecf63", "displayName": "Blob destination", "type": "blobstorage@v1", "authorization": { "type": "connectionString", "connectionString": "Storage-CS", "containerName": "dataexport" }, "status": "waiting" } ] }
Als u de configuratiemap wilt uploaden naar uw GitHub-opslagplaats, voert u de volgende opdrachten uit vanuit de map IoTC-CICD-howto .
git add Config git commit -m "Adding config directories and files" git push
Een pipeline maken
- Open uw Azure DevOps-organisatie in een webbrowser door naar
https://dev.azure.com/{your DevOps organization}
- Selecteer Nieuw project om een nieuw project te maken.
- Geef uw project een naam en een optionele beschrijving en selecteer Vervolgens Maken.
- Selecteer Op de pagina Welkom bij het project de optie Pijplijnen en vervolgens Pijplijn maken.
- Selecteer GitHub als de locatie van uw code.
- Selecteer AzurePipelines autoriseren om Azure Pipelines toegang te geven tot uw GitHub-account.
- Selecteer op de pagina Een opslagplaats selecteren uw fork van de GitHub-opslagplaats van IoT Central CI/CD.
- Wanneer u wordt gevraagd u aan te melden bij GitHub en toestemming te geven voor Azure Pipelines voor toegang tot de opslagplaats, selecteert u Goedkeuren en installeren.
- Selecteer Op de pagina Uw pijplijn configureren starterspijplijn om aan de slag te gaan. De azure-pipelines.yml wordt weergegeven om te bewerken.
Een variabelegroep maken
Een eenvoudige manier om sleutelkluisgeheimen in een pijplijn te integreren, is via variabele groepen. Gebruik een variabelegroep om ervoor te zorgen dat de juiste geheimen beschikbaar zijn voor uw implementatiescript. Een variabelegroep maken:
Selecteer Bibliotheek in de sectie Pijplijnen van het menu aan de linkerkant.
Selecteer + Variabele groep.
Voer
keyvault
de naam in voor de variabelegroep.Schakel de wisselknop in om geheimen uit een Azure-sleutelkluis te koppelen.
Selecteer uw Azure-abonnement en autoriseren. Selecteer vervolgens de naam van uw productiesleutelkluis.
Selecteer Toevoegen om variabelen toe te voegen aan de groep.
Voeg de volgende geheimen toe:
- De IoT Central-API-sleutel voor uw productie-app. U hebt dit geheim
API-Token
aangeroepen toen u het maakte. - Het wachtwoord voor de service-principal die u eerder hebt gemaakt. U hebt dit geheim
SP-Password
aangeroepen toen u het maakte.
- De IoT Central-API-sleutel voor uw productie-app. U hebt dit geheim
Selecteer OK.
Selecteer Opslaan om de variabelegroep op te slaan.
Uw pijplijn configureren
Configureer nu de pijplijn om configuratiewijzigingen naar uw IoT Central-toepassing te pushen:
Selecteer Pijplijnen in de sectie Pijplijnen van het menu aan de linkerkant.
Vervang de inhoud van uw pijplijn-YAML door de volgende YAML. Bij de configuratie wordt ervan uitgegaan dat uw productiesleutelkluis het volgende bevat:
- Het API-token voor uw IoT Central-productie-app in een geheim met de naam
API-Token
. - Uw service-principal-wachtwoord in een geheim met de naam
SP-Password
.
Vervang de waarden voor
-AppName
en-KeyVault
door de juiste waarden voor uw productie-exemplaren.U hebt een notitie gemaakt van de
-AppId
service-principal en-TenantId
toen u uw service-principal hebt gemaakt.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
- Het API-token voor uw IoT Central-productie-app in een geheim met de naam
Selecteer Opslaan en uitvoeren.
Het YAML-bestand wordt opgeslagen in uw GitHub-opslagplaats, dus u moet een doorvoerbericht opgeven en vervolgens Opslaan selecteren en opnieuw uitvoeren .
Uw pijplijn is in de wachtrij geplaatst. Het kan enkele minuten duren voordat het wordt uitgevoerd.
De eerste keer dat u uw pijplijn uitvoert, wordt u gevraagd om machtigingen te verlenen voor de pijplijn om toegang te krijgen tot uw abonnement en om toegang te krijgen tot uw sleutelkluis. Selecteer Toestaan en vervolgens Opnieuw toestaan voor elke resource.
Wanneer de pijplijntaak is voltooid, meldt u zich aan bij de IoT Central-productietoepassing en controleert u of de configuratie is toegepast zoals verwacht.
Wijzigingen van ontwikkeling naar productie verhogen
Nu u een werkende pijplijn hebt, kunt u uw IoT Central-exemplaren rechtstreeks beheren met behulp van configuratiewijzigingen. U kunt nieuwe apparaatsjablonen uploaden naar de map Apparaatmodellen en rechtstreeks wijzigingen aanbrengen in het configuratiebestand. Met deze methode kunt u de configuratie van uw IoT Central-toepassing op dezelfde manier behandelen als andere code.
Volgende stap
Nu u weet hoe u IoT Central-configuraties kunt integreren in uw CI/CD-pijplijnen, is een voorgestelde volgende stap om te leren hoe u IoT Central-toepassingen beheert en bewaakt.