Aracılığıyla paylaş


Kapsayıcı derlemelerinize sürekli tümleştirme ekleme

Sürekli tümleştirme, bir uygulamanın belirli bir kod tabanına her işleme ile otomatik derlemeler sağlayarak sürekli olarak serbest bırakılabilir durumda tutulduğu bir yazılım geliştirme sürecidir. Neredeyse tüm derleme sistemlerine sürekli tümleştirme ekleyebilirsiniz, ancak özellikle kullanışlı olan ikisi GitHub Actions ve Azure Pipelines'dır. Bu konuda, Azure Sphere uygulamalarını derlemek için kapsayıcıları kullanma başlığı altında açıklanan Docker derleme adımlarını otomatikleştirmek için GitHub Actions veya Azure Pipelines'ı nasıl kullanacağınızı göreceksiniz.

Kapsayıcınızı otomatik olarak oluşturmak için GitHub Actions kullanma

GitHub Actions doğrudan GitHub depolarınızdan derleme işleminizi otomatikleştirmenize olanak sağlar. Bu nedenle, GitHub Actions kullanmanın ilk adımı, uygulama kodunuzu içeren bir GitHub deposu oluşturmak veya açmaktır. Bu konuda , Öğretici: Üst düzey bir uygulama derleme bölümünde oluşturulan Blink uygulamasını içeren bir GitHub deposu oluşturduğunuz ve projenizin adının "Blink" olduğu varsayılır. Tüm sürekli tümleştirme projelerinde olduğu gibi, işlemi otomatikleştirmeyi denemeden önce projenizin yerel olarak derlenip beklenen yapıtları sağladığından emin olun. Bu örnekte, başarılı bir derlemeden out sonra dizinin bir Blink.imagepackage dosyası içerdiğini varsayıyoruz.

GitHub deponuzun üst düzey dizininde .devcontainer adlı bir dizin oluşturun ve bu dizinde aşağıdaki içeriğe sahip Dockerfile adlı bir dosya oluşturun:

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

İlk FROM satır, temel geliştirme kapsayıcısı olarak standart Azure Sphere Docker görüntüsünü belirtir ve ikinci satırda bu temel kapsayıcının derleme ortamı olarak kullanılması belirtilir. Satır COPY , deponun içeriğini kapsayıcının /src/ dizinine kopyalar. derleme WORKDIR dizinini belirtir. komutu, RUN derleme dosyalarını oluşturmak için CMake komutunu sağlar. Son olarak, ENTRYPOINT ninja gerçekten uygulamayı derlemek için çağrılmalıdır belirtir.

Deponuzun en üst düzey dizininde .github/workflows dizinini oluşturun ve aşağıdaki içeriğe sahip ci.yml adlı bir dosya ekleyin:

# 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

Bu iş akışının tek bir işi var: uygulamayı oluşturmak için; bu durumda ubuntu-latestiş GitHub Actions çalıştırıcısında çalışır ve dört adımı vardır:

  1. 1. Adım, Checkoutyalnızca deponuzu ubuntu-en son çalıştırıcıya kullanıma alan standart bir GitHub eylemidir.

  2. 2. Adım görüntüyü oluşturur (docker build) ve kapsayıcıyı (docker run başlatır).

  3. 3. adım, çıkışı kapsayıcıdan çalıştırıcıya kopyalar.

  4. 4. Adım: HL görüntü paketini yayımlama, üst düzey uygulama görüntü paketini yapıt olarak yayımlar.

Bu değişiklikleri ana dalınıza işleyin ve Eylemler'i seçin. Artık en az bir iş akışının çalıştığı veya tamamlandığı "Tüm iş akışları" etiketli bir sayfa görmeniz gerekir. İş akışı başarıyla tamamlanırsa, yanında yeşil bir onay işareti görünür. Başarılı bir iş akışına tıkladığınızda "Yapıtlar" etiketli ve "HL imagepackage" etiketli bir yapıt içeren bir kutu görmeniz gerekir. Bu yapıtı indirin ve imagepackage dosyasını açın; Ardından bir dağıtım oluşturabilir veya uygulamayı cihazınıza dışarıdan yükleyebilirsiniz.

Kapsayıcınızı otomatik olarak oluşturmak için Azure Pipelines'ı kullanma

Azure Pipelines , derleme işleminizi doğrudan GitHub depolarınızdan (ve diğer birçok kod deposundan) otomatikleştirmenize olanak sağlar. Bu konu başlığında, Azure DevOps projesi olan bir kuruluşa ait olduğunuz ve Azure Pipelines'a erişiminiz olduğu varsayılır. Azure Pipelines'ı kullanmanın ilk adımı, uygulama kodunuzu içeren bir depo oluşturmak veya açmaktır. Bu konu başlığı altında , Öğretici: Üst düzey uygulama derleme bölümünde oluşturulan Blink uygulamasını içeren bir GitHub deposu oluşturduğunuz varsayılır.

