ci(azure-pipelines): properly implement multi-entity caches for dependencies

This commit is contained in:
Sarah Vaupel 2025-02-07 17:17:25 +01:00
parent 6a279d262f
commit 8157746fea
2 changed files with 38 additions and 26 deletions

View File

@ -5,8 +5,11 @@
parameters:
- name: serviceName
type: string
- name: dependenciesArtifacts
type: string
# - name: dependenciesArtifacts
# type: string
- name: dependenciesCaches
type: array
default: []
- name: dependenciesBuildPool
type: string
default: 'Prod Private Agent Pool'
@ -49,12 +52,13 @@ jobs:
IN_CONTAINER: true
IN_CI: true
steps:
# Restore previously-built dependencies from cache
- task: Cache@2
displayName: Restore cached ${{parameters.serviceName}} dependencies
inputs:
key: '${{parameters.serviceName}}-dependencies'
path: '${{parameters.dependenciesArtifacts}}'
# Restore previously-built dependencies from caches
- ${{ each cache in parameters.dependenciesCaches }}:
- task: Cache@2
displayName: Restore cached ${{parameters.serviceName}} dependencies
inputs:
key: "'${{parameters.serviceName}}-dependencies' | ${{cache.key}}"
path: '${{cache.path}}'
# - task: DownloadPipelineArtifact@2
# displayName: Download previously built ${{parameters.serviceName}} dependencies
# condition: eq(variables.useCachedDependencies, true)
@ -77,15 +81,17 @@ jobs:
makeJob: dependencies
makeService: ${{parameters.serviceName}}
# (Note: a post-job for updating the dependency cache is automatically created, so no further step is due here.)
# Upload newly-built dependencies as artifacts
- task: CopyFiles@2
displayName: Copy ${{parameters.serviceName}} dependencies for upload
inputs:
Contents: '${{parameters.dependenciesArtifacts}}'
TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1
displayName: Upload ${{parameters.serviceName}} dependencies as artifacts
inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '${{parameters.serviceName}}-dependencies'
publishLocation: 'Container'
# - task: CopyFiles@2
# displayName: Copy ${{parameters.serviceName}} dependencies for upload
# inputs:
# Contents: '${{parameters.dependenciesArtifacts}}'
# TargetFolder: '$(Build.ArtifactStagingDirectory)'
# - task: PublishBuildArtifacts@1
# displayName: Upload ${{parameters.serviceName}} dependencies as artifacts
# inputs:
# PathtoPublish: '$(Build.ArtifactStagingDirectory)'
# ArtifactName: '${{parameters.serviceName}}-dependencies'
# publishLocation: 'Container'

View File

@ -24,9 +24,15 @@ parameters:
# extraBuildOptions: |
# --build-arg NPM_CUSTOM_REGISTRY=https://pkgs.dev.azure.com/fraport/_packaging/packages/npm/registry/
dependsOn: []
dependenciesArtifacts: |
node_modules/
.npm/
dependenciesCaches:
- key: package.json | package-lock.json
path: node_modules/
- key: package.json | package-lock.json
path: .npm/
- key: package.json | esbuild.config.mjs | utils/renamer.pl | utils/faviconize.pl | frontend/src/icons.scss
path: assets/icons/
- key: package.json | esbuild.config.mjs | utils/renamer.pl | utils/faviconize.pl | frontend/src/icons.scss
path: assets/favions/
buildPool: 'Prod Private Agent Pool'
buildTimeout: 60
buildArtifacts: |
@ -43,13 +49,13 @@ parameters:
tag: 8.10.4
dependsOn:
- Build_frontend
dependenciesArtifacts: |
.stack/**/*
dependenciesCaches:
- key: stack.yaml | stack.yaml.lock
path: .stack/
buildPool: 'Prod Private Agent Pool DS3'
buildTimeout: 1440
buildArtifacts: |
bin/*
.stack-work/**/*
variables:
buildImageUpstream: devfra.azurecr.io/de.fraport.fradrive.build
@ -69,9 +75,9 @@ stages:
- template: .azure-pipelines/templates/jobs/setup_dependencies.yaml
parameters:
serviceName: ${{service.name}}
dependenciesCaches: ${{service.dependenciesCaches}}
dependenciesBuildPool: ${{service.buildPool}}
dependenciesBuildTimeout: ${{service.buildTimeout}}
dependenciesArtifacts: ${{service.dependenciesArtifacts}}
- stage: Build
dependsOn: Setup