From 3122a36ac899bf6d028c9a8245e93074beac23ac Mon Sep 17 00:00:00 2001 From: Sarah Vaupel Date: Tue, 21 Jan 2025 16:28:27 +0100 Subject: [PATCH] ci(azure-pipelines): parametrize frontend service --- .azure-pipelines/templates/build-image.yaml | 71 +++++++++++++++++ azure-pipelines.yaml | 88 ++++----------------- 2 files changed, 85 insertions(+), 74 deletions(-) create mode 100644 .azure-pipelines/templates/build-image.yaml diff --git a/.azure-pipelines/templates/build-image.yaml b/.azure-pipelines/templates/build-image.yaml new file mode 100644 index 000000000..1c90a9165 --- /dev/null +++ b/.azure-pipelines/templates/build-image.yaml @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: 2024-2025 Sarah Vaupel +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +parameters: + - name: service + type: object + default: + name: service + baseImage: baseImage + baseImageTag: baseImageTag + extraBuildOptions: '\' + +variables: + imageUpstream: devfra.azurecr.io/de.fraport.fradrive.build + onMasterBranch: $[eq(variables['Build.SourceBranch'], 'refs/heads/master')] + onUpdateBranch: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/update')] + +jobs: + - job: ImageBuild_${{parameters.service.name}} + displayName: Build ${{parameters.service.name}} image + condition: or(eq(variables.onMasterBranch, true), eq(variables.onUpdateBranch, true)) + container: + image: devfra.azurecr.io/de.fraport.build/tools:1.1.0 + endpoint: devfra + steps: + - checkout: self + - task: Docker@2 + displayName: Login to container registry + inputs: + command: login + containerRegistry: devFra + - task: Bash@3 + displayName: Build ${{parameters.service.name}} image + inputs: + targetType: inline + script: | + cp docker/${{parameters.service.name}}/Dockerfile . + docker build \ + --tag ${{variables.imageUpstream}}/${{parameters.service.name}}:$(Build.BuildNumber) \ + --build-arg FROM_IMG=${{parameters.service.baseImage}} \ + --build-arg FROM_TAG=${{parameters.service.baseImageTag}} \ + --build-arg HTTPS_PROXY=http://proxy.frankfurt-airport.de:8080 \ + --build-arg HTTP_PROXY=http://proxy.frankfurt-airport.de:8080 \ + --build-arg NO_PROXY='localhost,127.0.0.1,*.docker.internal,*.azmk8s.io,devfra.azurecr.io,devfra.westeurope.data.azurecr.io' \ + --build-arg FRAPORT_NOPROXY=dev.azure.com,*.dev.azure.com,*.fraport.de,*.frankfurt-airport.de \ + --build-arg MOUNT_DIR=$(Build.Repository.LocalPath) \ + --build-arg PROJECT_DIR=/fradrive \ + --build-arg IN_CI=true \ + --build-arg IN_CONTAINER=true \ + $${{ parameters.service.extraBuildOptions }} + . + - task: Bash@3 + displayName: Push ${{ parameters.service.name }} image + inputs: + targetType: inline + script: | + docker push ${{variables.imageUpstream}}/${{parameters.service.name}}:$(Build.BuildNumber) + - task: Bash@3 + displayName: Update latest ${{parameters.service.name}} image + condition: eq(variables.onMasterBranch, true) + inputs: + targetType: inline + script: | + docker tag ${{variables.imageUpstream}}/${{parameters.service.name}}:$(Build.BuildNumber) ${{variables.imageUpstream}}/${{parameters.service.name}}:latest + docker push ${{variables.imageUpstream}}/${{parameters.service.name}}:latest + - task: Docker@2 + displayName: Logout from container registry + inputs: + command: logout + containerRegistry: devFra \ No newline at end of file diff --git a/azure-pipelines.yaml b/azure-pipelines.yaml index 49675b60f..90c465b4d 100644 --- a/azure-pipelines.yaml +++ b/azure-pipelines.yaml @@ -2,66 +2,23 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later +parameters: + - name: services + type: object + default: + - name: frontend + baseImage: devfra.azurecr.io/de.fraport.build/npm + baseImageTag: node-20 + extraBuildOptions: | + --build-arg NPM_CUSTOM_REGISTRY=https://pkgs.dev.azure.com/fraport/_packaging/packages/npm/registry/ \ + pool: 'Prod Private Agent Pool' -variables: - imageFradriveUpstream: devfra.azurecr.io/de.fraport.fradrive.build - onMasterBranch: $[eq(variables['Build.SourceBranch'], 'refs/heads/master')] - onUpdateBranch: $[startsWith(variables['Build.SourceBranch'], 'refs/heads/update')] - jobs: -- job: FrontendImage - condition: or(eq(variables.onMasterBranch, true), eq(variables.onUpdateBranch, true)) - container: - image: devfra.azurecr.io/de.fraport.build/tools:1.1.0 - endpoint: devfra - steps: - - checkout: self - - task: Docker@2 - name: dockerLoginDevFra - displayName: Docker Login to devfra - inputs: - command: login - containerRegistry: devFra - - task: Bash@3 - displayName: Build frontend image - inputs: - targetType: inline - script: | - cp docker/frontend/Dockerfile . - docker build \ - --build-arg FROM_IMG=devfra.azurecr.io/de.fraport.build/npm \ - --build-arg FROM_TAG=node-20 \ - --build-arg HTTPS_PROXY=http://proxy.frankfurt-airport.de:8080 \ - --build-arg HTTP_PROXY=http://proxy.frankfurt-airport.de:8080 \ - --build-arg NO_PROXY='localhost,127.0.0.1,*.docker.internal,*.azmk8s.io,devfra.azurecr.io,devfra.westeurope.data.azurecr.io' \ - --build-arg FRAPORT_NOPROXY=dev.azure.com,*.dev.azure.com,*.fraport.de,*.frankfurt-airport.de \ - --build-arg NPM_CUSTOM_REGISTRY=https://pkgs.dev.azure.com/fraport/_packaging/packages/npm/registry/ \ - --build-arg MOUNT_DIR=$(Build.Repository.LocalPath) \ - --build-arg PROJECT_DIR=/fradrive \ - --build-arg IN_CI=true \ - --tag ${{variables.imageFradriveUpstream}}/frontend:$(Build.BuildNumber) \ - . - - task: Bash@3 - displayName: Push frontend image - inputs: - targetType: inline - script: | - docker push ${{variables.imageFradriveUpstream}}/frontend:$(Build.BuildNumber) - - task: Bash@3 - displayName: Update latest frontend image - condition: eq(variables.onMasterBranch, true) - inputs: - targetType: inline - script: | - docker tag ${{variables.imageFradriveUpstream}}/frontend:$(Build.BuildNumber) ${{variables.imageFradriveUpstream}}/frontend:latest - docker push ${{variables.imageFradriveUpstream}}/frontend:latest - - task: Docker@2 - name: dockerLogoutDevFra - displayName: Docker Logout from devfra - inputs: - command: logout - containerRegistry: devFra +- ${{ each service in parameters.services }}: + - template: .azure-pipelines/templates/build-image.yaml + parameters: + service: ${{ service }} - job: FrontendBuild # TODO: wait for FrontendImage iff the job was executed @@ -90,23 +47,6 @@ jobs: targetType: inline script: | make -- --dependencies-frontend IN_CONTAINER=true IN_CI=true PROJECT_DIR=${PROJECT_DIR} - - task: Bash@3 - name: frontendCompile - displayName: Compile frontend - env: - PROJECT_DIR: $(Build.Repository.LocalPath) - inputs: - targetType: inline - script: | - make -- --compile-frontend IN_CONTAINER=true IN_CI=true PROJECT_DIR=${PROJECT_DIR} - - task: Bash@3 - name: frontendTest - displayName: Test frontend - inputs: - targetType: inline - script: | - make -- --lint-frontend IN_CONTAINER=true - make -- --test-frontend IN_CONTAINER=true - task: CopyFiles@2 name: frontendCopyArtifacts displayName: Prepare frontend artifacts