ci(azure-pipelines): restructure pipeline workflow
This commit is contained in:
parent
ba7b2de4cf
commit
ef9f4a9345
@ -8,6 +8,9 @@ parameters:
|
|||||||
- name: releaseEndpoint
|
- name: releaseEndpoint
|
||||||
type: string
|
type: string
|
||||||
default: 'devfra'
|
default: 'devfra'
|
||||||
|
values:
|
||||||
|
- 'devfra'
|
||||||
|
- 'prodfra'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
- job: Release
|
- job: Release
|
||||||
@ -37,8 +40,8 @@ jobs:
|
|||||||
script: |
|
script: |
|
||||||
cp docker/fradrive/Dockerfile .
|
cp docker/fradrive/Dockerfile .
|
||||||
docker build \
|
docker build \
|
||||||
--tag $(imageUpstream)/fradrive:$(Build.BuildNumber) \
|
--tag $(buildImageUpstream)/fradrive:$(Build.BuildNumber) \
|
||||||
--tag $(imageUpstream)/fradrive:${{parameters.releaseTag}} \
|
--tag $(buildImageUpstream)/fradrive:${{parameters.releaseTag}} \
|
||||||
--build-arg FROM_IMG=devfra.azurecr.io/de.fraport.trusted/ubuntu \
|
--build-arg FROM_IMG=devfra.azurecr.io/de.fraport.trusted/ubuntu \
|
||||||
--build-arg FROM_TAG=20.04 \
|
--build-arg FROM_TAG=20.04 \
|
||||||
--build-arg PROJECT_DIR=$(Build.Repository.LocalPath) \
|
--build-arg PROJECT_DIR=$(Build.Repository.LocalPath) \
|
||||||
81
.azure-pipelines/templates/jobs/setup_dependencies.yaml
Normal file
81
.azure-pipelines/templates/jobs/setup_dependencies.yaml
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
# SPDX-FileCopyrightText: 2024-2025 Sarah Vaupel <sarah.vaupel@uniworx.de>
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
|
||||||
|
parameters:
|
||||||
|
- name: service
|
||||||
|
type: string
|
||||||
|
- name: dependenciesArtifacts
|
||||||
|
type: string
|
||||||
|
- name: dependenciesBuildPool
|
||||||
|
type: string
|
||||||
|
default: 'Prod Private Agent Pool'
|
||||||
|
values:
|
||||||
|
- 'Prod Private Agent Pool'
|
||||||
|
- 'Prod Private Agent Pool DS2'
|
||||||
|
- 'Prod Private Agent Pool DS3'
|
||||||
|
- name: dependenciesBuildTimeout
|
||||||
|
type: number
|
||||||
|
default: 60
|
||||||
|
- name: dependenciesSource
|
||||||
|
type: string
|
||||||
|
default: 'current'
|
||||||
|
values:
|
||||||
|
- 'current'
|
||||||
|
- 'specific'
|
||||||
|
- name: dependenciesVersion
|
||||||
|
type: string
|
||||||
|
default: 'latest'
|
||||||
|
values:
|
||||||
|
- 'latest'
|
||||||
|
- 'latestFromBranch'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
- job: SetupDependencies_${{parameters.service}}
|
||||||
|
displayName: Install ${{parameters.service}} dependencies
|
||||||
|
dependsOn: SetupImage_${{parameters.service}}
|
||||||
|
pool: '${{parameters.dependenciesBuildPool}}'
|
||||||
|
container:
|
||||||
|
# TODO: do not use latest on update branches
|
||||||
|
image: $(buildImageUpstream)/${{parameters.service}}:latest
|
||||||
|
endpoint: devfra
|
||||||
|
env:
|
||||||
|
PROJECT_DIR: $(Build.Repository.LocalPath)
|
||||||
|
IN_CONTAINER: true
|
||||||
|
IN_CI: true
|
||||||
|
steps:
|
||||||
|
# Download previously-built dependency artifacts
|
||||||
|
- task: DownloadPipelineArtifact@2
|
||||||
|
displayName: Download previously built ${{parameters.service}} dependencies
|
||||||
|
condition: eq(variables.useCachedDependencies, true)
|
||||||
|
continueOnError: true
|
||||||
|
inputs:
|
||||||
|
artifactName: '${{service}}-dependencies'
|
||||||
|
source: ${{ dependenciesSource }}
|
||||||
|
project: 'Fahrerausbildung' # TODO: hardcoded for now, could not figure out which predefined variable to use
|
||||||
|
pipeline: $(System.DefinitionId)
|
||||||
|
buildVersionToDownload: '${{dependenciesVersion}}'
|
||||||
|
# tags: '${{dependenciesArtifacts}}'
|
||||||
|
allowPartiallySucceededBuilds: true
|
||||||
|
allowFailedBuilds: true
|
||||||
|
patterns: '${{dependenciesArtifacts}}'
|
||||||
|
targetPath: '$(Build.Repository.LocalPath)'
|
||||||
|
|
||||||
|
# Compile dependencies
|
||||||
|
- template: .azure-pipelines/templates/steps/make.yaml
|
||||||
|
parameters:
|
||||||
|
makeJob: dependencies
|
||||||
|
makeService: ${{parameters.service}}
|
||||||
|
|
||||||
|
# Upload newly-built dependencies as artifacts
|
||||||
|
- task: CopyFiles@2
|
||||||
|
displayName: Copy ${{parameters.service}} dependencies for upload
|
||||||
|
inputs:
|
||||||
|
Contents: ${{ parameters.dependenciesArtifacts }}
|
||||||
|
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: Upload ${{parameters.service}} dependencies as artifacts
|
||||||
|
inputs:
|
||||||
|
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
||||||
|
ArtifactName: '${{parameters.service}}-dependencies'
|
||||||
|
publishLocation: 'Container'
|
||||||
@ -19,7 +19,7 @@ parameters:
|
|||||||
steps:
|
steps:
|
||||||
- task: Bash@3
|
- task: Bash@3
|
||||||
name: ${{parameters.makeJob}}_${{parameters.makeService}}
|
name: ${{parameters.makeJob}}_${{parameters.makeService}}
|
||||||
displayName: make ${{parameters.makeJob}} ${{parameters.makeService}}
|
displayName: make ${{parameters.makeJob}}-${{parameters.makeService}}
|
||||||
env:
|
env:
|
||||||
HTTPS_PROXY: http://proxy.frankfurt-airport.de:8080
|
HTTPS_PROXY: http://proxy.frankfurt-airport.de:8080
|
||||||
HTTP_PROXY: http://proxy.frankfurt-airport.de:8080
|
HTTP_PROXY: http://proxy.frankfurt-airport.de:8080
|
||||||
|
|||||||
@ -60,32 +60,67 @@ pool: 'Prod Private Agent Pool'
|
|||||||
|
|
||||||
stages:
|
stages:
|
||||||
|
|
||||||
- ${{ each service in parameters.services }}:
|
- stage: Setup
|
||||||
- template: .azure-pipelines/templates/service.yaml
|
|
||||||
parameters:
|
|
||||||
serviceName: ${{ service.name }}
|
|
||||||
serviceBase: ${{ service.base }}
|
|
||||||
servicePool: ${{ service.pool }}
|
|
||||||
serviceTimeout: ${{ service.timeout }}
|
|
||||||
serviceDependsOn: ${{ service.dependsOn }}
|
|
||||||
serviceRequiredArtifacts: ${{ service.requiredArtifacts }}
|
|
||||||
serviceArtifacts: ${{ service.artifacts }}
|
|
||||||
${{ if eq(variables.skipTests, false) }}:
|
|
||||||
buildSteps:
|
|
||||||
- dependencies
|
|
||||||
- compile
|
|
||||||
- lint
|
|
||||||
- test
|
|
||||||
${{ else }}:
|
|
||||||
buildSteps:
|
|
||||||
- dependencies
|
|
||||||
- compile
|
|
||||||
|
|
||||||
- stage: release
|
|
||||||
condition: or(eq(variables.forceRelease, true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
|
||||||
dependsOn:
|
|
||||||
- backend
|
|
||||||
jobs:
|
jobs:
|
||||||
- template: .azure-pipelines/templates/release.yaml
|
- ${{ each service in parameters.services }}:
|
||||||
|
- template: .azure-pipelines/templates/jobs/setup_image.yaml
|
||||||
|
parameters:
|
||||||
|
imageName: ${{service.name}}
|
||||||
|
imageBase: ${{service.imageBase}}
|
||||||
|
- template: .azure-pipelines/templates/jobs/setup_dependencies.yaml
|
||||||
|
parameters:
|
||||||
|
dependenciesName: ${{service.name}}
|
||||||
|
dependenciesBuildPool: ${{service.buildPool}}
|
||||||
|
dependenciesBuildTimeout: ${{service.buildTimeout}}
|
||||||
|
dependenciesArtifacts: ${{service.dependenciesArtifacts}}
|
||||||
|
|
||||||
|
- stage: Build
|
||||||
|
jobs:
|
||||||
|
- ${{ each service in parameters.services }}:
|
||||||
|
- job: Build_${{service.name}}
|
||||||
|
displayName: Compile ${{service.name}}
|
||||||
|
dependsOn: ${{service.dependsOn}}
|
||||||
|
steps:
|
||||||
|
- template: .azure-pipelines/templates/steps/make.yaml
|
||||||
|
parameters:
|
||||||
|
makeJob: compile
|
||||||
|
makeService: ${{service.name}}
|
||||||
|
- task: CopyFiles@2
|
||||||
|
displayName: Prepare ${{service.name}} build artifacts for upload
|
||||||
|
inputs:
|
||||||
|
Contents: ${{service.artifacts}}
|
||||||
|
TargetFolder: '$(Build.ArtifactStagingDirectory)'
|
||||||
|
- task: PublishBuildArtifacts@1
|
||||||
|
displayName: Publish ${{service.name}} build artifacts
|
||||||
|
inputs:
|
||||||
|
PathtoPublish: '$(Build.ArtifactStagingDirectory)'
|
||||||
|
ArtifactName: '${{service.name}}'
|
||||||
|
publishLocation: 'Container'
|
||||||
|
|
||||||
|
- stage: Test
|
||||||
|
condition: eq(variables.skipTests, false)
|
||||||
|
jobs:
|
||||||
|
- ${{ each service in parameters.services }}:
|
||||||
|
- job: Test_${{service.name}}
|
||||||
|
displayName: Compile ${{service.name}}
|
||||||
|
dependsOn: ${{service.dependsOn}}
|
||||||
|
steps:
|
||||||
|
- template: .azure-pipelines/templates/steps/make.yaml
|
||||||
|
parameters:
|
||||||
|
makeJob: lint
|
||||||
|
makeService: ${{service.name}}
|
||||||
|
- template: .azure-pipelines/templates/steps/make.yaml
|
||||||
|
parameters:
|
||||||
|
makeJob: test
|
||||||
|
makeService: ${{service.name}}
|
||||||
|
- job: TestReport_${{service.name}}
|
||||||
|
displayName: Upload test reports for ${{service.name}}
|
||||||
|
steps:
|
||||||
|
- script: echo "Work in progress" # TODO
|
||||||
|
|
||||||
|
- stage: Release
|
||||||
|
condition: or(eq(variables.forceRelease, true), startsWith(variables['Build.SourceBranch'], 'refs/tags/'))
|
||||||
|
jobs:
|
||||||
|
- template: .azure-pipelines/templates/jobs/release.yaml
|
||||||
parameters:
|
parameters:
|
||||||
releaseTag: ${{split(variables['Build.SourceBranch'], '/')[2]}}
|
releaseTag: ${{split(variables['Build.SourceBranch'], '/')[2]}}
|
||||||
Reference in New Issue
Block a user