Bu deponun en üst düzey dizininde .devcontainer dizinini oluşturun ve bu dizinde aşağıdaki içeriğe sahip bir Dockerfile dosyası oluşturun:

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

İlk FROM satır, temel geliştirme kapsayıcısı olarak standart Azure Sphere Docker görüntüsünü belirtir ve ikinci satırda bu temel kapsayıcının derleme ortamı olarak kullanılması belirtilir. Satır COPY , deponun içeriğini kapsayıcının /src/ dizinine kopyalar. derleme WORKDIR dizinini belirtir. komutu, RUN derleme dosyalarını oluşturmak için CMake komutunu sağlar. Son olarak, ENTRYPOINT ninja gerçekten uygulamayı derlemek için çağrılmalıdır belirtir.

İşlem hattını oluşturmak için:

  1. Azure DevOps projenizde oturum açın ve pipelines'ı açın.
  2. Kodunuz nerede? sorulduğunda Yeni İşlem Hattı'na ve ardından GitHub'a tıklayın. GitHub kimlik doğrulama sayfasına götürülebilirsiniz; kimlik doğrulamasını tamamlayın ve deponuzu seçmek için sayfaya geçin.
  3. Blink deponuzu seçin. İşlem hattınızı yapılandırma başlıklı bir sayfaya yönlendirilirsiniz.
  4. Başlangıç işlem hattı'ı seçin. Bu, deponuzun en üst düzey dizininde Hello, Dünya göreviyle azure-pipelines.yml adlı bir dosya açar.
  5. Kaydet ve çalıştır'ı seçin. Varsayılan işleme iletisini kabul edin ve kaydet ve çalıştır'ı yeniden seçin. azure-pipelines.yml dosyası GitHub deponuza işlenir ve işlem hattı oluşturulur.

azure-pipelines.yml dosyasının içeriğini aşağıdaki içerikle değiştirin:

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

Bu iş akışının tek bir işi var: uygulamayı oluşturmak için; bu durumda ubuntu-latestiş bir Azure DevOps aracısında çalışır ve iki adımı vardır:

  1. 1. Adım görüntüyü oluşturur (docker build ), kapsayıcıyı ()docker run başlatır ve kapsayıcıdan çıktıyı aracıya kopyalar.

  2. 2. Adım: Derleme yapıtlarını yayımlama, üst düzey uygulama görüntü paketini yapıt olarak yayımlama.

Bu değişiklikleri ana dalınıza işleyin. Azure DevOps'ta İşlem Hatları'yı yeniden açın. İşlem hattınızın bir çalıştırmasının devam etmekte olduğunu veya yeni tamamlandığını görmeniz gerekir. Çalıştırma yeşil bir onay işareti gösteriyorsa, derleme başarılı oldu. Başarılı çalıştırmayı seçin; İlgili sütununda 1 Yayımlandı ifadesini görmeniz gerekir. Bu yapıtı indirin ve imagepackage dosyasının sıkıştırmasını açın; Ardından bir dağıtım oluşturabilir veya uygulamayı cihazınıza dışarıdan yükleyebilirsiniz.

Azure Sphere örnek uygulamalarına sürekli tümleştirme ekleme

GitHub Actions ve Azure Pipelines, Microsoft samples tarayıcısından indirilenler gibi tek bir proje için derlemeleri otomatikleştirmeye yöneliktir. GitHub'da Azure Sphere Örnekleri , bazı paylaşılan kaynaklara sahip projelerden oluşan bir koleksiyon. Bu örneklerden birini sürekli tümleştirmede kullanmak için gerekli paylaşılan kaynakları birleştirmeniz gerekir. Genellikle bu, en azından projenizin üst düzey dizininde bir HardwareDefinitions dizini oluşturma ve yerel kopyaya işaret etmek için CMakeLists.txt dosyasını düzenleme anlamına gelir. Örneğin, HelloWorld/HelloWorld_HighLevelApp örneğini temel alan bir proje oluşturursanız, en üst düzey dizin başlangıçta şöyle görünür:

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

CMakeLists.txt dosyası, Örnekler deposundaki paylaşılan HardwareDefinitions dizinine işaret eden aşağıdaki satırı içerir:

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

Projenizin derlenmesine olanak tanımak için HardwareDefinitions klasörünü en üst düzey dizininize kopyalayın, ardından CMakeLists.txt dosyasını yerel konumu kullanacak şekilde düzenleyin:

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

GitHub Actions ile otomatikleştirmeyi denemeden önce projenizin yerel olarak derlendiğini doğrulayın.