Sdílet prostřednictvím


Přidání kontinuální integrace do sestavení kontejneru

Kontinuální integrace je proces vývoje softwaru, ve kterém je aplikace udržována v průběžně uvolnitelném stavu tím, že poskytuje automatizované sestavení s každým potvrzením konkrétního základu kódu. Průběžnou integraci můžete přidat do prakticky libovolného systému sestavení, ale dvě, které jsou obzvláště pohodlné, jsou GitHub Actions a Azure Pipelines. V tomto tématu se dozvíte, jak pomocí GitHub Actions nebo Azure Pipelines automatizovat kroky sestavení Dockeru popsané v tématu Použití kontejnerů k sestavení aplikací Azure Sphere.

Automatické sestavení kontejneru pomocí GitHub Actions

GitHub Actions vám umožní automatizovat proces sestavení přímo z úložišť GitHub. Prvním krokem při používání GitHub Actions je tedy vytvoření nebo otevření úložiště GitHub, které obsahuje kód vaší aplikace. V tomto tématu se předpokládá, že jste vytvořili úložiště GitHub obsahující aplikaci Blink vygenerovanou v kurzu Sestavení aplikace vysoké úrovně a že váš projekt má název Blink. Stejně jako u každého projektu kontinuální integrace se před pokusem o automatizaci procesu ujistěte, že se projekt sestavuje místně a poskytuje očekávané artefakty. V tomto příkladu předpokládáme, že po úspěšném sestavení out adresář obsahuje soubor Blink.imagepackage.

V adresáři nejvyšší úrovně úložiště GitHub vytvořte adresář s názvem .devcontainer a v tomto adresáři vytvořte soubor Dockerfile s následujícím obsahem:

FROM mcr.microsoft.com/azurespheresdk:latest AS dev

FROM dev AS build
COPY ./ /src/
WORKDIR /out
RUN cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
    -DAZURE_SPHERE_TARGET_API_SET="latest-lts" -DCMAKE_BUILD_TYPE="Release" "/src"
ENTRYPOINT [ "ninja" ]

Počáteční FROM řádek určuje standardní image Dockeru Azure Sphere jako základní vývojový kontejner a druhý říká, že se má tento základní kontejner použít jako prostředí sestavení. Řádek COPY zkopíruje obsah úložiště do adresáře /src/ kontejneru. Určuje WORKDIR adresář sestavení. Příkaz RUN poskytuje příkaz CMake pro vygenerování souborů sestavení. Nakonec určuje, ENTRYPOINT že ninja by měl být vyvolán, aby skutečně sestavil aplikaci.

V adresáři nejvyšší úrovně úložiště vytvořte adresář .github/workflows a přidejte soubor ci.yml s následujícím obsahem:

# This is a basic workflow to help you get started with Actions

name: ContinuousIntegration

# Controls when the action will run. Triggers the workflow on push or pull request
# events, but including workflow_dispatch also allows manual execution
on:
  push:
  pull_request:
  workflow_dispatch:


jobs:
  build:
    runs-on: ubuntu-latest
    name: Build Azure Sphere Apps
    steps:
    - name: Checkout
      uses: actions/checkout@v2
    - name: Build image for az sphere builds and Start container from build image
      run: |
        docker build --target build -t hlbuildimage -f .devcontainer/Dockerfile .
        docker run --name hlbuildcontainer hlbuildimage
    - name: Copy container build output
      run:
        docker cp hlbuildcontainer:/out HLOutput
    - name: Publish HL imagepackage
      uses: actions/upload-artifact@v2
      with:
        name: HL imagepackage
        path: ${{ github.workspace }}/HLOutput/Blink.imagepackage

Tento pracovní postup má pouze jednu úlohu – sestavení aplikace; Úloha běží na GitHub Actions spouštěči, v tomto případě ubuntu-latest, a má čtyři kroky:

  1. Krok 1, Checkout, je standardní akce GitHubu, která jednoduše zkontroluje vaše úložiště do nejnovějšího spouštěče Ubuntu.

  2. Krok 2 sestaví image (docker build) a spustí kontejner (docker run).

  3. Krok 3 zkopíruje výstup z kontejneru do spouštěče.

  4. Krok 4, Publikování balíčku imagí HL, publikuje balíček image aplikací vysoké úrovně jako artefakt.

Potvrďte tyto změny v hlavní větvi a vyberte Akce. Teď by se měla zobrazit stránka s popiskem Všechny pracovní postupy s alespoň jedním spuštěným nebo dokončeným pracovním postupem. Pokud se pracovní postup úspěšně dokončí, zobrazí se vedle něj zelená značka zaškrtnutí. Klikněte na úspěšný pracovní postup a měli byste vidět pole s popiskem Artefakty obsahující jeden artefakt označený jako HL imagepackage. Stáhněte si tento artefakt a rozbalte soubor imagepackage; pak můžete vytvořit nasazení nebo aplikaci načíst bokem do svého zařízení.

Použití Azure Pipelines k automatickému sestavení kontejneru

Azure Pipelines umožňuje automatizovat proces sestavení přímo z úložišť GitHubu (a mnoha dalších úložišť kódu). Toto téma předpokládá, že už patříte do organizace s projektem Azure DevOps a máte přístup k Azure Pipelines. Prvním krokem při používání Azure Pipelines je vytvoření nebo otevření úložiště, které obsahuje kód vaší aplikace. V tomto tématu se předpokládá, že jste vytvořili úložiště GitHub obsahující aplikaci Blink vygenerovanou v kurzu Vytvoření aplikace vysoké úrovně.

V adresáři nejvyšší úrovně tohoto úložiště vytvořte adresář .devcontainer a v tomto adresáři vytvořte soubor Dockerfile s následujícím obsahem:

