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: parameters:
- name: serviceName - name: serviceName
type: string type: string
- name: dependenciesArtifacts # - name: dependenciesArtifacts
type: string # type: string
- name: dependenciesCaches
type: array
default: []
- name: dependenciesBuildPool - name: dependenciesBuildPool
type: string type: string
default: 'Prod Private Agent Pool' default: 'Prod Private Agent Pool'
@ -49,12 +52,13 @@ jobs:
IN_CONTAINER: true IN_CONTAINER: true
IN_CI: true IN_CI: true
steps: steps:
# Restore previously-built dependencies from cache # Restore previously-built dependencies from caches
- task: Cache@2 - ${{ each cache in parameters.dependenciesCaches }}:
displayName: Restore cached ${{parameters.serviceName}} dependencies - task: Cache@2
inputs: displayName: Restore cached ${{parameters.serviceName}} dependencies
key: '${{parameters.serviceName}}-dependencies' inputs:
path: '${{parameters.dependenciesArtifacts}}' key: "'${{parameters.serviceName}}-dependencies' | ${{cache.key}}"
path: '${{cache.path}}'
# - task: DownloadPipelineArtifact@2 # - task: DownloadPipelineArtifact@2
# displayName: Download previously built ${{parameters.serviceName}} dependencies # displayName: Download previously built ${{parameters.serviceName}} dependencies
# condition: eq(variables.useCachedDependencies, true) # condition: eq(variables.useCachedDependencies, true)
@ -77,15 +81,17 @@ jobs:
makeJob: dependencies makeJob: dependencies
makeService: ${{parameters.serviceName}} 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 # Upload newly-built dependencies as artifacts
- task: CopyFiles@2 # - task: CopyFiles@2
displayName: Copy ${{parameters.serviceName}} dependencies for upload # displayName: Copy ${{parameters.serviceName}} dependencies for upload
inputs: # inputs:
Contents: '${{parameters.dependenciesArtifacts}}' # Contents: '${{parameters.dependenciesArtifacts}}'
TargetFolder: '$(Build.ArtifactStagingDirectory)' # TargetFolder: '$(Build.ArtifactStagingDirectory)'
- task: PublishBuildArtifacts@1 # - task: PublishBuildArtifacts@1
displayName: Upload ${{parameters.serviceName}} dependencies as artifacts # displayName: Upload ${{parameters.serviceName}} dependencies as artifacts
inputs: # inputs:
PathtoPublish: '$(Build.ArtifactStagingDirectory)' # PathtoPublish: '$(Build.ArtifactStagingDirectory)'
ArtifactName: '${{parameters.serviceName}}-dependencies' # ArtifactName: '${{parameters.serviceName}}-dependencies'
publishLocation: 'Container' # publishLocation: 'Container'

View File

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