Bagikan melalui


Menambahkan integrasi berkelanjutan ke build kontainer Anda

Integrasi berkelanjutan adalah proses pengembangan perangkat lunak di mana aplikasi disimpan dalam status yang terus dapat dirilis dengan menyediakan build otomatis dengan setiap komit terhadap basis kode tertentu. Anda dapat menambahkan integrasi berkelanjutan ke hampir semua sistem build, tetapi dua yang sangat mudah adalah Tindakan GitHub dan Pipeline Azure. Dalam topik ini, Anda akan melihat cara menggunakan Tindakan GitHub atau Pipeline Azure untuk mengotomatisasi langkah-langkah build Docker yang dijelaskan dalam Menggunakan wadah untuk membuat aplikasi Azure Sphere.

Menggunakan Tindakan GitHub untuk menyusun wadah Anda secara otomatis

Tindakan GitHub memungkinkan Anda mengotomatisasi proses build langsung dari repositories GitHub. Jadi, langkah pertama dalam menggunakan Tindakan GitHub adalah membuat atau membuka penyimpanan GitHub yang berisi kode aplikasi Anda. Topik ini menganggap Anda telah membuat repositori GitHub yang berisi aplikasi Blink yang dihasilkan dalam Tutorial: Membuat aplikasi tingkat tinggi dan proyek Anda bernama "Blink". Seperti halnya proyek integrasi berkelanjutan, pastikan proyek Anda dibangun secara lokal dan menyediakan artefak yang diharapkan sebelum Anda mencoba mengotomatisasi proses. Dalam contoh ini, kami mengasumsikan bahwa setelah build berhasil, out direktori berisi file Blink.imagepackage.

Di direktori tingkat atas repository GitHub Anda, buat direktori bernama .devcontainer, dan buat file bernama Dockerfile di direktori tersebut dengan konten berikut:

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

Baris awal FROM menentukan gambar Docker Azure Sphere standar sebagai wadah pengembangan dasar, dan yang kedua mengatakan untuk menggunakan wadah dasar tersebut sebagai lingkungan build. Baris COPY menyalin konten repositori ke dalam direktori /src/ kontainer. Menentukan WORKDIR direktori build. Perintah menyediakan RUN perintah CMake untuk menghasilkan file build. Akhirnya, penentu ENTRYPOINT bahwa ninja harus diminta untuk benar-benar membangun aplikasi.

Di direktori tingkat atas repository Anda, buat direktori .github/workflows dan tambahkan file bernama ci.yml dengan konten berikut ini:

# 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

Alur kerja ini hanya memiliki satu pekerjaan—untuk membangun aplikasi; pekerjaan berjalan pada pelari Tindakan GitHub, dalam hal ubuntu-latestini , dan memiliki empat langkah:

  1. Langkah 1, Checkout, adalah tindakan GitHub standar yang hanya memeriksa penyimpanan Anda ke pelari terbaru ubuntu.

  2. Langkah 2 menyusun gambar (docker build) dan memulai wadah (docker run).

  3. Langkah 3 menyalin output dari wadah ke pelari.

  4. Langkah 4, Terbitkan imagepackage HL, menerbitkan imagepackage aplikasi tingkat tinggi sebagai artefak.

Lakukan perubahan ini ke cabang utama Anda dan pilih Tindakan. Sekarang Anda akan melihat halaman berlabel "Semua alur kerja", dengan setidaknya satu alur kerja yang berjalan atau selesai. Jika alur kerja berhasil diselesaikan, tanda centang hijau akan muncul di sampingnya. Klik alur kerja yang berhasil dan Anda akan melihat kotak berlabel "Artefak" yang berisi satu artefak berlabel "HL imagepackage". Unduh artefak ini dan bongkus file imagepackage; Anda kemudian dapat membuat penyebaran atau memuat sisi aplikasi ke perangkat Anda.

Menggunakan Pipeline Azure untuk membuat wadah Anda secara otomatis

Azure Pipelines memungkinkan Anda mengotomatisasi proses build secara langsung dari repositories GitHub (dan banyak juga repositories kode lainnya). Topik ini menganggap Anda sudah tergabung dalam organisasi dengan proyek Azure DevOps dan memiliki akses ke Pipeline Azure. Langkah pertama dalam menggunakan Azure Pipelines adalah membuat atau membuka penyimpanan yang berisi kode aplikasi Anda. Topik ini menganggap Anda telah membuat repositori GitHub yang berisi aplikasi Blink yang dihasilkan dalam Tutorial: Membuat aplikasi tingkat tinggi.