FROM mcr.microsoft.com/azurespheresdk:latest AS dev

FROM dev AS build
COPY ./ /src/
WORKDIR /out
RUN cmake -G "Ninja" -DCMAKE_TOOLCHAIN_FILE="/opt/azurespheresdk/CMakeFiles/AzureSphereToolchain.cmake" \
    -DAZURE_SPHERE_TARGET_API_SET="latest-lts" -DCMAKE_BUILD_TYPE="Release" "/src"
ENTRYPOINT [ "ninja" ]

Počáteční FROM řádek určuje standardní image Dockeru Azure Sphere jako základní vývojový kontejner a druhý říká, že se má tento základní kontejner použít jako prostředí sestavení. Řádek COPY zkopíruje obsah úložiště do adresáře /src/ kontejneru. Určuje WORKDIR adresář sestavení. Příkaz RUN poskytuje příkaz CMake pro vygenerování souborů sestavení. Nakonec určuje, ENTRYPOINT že ninja by měl být vyvolán, aby skutečně sestavil aplikaci.

Vytvoření kanálu:

  1. Přihlaste se k projektu Azure DevOps a otevřete Pipelines.
  2. Vyberte Nový kanál a pak vyberte GitHub po zobrazení dotazu Kde je váš kód? Můžete být přesměrováni na ověřovací stránku GitHubu. dokončete ověřování a pokračujte na stránku a vyberte úložiště.
  3. Vyberte úložiště Blink. Přejdete na stránku s názvem Konfigurace kanálu.
  4. Vyberte Úvodní kanál. Otevře se soubor s názvem azure-pipelines.yml v adresáři nejvyšší úrovně vašeho úložiště s úlohou Hello, World.
  5. Vyberte Uložit a spustit. Přijměte výchozí zprávu potvrzení a znovu vyberte Uložit a spustit. Soubor azure-pipelines.yml se potvrdí do úložiště GitHub a kanál se vytvoří.

Obsah souboru azure-pipelines.yml nahraďte následujícím obsahem:

# Docker
# Build a Docker image
# /azure/devops/pipelines/languages/docker

trigger:
- main

resources:
- repo: self

variables:
  tag: '$(Build.BuildId)'

stages:
- stage: Build
  displayName: Build image
  jobs:
  - job: Build
    displayName: Build
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - bash: docker build --target build -t hlbuildimage -f .devcontainer/Dockerfile . &&  docker run --name hlbuildcontainer hlbuildimage && docker cp hlbuildcontainer:/out $(Build.ArtifactStagingDirectory)/HLOutput
      displayName: Build high-level Azure Sphere application in a container and copy the output
    - task: PublishBuildArtifacts@1
      displayName: Publish build artifacts
      inputs:
        PathtoPublish: '$(Build.ArtifactStagingDirectory)/HLOutput/Blink.imagepackage'
        ArtifactName: 'BlinkSample.imagepackage'
        publishLocation: 'Container'

Tento pracovní postup má pouze jednu úlohu – sestavení aplikace; Úloha běží na agentu Azure DevOps, v tomto případě ubuntu-latest, a má dva kroky:

  1. Krok 1 sestaví image (docker build), spustí kontejner (docker run) a zkopíruje výstup z kontejneru do agenta.

  2. Krok 2, Publikování artefaktů sestavení, publikuje balíček image aplikace vysoké úrovně jako artefakt.

Potvrďte tyto změny v hlavní větvi. V Azure DevOps znovu otevřete Pipelines . Měli byste vidět probíhající spuštění kanálu nebo právě dokončené. Pokud se při spuštění zobrazí zelená značka zaškrtnutí, sestavení bylo úspěšné. Vyberte úspěšné spuštění. Ve sloupci Související by se měla zobrazit hodnota 1 Publikováno. Stáhněte si tento artefakt a rozbalte soubor imagepackage; pak můžete vytvořit nasazení nebo aplikaci načíst bokem do svého zařízení.

Přidání kontinuální integrace do ukázkových aplikací Azure Sphere

GitHub Actions a Azure Pipelines slouží k automatizaci sestavení pro jeden projekt, například sestavení stažená z prohlížeče ukázek Microsoftu. Ukázky Azure Sphere na GitHubu jsou kolekce projektů s některými sdílenými prostředky. Pokud chcete některou z těchto ukázek použít v kontinuální integraci, musíte začlenit všechny potřebné sdílené prostředky. Obvykle to znamená alespoň vytvoření adresáře HardwareDefinitions v adresáři nejvyšší úrovně projektu a úpravu souboru CMakeLists.txt tak, aby odkazovat na místní kopii. Pokud například vytvoříte projekt založený na ukázce HelloWorld/HelloWorld_HighLevelApp, adresář nejvyšší úrovně bude zpočátku vypadat takto:

.vscode
.gitignore
applibs_versions.h
app_manifest.json
CMakeLists.txt
CMakeSettings.json
launch.vs.json
LICENSE.txt
main.c
README.md

Soubor CMakeLists.txt obsahuje následující řádek odkazující na sdílený adresář HardwareDefinitions v úložišti Samples:

azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "../../../HardwareDefinitions/mt3620_rdb" TARGET_DEFINITION "sample_appliance.json")

Pokud chcete povolit sestavení projektu, zkopírujte do adresáře nejvyšší úrovně složku HardwareDefinitions a pak upravte soubor CMakeLists.txt tak, aby používal místní umístění:

azsphere_target_hardware_definition(${PROJECT_NAME} TARGET_DIRECTORY "HardwareDefinitions/mt3620_rdb" TARGET_DEFINITION "sample_appliance.json")

Před pokusem o automatizaci pomocí GitHub Actions znovu ověřte, že se váš projekt sestavuje místně.