將持續整合新增至容器組建
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
持續整合是一種軟體開發程式,應用程式會持續處於可發行的狀態,方法是提供每個認可給特定程式代碼基底的自動化組建。 您可以將持續整合新增至幾乎任何建置系統,但 GitHub Actions 和 Azure Pipelines 特別方便的兩個。 在本主題中,您將瞭解如何使用 GitHub Actions 或 Azure Pipelines,將使用容器來建置 Azure Sphere 應用程式中所述的 Docker 建置步驟自動化。
使用 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 Sphere 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 azsphere 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
Checkout
是標準 GitHub 動作,只會將您的存放庫簽出至 ubuntu-latest 執行器。步驟 2 會建置映射 (
docker build
) 並啟動容器 (docker run
)。步驟 3 會將容器的輸出複製到執行器。
步驟 4:發佈 HL imagepackage,將高階應用程式 imagepackage 發佈為 成品。
將這些變更認可到您的主要分支,然後選取 [ 動作]。 您現在應該會看到標示為「所有工作流程」的頁面,其中至少有一個工作流程正在執行或完成。 如果工作流程成功完成,則旁邊會出現綠色複選標記。 按兩下成功的工作流程,您應該會看到標示為「成品」的方塊,其中包含一個標示為「HL imagepackage」的成品。 下載此成品並解壓縮 imagepackage 檔案;然後 ,您可以建立部署 或 側載應用程式到您的裝置。
使用 Azure Pipelines 自動建置您的容器
Azure Pipelines 可讓您直接從 GitHub 存放庫自動執行建置程式(以及其他許多程式代碼存放庫)。 本主題假設您已經屬於具有 Azure DevOps 專案且可存取 Azure Pipelines 的組織。 使用 Azure Pipelines 的第一個步驟是建立或開啟包含應用程式程式代碼的存放庫。 本主題假設您已建立 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 Sphere Docker 映射指定為基底開發容器,而第二個表示使用該基底容器作為建置環境。 此 COPY
行會將存放庫的內容複製到容器的 /src/ 目錄中。 WORKDIR
指定組建目錄。 此命令 RUN
會提供 CMake 命令來產生組建檔案。 最後, ENTRYPOINT
指定應該叫用忍者來實際建置應用程式。
若要建立管線:
- 登入您的 Azure DevOps 項目並開啟 Pipelines。
- 選取 [新增管線],然後在系統詢問您的程式代碼在哪裡時選取 GitHub?您可以前往 GitHub 驗證頁面;完成驗證,然後繼續前往頁面以選取您的存放庫。
- 選取您的 Blink 存放庫。 系統會帶您前往標題為 設定管線的頁面。
- 選取 [入門管線]。 這會使用 Hello, World 工作,開啟存放庫最上層目錄中名為 azure-pipelines.yml 的檔案。
- 選取儲存並執行。 接受預設認可訊息,然後再次選取 [ 儲存並執行]。 azure-pipelines.yml檔案會認可至您的 GitHub 存放庫,並建立管線。
以下列內容取代azure-pipelines.yml檔案的內容:
# Docker
# Build a Docker image
# https://learn.microsoft.com/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 會建置映射 (
docker build
)、啟動容器 (docker run
),並將容器的輸出複製到代理程式。步驟 2:發佈組建成品,將高階應用程式 imagepackage 發佈為 成品。
將這些變更認可到您的主要分支。 在 Azure DevOps 中,再次開啟 Pipelines 。 您應該會看到管線的執行進行中或剛完成。 如果執行顯示綠色複選標記,則組建成功。 選取成功的執行;您應該會在 [相關] 資料行中看到 [1 已發佈]。 下載此成品並解壓縮 imagepackage 檔案;然後 ,您可以建立部署 或 側載應用程式到您的裝置。
將持續整合新增至 Azure Sphere 範例應用程式
GitHub Actions 和 Azure Pipelines 旨在將單一專案的組建自動化,例如從 Microsoft範例瀏覽器下載的專案。 GitHub 上的 Azure Sphere 範例是具有一些共用資源的專案集合。 若要在持續整合中使用其中一個範例,您需要納入任何所需的共享資源。 通常,這表示至少在專案的頂層目錄中建立 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 自動執行。