From dfb97df72baa0e22503b41ef478ac18f8a4d82e1 Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Tue, 21 Jan 2025 18:36:33 +0100 Subject: [PATCH] ci(azure-pipelines): parametrize build steps --- .azure-pipelines/templates/service.yaml | 48 +++++++++++++++++- .../templates/service/build-step.yaml | 21 ++++++++ azure-pipelines.yaml | 49 +------------------ 3 files changed, 69 insertions(+), 49 deletions(-) create mode 100644 .azure-pipelines/templates/service/build-step.yaml diff --git a/.azure-pipelines/templates/service.yaml b/.azure-pipelines/templates/service.yaml index c098c92b7..ad156420a 100644 --- a/.azure-pipelines/templates/service.yaml +++ b/.azure-pipelines/templates/service.yaml @@ -10,6 +10,13 @@ parameters: baseImage: baseImage baseImageTag: baseImageTag # extraBuildOptions: '' + - name: buildSteps + type: object + default: + - dependencies + - compile + - lint + - test jobs: - job: ImageBuild_${{parameters.service.name}} @@ -62,4 +69,43 @@ jobs: displayName: Logout from container registry inputs: command: logout - containerRegistry: devFra \ No newline at end of file + containerRegistry: devFra + + - job: Build_${{parameters.service.name}} + displayName: Build ${{parameters.service.name}} + # TODO: wait for ImageBuild job iff the job was executed + # dependsOn: ImageBuild_${{parameters.service.name}} + # condition: succeeded() + container: + # image: devfra.azurecr.io/de.fraport.fradrive.build/frontend:$(Build.BuildNumber) + image: $(imageUpstream)/${{parameters.service.name}}:latest + endpoint: devfra + env: + PROJECT_DIR: $(Build.Repository.LocalPath) + IN_CONTAINER: true + IN_CI: true + steps: + - checkout: self + - ${{ each buildStep in parameters.buildSteps }}: + - template: .azure-pipelines/templates/service/build-step.yaml + parameters: + service: ${{ parameters.service.name }} + buildStep: ${{ buildStep }} + - task: CopyFiles@2 + displayName: Copy ${{parameters.service.name}} artifacts + inputs: + # TODO: parametrize + Contents: | + assets/icons + assets/favicons + static/ + well-known/ + frontend/src/env.sass + config/manifest.json + TargetFolder: '$(Build.ArtifactStagingDirectory)' + - task: PublishBuildArtifacts@1 + displayName: Publish ${{parameters.service.name}} artifacts + inputs: + PathtoPublish: '$(Build.ArtifactStagingDirectory)' + ArtifactName: '${{parameters.service.name}}' + publishLocation: 'Container' \ No newline at end of file diff --git a/.azure-pipelines/templates/service/build-step.yaml b/.azure-pipelines/templates/service/build-step.yaml new file mode 100644 index 000000000..29584c2d9 --- /dev/null +++ b/.azure-pipelines/templates/service/build-step.yaml @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: 2024-2025 Sarah Vaupel +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +parameters: + - name: service + - name: buildStep + +steps: + - task: Bash@3 + name: ${{parameters.service}}_${{parameters.buildStep}} + env: + HTTPS_PROXY: http://proxy.frankfurt-airport.de:8080 + HTTP_PROXY: http://proxy.frankfurt-airport.de:8080 + NO_PROXY: 'localhost,127.0.0.1,*.docker.internal,*.azmk8s.io,devfra.azurecr.io,devfra.westeurope.data.azurecr.io' + FRAPORT_NOPROXY: 'dev.azure.com,*.dev.azure.com,*.fraport.de,*.frankfurt-airport.de' + PROJECT_DIR: $(Build.Repository.LocalPath) + inputs: + targetType: inline + script: | + make -- --${{parameters.buildStep}}-${{parameters.service}} IN_CONTAINER=true IN_CI=true PROJECT_DIR=${PROJECT_DIR} \ No newline at end of file diff --git a/azure-pipelines.yaml b/azure-pipelines.yaml index 778fe8137..50dd86ba0 100644 --- a/azure-pipelines.yaml +++ b/azure-pipelines.yaml @@ -23,51 +23,4 @@ jobs: - ${{ each service in parameters.services }}: - template: .azure-pipelines/templates/service.yaml parameters: - service: ${{ service }} - -- job: FrontendBuild - # TODO: wait for FrontendImage iff the job was executed - # dependsOn: FrontendImage - # condition: succeeded() - container: - # image: devfra.azurecr.io/de.fraport.fradrive.build/frontend:$(Build.BuildNumber) - image: devfra.azurecr.io/de.fraport.fradrive.build/frontend:latest - endpoint: devfra - env: - PROJECT_DIR: $(Build.Repository.LocalPath) - IN_CONTAINER: true - IN_CI: true - steps: - - checkout: self - - task: Bash@3 - name: frontendDependencies - displayName: Install frontend dependencies - env: - HTTPS_PROXY: http://proxy.frankfurt-airport.de:8080 - HTTP_PROXY: http://proxy.frankfurt-airport.de:8080 - NO_PROXY: 'localhost,127.0.0.1,*.docker.internal,*.azmk8s.io,devfra.azurecr.io,devfra.westeurope.data.azurecr.io' - FRAPORT_NOPROXY: 'dev.azure.com,*.dev.azure.com,*.fraport.de,*.frankfurt-airport.de' - PROJECT_DIR: $(Build.Repository.LocalPath) - inputs: - targetType: inline - script: | - make -- --dependencies-frontend IN_CONTAINER=true IN_CI=true PROJECT_DIR=${PROJECT_DIR} - - task: CopyFiles@2 - name: frontendCopyArtifacts - displayName: Prepare frontend artifacts - inputs: - Contents: | - assets/icons - assets/favicons - static/ - well-known/ - frontend/src/env.sass - config/manifest.json - TargetFolder: '$(Build.ArtifactStagingDirectory)' - - task: PublishBuildArtifacts@1 - name: frontendPublishArtifacts - displayName: Publish frontend artifacts - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)' - ArtifactName: 'frontend' - publishLocation: 'Container' \ No newline at end of file + service: ${{ service }} \ No newline at end of file