deployServicePipeline.yaml (151 lines of code) (raw):
# Run a Bash script on macOS, Linux, or Windows
jobs:
- job: mygreeterv3TestCoverage
displayName: "[mygreeterv3] Generate test coverage reports"
pool:
vmImage: "ubuntu-latest"
steps:
- task: GoTool@0
inputs:
version: '1.23.2'
- task: Bash@3
displayName: Test Suite Check
inputs:
targetType: "filePath"
filePath: mygreeterv3/server/test/testSuites.sh
failOnStderr: false
- task: Bash@3
displayName: Test Coverage for Output
inputs:
targetType: "filePath"
filePath: mygreeterv3/server/test/testCoverageOutput.sh
failOnStderr: false
env:
threshold: 5
READPAT: $(READPAT)
- task: PublishPipelineArtifact@1
displayName: "Publish test coverage as an artifact"
inputs:
targetPath: "mygreeterv3/server/test/coverage_reports"
artifactName: mygreeterv3_CoverageReports
- job: mygreeterv3BuildImage
displayName: "[mygreeterv3] Build image"
pool:
vmImage: "ubuntu-latest"
dependsOn:
#This job is mentioned in main pipeline yaml file (within pipeline files directory)
- GenerateAndPublishEnvConfig
steps:
- template: ../pipeline-files/downloadRequirements.yaml
#TODO: Change this to split build and push, when build option is available instead of buildx.
- task: Bash@3
displayName: Build image
inputs:
targetType: "filePath"
filePath: mygreeterv3/server/test/buildImage.sh
failOnStderr: false
env:
WORKSPACE: false
READPAT: $(READPAT)
- task: PublishPipelineArtifact@1
displayName: "Publish docker image as an artifact"
inputs:
targetPath: "mygreeterv3/server/generated/mygreeterv3-image.tar"
artifactName: mygreeterv3-image
- job: mygreeterv3BuildWorkspaceImage
displayName: "[mygreeterv3] Build go workspace image"
pool:
vmImage: "ubuntu-latest"
dependsOn:
#This job is mentioned in main pipeline yaml file (within pipeline files directory)
- GenerateAndPublishEnvConfig
steps:
- template: ../pipeline-files/downloadRequirements.yaml
#TODO: Change this to split build and push, when build option is available instead of buildx.
- task: Bash@3
displayName: Build go workspace image
inputs:
targetType: "filePath"
filePath: mygreeterv3/server/test/buildImage.sh
failOnStderr: false
env:
WORKSPACE: true
READPAT: $(READPAT)
- job: mygreeterv3PushImage
displayName: "[mygreeterv3] Push image"
pool:
vmImage: "ubuntu-latest"
dependsOn:
#This job is mentioned in main pipeline yaml file (within pipeline files directory)
- ProvisionSharedResources
- mygreeterv3BuildImage
steps:
- template: ../pipeline-files/downloadRequirements.yaml
- task: DownloadPipelineArtifact@2
displayName: "Download docker image artifact"
inputs:
artifactName: mygreeterv3-image
targetPath: "$(System.DefaultWorkingDirectory)/mygreeterv3/server/generated/"
- task: AzureCLI@2
displayName: Push image
inputs:
# azureSubscription corresponds to the name of the azure resource manager service
# connection that is supposed to be used for the pipeline task.
azureSubscription: ServiceHubValidation_ServiceConnection
scriptType: "bash"
scriptLocation: "scriptPath"
scriptPath: mygreeterv3/server/test/pushImage.sh
- job: mygreeterv3ProvisionServiceResources
displayName: "[mygreeterv3] Provision service specific resources"
pool:
vmImage: "ubuntu-latest"
dependsOn:
#This job is mentioned in main pipeline yaml file (within pipeline files directory)
- ProvisionSharedResources
steps:
- template: ../pipeline-files/downloadRequirements.yaml
- task: AzureCLI@2
displayName: Provision service specific resources
inputs:
# azureSubscription corresponds to the name of the azure resource manager service
# connection that is supposed to be used for the pipeline task.
azureSubscription: ServiceHubValidation_ServiceConnection
scriptType: "bash"
scriptLocation: "scriptPath"
scriptPath: mygreeterv3/server/test/provisionServiceResources.sh
# If we re-add make service into deploy-resources, these arguments will
# be needed for pipeline to successfully access the private repository.
# arguments: $(READPAT)
- task: PublishPipelineArtifact@1
displayName: "Publish artifact directory"
inputs:
targetPath: "mygreeterv3/server/artifacts"
artifactName: mygreeterv3_ArtifactDirectory
- task: PublishPipelineArtifact@1
displayName: "Publish adx dashboard as an artifact"
inputs:
targetPath: "mygreeterv3/server/monitoring/dashboard/adx-dashboard.json"
artifactName: mygreeterv3-dashboard
- task: Bash@3
displayName: Prepare all markdown files to publish
inputs:
targetType: "inline"
script: |
cd mygreeterv3/server
mkdir markdown_files
if ls resources/**/*.md 1> /dev/null 2>&1; then
find resources -name "*.md" -not -name "ai-summary.md" -exec mv {} markdown_files \;
fi
failOnStderr: false
- task: PublishPipelineArtifact@1
displayName: "Publish service specific resource markdown files"
inputs:
targetPath: "mygreeterv3/server/markdown_files"
artifactName: mygreeterv3_SpecificResourceMarkdownFiles
- job: mygreeterv3DeployService
displayName: "[mygreeterv3] Deploy Service"
pool:
vmImage: "ubuntu-latest"
dependsOn:
- mygreeterv3PushImage
- mygreeterv3ProvisionServiceResources
steps:
- template: ../pipeline-files/downloadRequirements.yaml
- task: DownloadPipelineArtifact@2
displayName: "Download artifact directory"
inputs:
artifactName: mygreeterv3_ArtifactDirectory
targetPath: "$(System.DefaultWorkingDirectory)/mygreeterv3/server/artifacts"
- task: AzureCLI@2
displayName: Deploy and test service
inputs:
# azureSubscription corresponds to the name of the azure resource manager service
# connection that is supposed to be used for the pipeline task.
azureSubscription: ServiceHubValidation_ServiceConnection
scriptType: "bash"
scriptLocation: "scriptPath"
scriptPath: mygreeterv3/server/test/deployService.sh