共用方式為


將持續整合新增至容器組建

持續整合是一種軟體發展程式,透過在每個認可特定程式碼基底的情況下提供自動化組建,讓應用程式保持在持續可重複的狀態。 您可以將持續整合新增至幾乎任何組建系統,但兩個特別方便的組建系統是GitHub Actions和 Azure 管線。 在本主題中,您將瞭解如何使用 GitHub Actions 或 Azure 管線來自動化 Docker 組建步驟,如使用容器建立 Azure 球體應用程式中所述。

使用 GitHub Actions 自動建立容器

GitHub Actions可讓您直接從 GitHub 存放庫自動化您的組建程式。 因此,使用 GitHub Actions 的第一個步驟是建立或開啟包含您應用程式代碼的 GitHub 存放庫。 本主題假設您已建立 GitHub 存放庫,其中包含在教學課程中產生的 Blink 應用程式 :建立高階應用程式 ,而您的專案名稱為「閃爍」。 與任何持續整合專案一樣,在嘗試自動化程式之前,請先確認您的專案會在本機建置,並提供預期的成品。 在此範例中,我們假設在組建成功之後, out 目錄包含 Blink.imagepackage 檔案。

在 GitHub 存放庫的頂層目錄中,建立名為 .devcontainer 的目錄,並在目錄中建立名為 Dockerfile 的檔案,並包含下列內容:

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" ]

起始 FROM 線會指定標準 Azure 球體 Docker 影像做為基礎開發容器,第二行則表示要使用該基本容器做為組建環境。 線 COPY 條會將存放庫的內容複寫到容器的 /src/ 目錄中。 指定 WORKDIR 組建目錄。 命令 RUN 會提供 CMake 命令來產生組建檔案。 最後,指定 ENTRYPOINT 應該叫用忍者以實際建立應用程式。

在存放庫的頂層目錄中,建立 .github/workflows 目錄,並新增名為 ci.yml 的檔案,並包含下列內容:

# 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

此工作流程只有一個工作—用來建立應用程式;工作是在GitHub Actions跑者上執行,在此情況下 ubuntu-latest ,有四個步驟:

  1. 步驟 1 是 Checkout 標準的 GitHub 動作,只要將存放庫取出給 ubuntu 最新的跑步者即可。

  2. 步驟 2 會建立影像 (docker build) ,並啟動容器 (docker run) 。

  3. 步驟 3 會將容器的輸出複製到跑步者。

  4. 步驟 4,發佈 HL 影像套件,將高階應用程式影像套件發佈為 成品

將這些變更認可到主要分支,然後選取 [動作]。 您現在應該會看到標示為「所有工作流程」的頁面,其中至少有一個工作流程正在執行或完成。 如果工作流程順利完成,旁邊會出現綠色核取記號。 按一下成功的工作流程,您應該會看到標示為「成品」的方塊,其中包含一個標示為「HL 影像套件」的成品。 下載此成品並拆箱圖像套件檔案;然後,您可以 建立部署側載應用程式到您的裝置

使用 Azure 管線來自動建立容器

Azure 管線 可讓您直接從 GitHub 存放庫 (和許多其他程式碼存放庫以及) 自動化您的組建程式。 本主題假設您已經屬於具有 Azure DevOps 專案的組織,而且可以存取 Azure 管線。 使用 Azure 管線的第一個步驟是建立或開啟包含您應用程式代碼的存放庫。 本主題假設您已建立 GitHub 存放庫,其中包含在教學課程中產生的 Blink 應用程式 :建立高階應用程式

在此存放庫的頂層目錄中,建立 .devcontainer 目錄,並在該目錄中建立包含下列內容的 Dockerfile 檔案:

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" ]

起始 FROM 線會指定標準 Azure 球體 Docker 影像做為基礎開發容器,第二行則表示要使用該基本容器做為組建環境。 線 COPY 條會將存放庫的內容複寫到容器的 /src/ 目錄中。 指定 WORKDIR 組建目錄。 命令 RUN 會提供 CMake 命令來產生組建檔案。 最後,指定 ENTRYPOINT 應該叫用忍者以實際建立應用程式。

若要建立管線:

  1. 登入您的 Azure DevOps 專案並開啟 [管線]
  2. 選取[新增管線],然後在詢問您的程式碼在哪裡時選取GitHub?您可能會被帶往 GitHub 驗證頁面;完成驗證並繼續移至頁面以選取您的存放庫。
  3. 選取您的閃爍存放庫。 您會移至標題為 「設定管線」的頁面。
  4. 取 [啟動器管線]。 這會在存放庫的頂層目錄中開啟名為 azure-pipelines.yml 的檔案,其中包含「世界」Hello 工作。
  5. 取 [儲存並執行]。 接受預設認可訊息,然後再次選取 [ 儲存並執行]。 azure-pipelines.yml 檔案會送達您的 GitHub 存放庫,且會建立管線。

將 azure-pipelines.yml 檔案的內容取代為下列內容:

# 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'

此工作流程只有一個工作—用來建立應用程式;此工作是在 Azure DevOps 代理程式上執行,在此情況下 ubuntu-latest ,有兩個步驟:

  1. 步驟 1 會建立影像 (docker build) 、啟動容器 (docker run) ,並將容器的輸出複製到代理程式。

  2. 步驟 2:發佈組建成品,將高階應用程式映射套件發佈為 成品

將這些變更認可至主要分支。 在 Azure DevOps 中,再次開 啟 [管線] 。 您應該會看到正在執行的管線或剛完成。 如果執行顯示綠色核取記號,表示組建成功。 選取成功執行;您應該會在 [相關] 欄中看到1 [已發佈]。 下載此成品並解壓縮映射套件檔案;然後,您可以 建立部署側載應用程式到您的裝置

將持續整合新增至 Azure 球體範例應用程式

GitHub Actions和 Azure 管線是用來自動化單一專案的組建,例如從Microsoft 範例瀏覽器下載的組建。 GitHub 上的 Azure 球體範例 是包含一些共用資源的專案集合。 若要在持續整合中使用其中一個樣本,您必須合併任何所需的共用資源。 通常,這表示至少會在專案頂層目錄中建立 HardwareDefinitions 目錄,並編輯 CMakeLists.txt 檔案以指向本機複本。 例如,如果您根據 HelloWorld/HelloWorld_HighLevelApp 範例建立專案,最上層目錄一開始看起來像這樣:

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

CMakeLists.txt 檔案包含指向範例轉譯中共用 HardwareDefinitions 目錄的下列線條:

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

若要啟用專案組建,請將 [HardwareDefinitions] 資料夾複製到頂層目錄,然後編輯 CMakeLists.txt 檔案以使用本機位置:

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

同樣地,在嘗試使用GitHub Actions自動化之前,請先確認您的專案建置在本機。