Dalam direktori tingkat atas repository ini, buat direktori .devcontainer, dan buat file Dockerfile di direktori tersebut dengan konten berikut ini:

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

Baris awal FROM menentukan gambar Docker Azure Sphere standar sebagai wadah pengembangan dasar, dan yang kedua mengatakan untuk menggunakan wadah dasar tersebut sebagai lingkungan build. Baris COPY menyalin konten repositori ke dalam direktori /src/ kontainer. Menentukan WORKDIR direktori build. Perintah menyediakan RUN perintah CMake untuk menghasilkan file build. Akhirnya, penentu ENTRYPOINT bahwa ninja harus diminta untuk benar-benar membangun aplikasi.

Untuk membuat saluran:

  1. Masuk ke proyek Azure DevOps Anda dan buka Saluran.
  2. Pilih Saluran Baru, lalu pilih GitHub saat ditanya Di mana kode Anda? Anda mungkin dibawa ke halaman autentikasi GitHub; selesaikan autentikasi dan lanjutkan ke halaman untuk memilih penyimpanan Anda.
  3. Pilih repository Blink Anda. Anda dibawa ke halaman berjudul Mengonfigurasi saluran Anda.
  4. Pilih Saluran awal. Tindakan ini akan membuka file bernama azure-pipelines.yml di direktori tingkat atas repository Anda dengan tugas Hello, World.
  5. Pilih Simpan dan jalankan. Terima pesan komit default dan pilih Simpan dan jalankan lagi. File azure-pipelines.yml berkomitmen pada repository GitHub Anda dan pipeline dibuat.

Ganti konten file azure-pipelines.yml dengan konten berikut:

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

Alur kerja ini hanya memiliki satu pekerjaan—untuk membangun aplikasi; pekerjaan berjalan di agen Azure DevOps, dalam hal ubuntu-latestini , dan memiliki dua langkah:

  1. Langkah 1 menyusun gambar (docker build), memulai wadah (docker run), dan menyalin output dari wadah ke agen.

  2. Langkah 2, Terbitkan artefak build, menerbitkan imagepackage aplikasi tingkat tinggi sebagai artefak.

Lakukan perubahan ini ke cabang utama Anda. Di Azure DevOps, buka Pipeline lagi. Anda akan melihat proses alur yang sedang berlangsung atau baru saja selesai. Jika proses memperlihatkan tanda centang hijau, build berhasil. Pilih jalankan yang berhasil; Anda akan melihat 1 Diterbitkan di kolom Terkait . Unduh artefak ini dan buka zip file imagepackage; Anda kemudian dapat membuat penyebaran atau memuat sisi aplikasi ke perangkat Anda.

Menambahkan integrasi berkelanjutan ke aplikasi sampel Azure Sphere

Tindakan GitHub dan Pipeline Azure dimaksudkan untuk mengotomatisasi build untuk satu proyek, seperti yang diunduh dari browser sampel Microsoft. Sampel Azure Sphere di GitHub adalah kumpulan proyek dengan beberapa sumber daya bersama. Untuk menggunakan salah satu sampel ini dalam integrasi berkelanjutan, Anda perlu menggabungkan sumber daya bersama yang diperlukan. Biasanya, ini berarti setidaknya membuat direktori HardwareDefinitions di direktori tingkat atas proyek Anda dan mengedit file CMakeLists.txt untuk mengarahkan ke salinan lokal. Misalnya, jika Anda membuat proyek berdasarkan sampel HelloWorld/HelloWorld_HighLevelApp, direktori tingkat atas awalnya terlihat seperti ini:

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

File CMakeLists.txt berisi baris berikut menunjuk ke direktori HardwareDefinitions bersama dalam repo Sampel:

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

Untuk memungkinkan proyek Anda menyusun, salin folder HardwareDefinitions ke direktori tingkat atas Anda, lalu edit file CMakeLists.txt untuk menggunakan lokasi lokal:

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

Sekali lagi, verifikasi bahwa proyek Anda dibuat secara lokal sebelum Anda mencoba mengotomatisasi dengan Tindakan GitHub.