builds/misc/templates/build-images.yaml (375 lines of code) (raw):

parameters: - name: build_single type: string default: '' stages: ################################################################################ - stage: CheckBuildImages ################################################################################ displayName: Check For Source Code Changes pool: name: $(pool.linux.name) demands: - ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby dependsOn: [] jobs: - job: check_source_change_runtime displayName: Check Source Changes Edgelet (changes are outside of test or doc folders) steps: - bash: | git log -m -1 --name-only --first-parent --pretty="" | egrep -i -v '^(test/Microsoft.Azure.Devices.Edge.Test|doc|edgelet)' if [[ $? == 0 ]]; then echo "Detected changes outside of test, doc, and edgelet folders" echo "##vso[task.setvariable variable=RUNTIMECHANGES;isOutput=true]TRUE" fi displayName: Check changes in runtime sources name: check_files # This stage builds Rocks DB and adds the files to staging directory ################################################################################ - stage: BuildRocksDb ################################################################################ displayName: Build RocksDB dependsOn: CheckBuildImages condition: | and( succeeded(), or( not('${{ parameters.build_single }}'), eq(dependencies.CheckBuildImages.outputs['check_source_change_runtime.check_files.RUNTIMECHANGES'], 'true') ) ) jobs: - template: build-rocksdb.yaml parameters: build_single: ${{ parameters.build_single }} ################################################################################ - stage: BuildExecutables ################################################################################ displayName: Build Executables condition: | and( succeeded(), or( not('${{ parameters.build_single }}'), eq(dependencies.CheckBuildImages.outputs['check_source_change_runtime.check_files.RUNTIMECHANGES'], 'true') ) ) pool: name: $(pool.linux.name) demands: - ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby dependsOn: CheckBuildImages jobs: - job: BuildDotnetComponents displayName: Build Dotnet Components variables: Codeql.Enabled: true steps: - script: scripts/linux/buildBranch.sh -c $(Build.Configuration) --no-rocksdb-bin ${{ iif(parameters.build_single, '--skip-quickstart', '') }} name: build displayName: Build ($(Build.Configuration)) dotnet artifacts - bash: | mkdir $(Build.ArtifactStagingDirectory)/core-linux && \ mv $(Build.BinariesDirectory)/publish/{CACertificates,scripts} $(Build.ArtifactStagingDirectory)/core-linux if $INCLUDE_QUICKSTART; then mv $(Build.BinariesDirectory)/publish/{e2e_deployment_files,e2e_test_files,IotEdgeQuickstart*,LeafDevice*} $(Build.ArtifactStagingDirectory)/core-linux fi displayName: Move/stage test file artifacts env: INCLUDE_QUICKSTART: ${{ iif(eq(0, parameters.build_single), 'true', 'false') }} - script: scripts/linux/createArtifactInfo.sh --output-folder '$(Build.ArtifactStagingDirectory)/core-linux' --build-number $(Build.BuildNumber) displayName: 'Create Artifact Info File' - task: PublishBuildArtifacts@1 displayName: Publish core-linux artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)/core-linux' artifactName: 'core-linux' - task: PublishBuildArtifacts@1 displayName: Publish Dotnet Artifacts inputs: PathtoPublish: '$(Build.BinariesDirectory)/publish' artifactName: 'dotnet_artifacts' StoreAsTar: true - template: build-api-proxy.yaml parameters: build_single: ${{ parameters.build_single }} # This stage consolidates .NET binaries, Rocksdb binaries and the SBOM into a # single artifact from which all Docker images can be built. ################################################################################ - stage: ConsolidateAndPubishArtifacts ################################################################################ displayName: Consolidate And Publish Artifacts pool: name: $(pool.linux.name) demands: - ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby dependsOn: [BuildExecutables, BuildRocksDB] jobs: - job: ConsolidateAndPublishArtifacts steps: - task: DownloadBuildArtifacts@0 displayName: Download Artifacts inputs: buildType: 'current' downloadPath: '$(Build.ArtifactStagingDirectory)' downloadType: specific extractTars: true - task: CopyFiles@2 displayName: Copy/Stage dotnet artifacts inputs: sourceFolder: '$(Agent.TempDirectory)/extracted_tars/dotnet_artifacts' contents: '**' targetFolder: '$(Build.BinariesDirectory)/publish' - ${{ if or(not(parameters.build_single), endsWith(parameters.build_single, 'amd64')) }}: - task: CopyFiles@2 displayName: Copy API Proxy Artifacts (amd64) inputs: sourceFolder: '$(Agent.TempDirectory)/extracted_tars/api_proxy_x86_64' contents: '**' targetFolder: '$(Build.BinariesDirectory)/publish' - ${{ if or(not(parameters.build_single), endsWith(parameters.build_single, 'arm32v7')) }}: - task: CopyFiles@2 displayName: Copy API Proxy Artifacts (arm32v7) inputs: sourceFolder: '$(Agent.TempDirectory)/extracted_tars/api_proxy_armv7l' contents: '**' targetFolder: '$(Build.BinariesDirectory)/publish' - ${{ if or(not(parameters.build_single), endsWith(parameters.build_single, 'arm64v8')) }}: - task: CopyFiles@2 displayName: Copy API Proxy Artifacts (arm64v8) inputs: sourceFolder: '$(Agent.TempDirectory)/extracted_tars/api_proxy_aarch64' contents: '**' targetFolder: '$(Build.BinariesDirectory)/publish' - task: CopyFiles@2 displayName: Copy rocksdb libs inputs: sourceFolder: '$(Build.ArtifactStagingDirectory)/librocksdb' contents: '**' targetFolder: '$(Build.BinariesDirectory)/publish/librocksdb' - task: PublishBuildArtifacts@1 displayName: 'Publish Artifacts' inputs: pathToPublish: '$(Build.BinariesDirectory)/publish' artifactName: 'consolidated_artifacts' StoreAsTar: true ################################################################################ - stage: BuildImages ################################################################################ displayName: Build Images pool: name: $(pool.linux.name) demands: - ImageOverride -equals agent-aziotedge-ubuntu-22.04-msmoby dependsOn: ConsolidateAndPubishArtifacts variables: ${{ if eq(length(parameters.build_single), 0) }}: platforms: 'linux/amd64,linux/arm/v7,linux/arm64' ${{ elseif endsWith(parameters.build_single, 'amd64') }}: platforms: linux/amd64 ${{ elseif endsWith(parameters.build_single, 'arm32v7') }}: platforms: linux/arm/v7 ${{ elseif endsWith(parameters.build_single, 'arm64v8') }}: platforms: linux/arm64 jobs: # Product images - job: BuildImageEdgeAgent steps: - template: image-linux.yaml parameters: displayName: Edge Agent name: azureiotedge-agent app: Microsoft.Azure.Devices.Edge.Agent.Service version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) - job: BuildImageEdgeHub steps: - template: image-linux.yaml parameters: displayName: Edge Hub name: azureiotedge-hub app: Microsoft.Azure.Devices.Edge.Hub.Service version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) - job: BuildImageTemperatureSensor steps: - template: image-linux.yaml parameters: displayName: Temperature Sensor name: azureiotedge-simulated-temperature-sensor app: SimulatedTemperatureSensor platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageDiagnostics steps: - template: image-linux.yaml parameters: displayName: Diagnostics name: azureiotedge-diagnostics app: IotedgeDiagnosticsDotnet platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageMetricsCollector steps: - template: image-linux.yaml parameters: displayName: Metrics Collector name: azureiotedge-metrics-collector app: Microsoft.Azure.Devices.Edge.Azure.Monitor platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageApiProxy steps: - template: image-linux.yaml parameters: displayName: API Proxy name: azureiotedge-api-proxy app: api-proxy-module version: $(Build.BuildNumber) platforms: $(platforms) - task: ComponentGovernanceComponentDetection@0 inputs: dockerImagesToScan: '$(registry.address)/microsoft/azureiotedge-api-proxy:$(Build.BuildNumber)-linux-amd64,$(registry.address)/microsoft/azureiotedge-api-proxy:$(Build.BuildNumber)-linux-arm32v7,$(registry.address)/microsoft/azureiotedge-api-proxy:$(Build.BuildNumber)-linux-arm64v8' # Test images - job: BuildImageTemperatureFilter steps: - template: image-linux.yaml parameters: displayName: Temperature Filter name: azureiotedge-temperature-filter app: TemperatureFilter platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageLoadGen steps: - template: image-linux.yaml parameters: displayName: Load Gen name: azureiotedge-load-gen app: load-gen platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageTestAnalyzer steps: - template: image-linux.yaml parameters: displayName: Test Analyzer name: azureiotedge-analyzer app: TestAnalyzer version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) # Functions Sample - Only supported on amd64 - job: BuildImageFunctionsSample steps: - template: image-linux.yaml parameters: displayName: Functions Sample name: azureiotedge-functions-filter app: EdgeHubTriggerCSharp platforms: linux/amd64 version: $(Build.BuildNumber) - job: BuildImageDirectMethodSender steps: - template: image-linux.yaml parameters: displayName: Direct Method Sender name: azureiotedge-direct-method-sender app: DirectMethodSender platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageDirectMethodReceiver steps: - template: image-linux.yaml parameters: displayName: Direct Method Receiver name: azureiotedge-direct-method-receiver app: DirectMethodReceiver platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageMetricsValidator steps: - template: image-linux.yaml parameters: displayName: Metrics Validator name: azureiotedge-metrics-validator app: MetricsValidator platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageNumberLogger steps: - template: image-linux.yaml parameters: displayName: Number Logger name: azureiotedge-number-logger app: NumberLogger platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageModuleRestarter steps: - template: image-linux.yaml parameters: displayName: Module Restarter name: azureiotedge-module-restarter app: ModuleRestarter platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageTwinTester steps: - template: image-linux.yaml parameters: displayName: TwinTester name: azureiotedge-twin-tester app: TwinTester version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) - job: BuildImageRelayer steps: - template: image-linux.yaml parameters: displayName: Relayer name: azureiotedge-relayer app: Relayer platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageNetworkController steps: - template: image-linux.yaml parameters: displayName: Network Controller name: azureiotedge-network-controller app: NetworkController version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) - job: BuildImageTestResultCoordinator steps: - template: image-linux.yaml parameters: displayName: TestResultCoordinator name: azureiotedge-test-result-coordinator app: TestResultCoordinator version: $(Build.BuildNumber) use_rocksdb: true platforms: $(platforms) - job: BuildImageTestMetricsCollector steps: - template: image-linux.yaml parameters: displayName: Test Metrics Collector name: azureiotedge-test-metrics-collector app: TestMetricsCollector platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageDeploymentTester steps: - template: image-linux.yaml parameters: displayName: DeploymentTester name: azureiotedge-deployment-tester app: DeploymentTester platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageEdgeHubRestartTester steps: - template: image-linux.yaml parameters: displayName: EdgeHubRestartTester name: azureiotedge-edgehub-restart-tester app: EdgeHubRestartTester platforms: $(platforms) version: $(Build.BuildNumber) - job: BuildImageCloudToDeviceMessageTester steps: - template: image-linux.yaml parameters: displayName: Cloud To Device Message Tester name: azureiotedge-c2dmessage-tester app: CloudToDeviceMessageTester platforms: $(platforms) version: $(Build.BuildNumber)