diff --git a/build/azure-devops/apigws/azure-pipelines.yml b/build/azure-devops/apigws/azure-pipelines.yml new file mode 100644 index 000000000..f2399b341 --- /dev/null +++ b/build/azure-devops/apigws/azure-pipelines.yml @@ -0,0 +1,32 @@ +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/ApiGateways/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/apigws/* + - deploy/k8s/helm/apigwmm/* + - deploy/k8s/helm/apigwms/* + - deploy/k8s/helm/apigwwm/* + - deploy/k8s/helm/apigwws/* + exclude: + - src/ApiGateways/Mobile.Bff.Shopping/aggregator/* + - src/ApiGateways/Web.Bff.Shopping/aggregator/* +jobs: +- job: PublishCharts + condition: ne('$(Build.Reason)', 'PullRequest') + pool: + vmImage: 'ubuntu-16.04' + steps: + - task: CopyFiles@2 + inputs: + sourceFolder: $(Build.SourcesDirectory)/deploy/k8s/helm + targetFolder: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm + artifactName: helm diff --git a/build/azure-devops/basket-api/azure-pipelines.yml b/build/azure-devops/basket-api/azure-pipelines.yml new file mode 100644 index 000000000..8aa99a9be --- /dev/null +++ b/build/azure-devops/basket-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Basket/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/basket-api/* + - deploy/k8s/helm/basket-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: basket-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: basket.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/buildimages.yaml b/build/azure-devops/buildimages.yaml new file mode 100644 index 000000000..2e58cad21 --- /dev/null +++ b/build/azure-devops/buildimages.yaml @@ -0,0 +1,94 @@ +parameters: + services: '' + registryEndpoint: '' + helmfrom: '' + helmto: '' + +jobs: +- job: BuildContainersForPR_Linux + condition: eq('${{ variables['Build.Reason'] }}', 'PullRequest') + pool: + vmImage: 'ubuntu-16.04' + steps: + - bash: docker-compose -f src/docker-compose.yml build ${{ parameters.services }} + displayName: Compose build ${{ parameters.services }} + env: + TAG: ${{ variables['Build.SourceBranchName'] }} +- job: BuildContainersForPR_Windows + condition: False + # condition: eq('${{ variables['Build.Reason'] }}', 'PullRequest') + pool: + vmImage: 'windows-2019' + steps: + - bash: docker-compose f src/docker-compose.yml build ${{ parameters.services }} + displayName: Compose build ${{ parameters.services }} + env: + TAG: ${{ variables['Build.SourceBranchName'] }} + PLATFORM: win + NODE_IMAGE: stefanscherer/node-windows:10 +- job: BuildLinux + condition: ne('${{ variables['Build.Reason'] }}', 'PullRequest') + pool: + vmImage: 'ubuntu-16.04' + steps: + - task: DockerCompose@0 + displayName: Compose build ${{ parameters.services }} + inputs: + dockerComposeCommand: 'build ${{ parameters.services }}' + containerregistrytype: Container Registry + dockerRegistryEndpoint: ${{ parameters.registryEndpoint }} + dockerComposeFile: src/docker-compose.yml + qualifyImageNames: true + projectName: "" + dockerComposeFileArgs: | + TAG=${{ variables['Build.SourceBranchName'] }} + - task: DockerCompose@0 + displayName: Compose push ${{ parameters.images }} + inputs: + dockerComposeCommand: 'push ${{ parameters.services }}' + containerregistrytype: Container Registry + dockerRegistryEndpoint: ${{ parameters.registryEndpoint }} + dockerComposeFile: src/docker-compose.yml + qualifyImageNames: true + projectName: "" + dockerComposeFileArgs: | + TAG=${{ variables['Build.SourceBranchName'] }} + - task: CopyFiles@2 + inputs: + sourceFolder: ${{ parameters.helmfrom }} + targetFolder: ${{ parameters.helmto }} + - task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: ${{ parameters.helmto }} + artifactName: helm +- job: BuildWindows + condition: False + # condition: ne('${{ variables['Build.Reason'] }}', 'PullRequest') + pool: + vmImage: 'windows-2019' + steps: + - task: DockerCompose@0 + displayName: Compose build ${{ parameters.services }} + inputs: + dockerComposeCommand: 'build ${{ parameters.services }}' + containerregistrytype: Container Registry + dockerRegistryEndpoint: ${{ parameters.registryEndpoint }} + dockerComposeFile: src/docker-compose.yml + qualifyImageNames: true + projectName: "" + dockerComposeFileArgs: | + TAG=${{ variables['Build.SourceBranchName'] }} + PLATFORM=win + NODE_IMAGE=stefanscherer/node-windows:10 + - task: DockerCompose@0 + displayName: Compose push ${{ parameters.services }} + inputs: + dockerComposeCommand: 'push ${{ parameters.services }}' + containerregistrytype: Container Registry + dockerRegistryEndpoint: ${{ parameters.registryEndpoint }} + dockerComposeFile: src/docker-compose.yml + qualifyImageNames: true + projectName: "" + dockerComposeFileArgs: | + TAG=${{ variables['Build.SourceBranchName'] }} + PLATFORM=win diff --git a/build/azure-devops/catalog-api/azure-pipelines.yml b/build/azure-devops/catalog-api/azure-pipelines.yml new file mode 100644 index 000000000..b22146ec8 --- /dev/null +++ b/build/azure-devops/catalog-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Catalog/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/catalog-api/* + - deploy/k8s/helm/catalog-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: catalog-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: catalog.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/identity-api/azure-pipelines.yml b/build/azure-devops/identity-api/azure-pipelines.yml new file mode 100644 index 000000000..e3dc070b8 --- /dev/null +++ b/build/azure-devops/identity-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Identity/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/identity-api/* + - deploy/k8s/helm/identity-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: identity-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: identity.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/infrastructure/azure-pipelines.yml b/build/azure-devops/infrastructure/azure-pipelines.yml new file mode 100644 index 000000000..214e56d37 --- /dev/null +++ b/build/azure-devops/infrastructure/azure-pipelines.yml @@ -0,0 +1,28 @@ +pool: + vmImage: 'ubuntu-16.04' +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/infrastructure/* + - deploy/k8s/helm/basket-data/* + - deploy/k8s/helm/keystore-data/* + - deploy/k8s/helm/nosql-data/* + - deploy/k8s/helm/rabbitmq/* + - deploy/k8s/helm/sql-data/* +steps: +- task: CopyFiles@2 + inputs: + sourceFolder: $(Build.SourcesDirectory)/deploy/k8s/helm + targetFolder: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- task: PublishBuildArtifacts@1 + inputs: + pathtoPublish: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm + artifactName: helm diff --git a/build/azure-devops/location-api/azure-pipelines.yml b/build/azure-devops/location-api/azure-pipelines.yml new file mode 100644 index 000000000..d6b87e881 --- /dev/null +++ b/build/azure-devops/location-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Location/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/location-api/* + - deploy/k8s/helm/locations-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: locations-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: locations.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/marketing-api/azure-pipelines.yml b/build/azure-devops/marketing-api/azure-pipelines.yml new file mode 100644 index 000000000..5b253e1c1 --- /dev/null +++ b/build/azure-devops/marketing-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Marketing/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/marketing-api/* + - deploy/k8s/helm/marketing-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: marketing-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: marketing.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/mobile-shopping-agg/azure-pipelines.yml b/build/azure-devops/mobile-shopping-agg/azure-pipelines.yml new file mode 100644 index 000000000..878f064b5 --- /dev/null +++ b/build/azure-devops/mobile-shopping-agg/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/ApiGateways/Mobile.Bff.Shopping/aggregator/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/mobile-shopping-agg/* + - deploy/k8s/helm/mobileshoppingagg/* +jobs: +- template: ../buildimages.yaml + parameters: + services: mobileshoppingagg + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: mobileshoppingagg + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) + diff --git a/build/azure-devops/multiarch.yaml b/build/azure-devops/multiarch.yaml new file mode 100644 index 000000000..1639fff87 --- /dev/null +++ b/build/azure-devops/multiarch.yaml @@ -0,0 +1,33 @@ +parameters: + image: '' + branch: '' + registry: 'eshop' + registryEndpoint: '' + +jobs: +- job: manifest + condition: and(succeeded(),ne('${{ variables['Build.Reason'] }}', 'PullRequest')) + dependsOn: + # - BuildWindows + - BuildLinux + pool: + vmImage: 'Ubuntu 16.04' + steps: + - task: Docker@1 + displayName: Docker Login + inputs: + command: login + containerregistrytype: 'Container Registry' + dockerRegistryEndpoint: ${{ parameters.registryEndpoint }} + # Disabled windows deploy + # docker --config ~/.docker manifest create ${{ parameters.registry }}/${{ parameters.image }}:${{ parameters.branch }} ${{ parameters.registry }}/${{ parameters.image }}:linux-${{ parameters.branch }} ${{ parameters.registry }}/${{ parameters.image }}:win-${{ parameters.branch }} + # docker --config ~/.docker manifest create ${{ parameters.registry }}/${{ parameters.image }}:latest ${{ parameters.registry }}/${{ parameters.image }}:linux-latest ${{ parameters.registry }}/${{ parameters.image }}:win-latest + - bash: | + mkdir -p ~/.docker + sed '$ s/.$//' $DOCKER_CONFIG/config.json > ~/.docker/config.json + echo ',"experimental": "enabled" }' >> ~/.docker/config.json + docker --config ~/.docker manifest create ${{ parameters.registry }}/${{ parameters.image }}:${{ parameters.branch }} ${{ parameters.registry }}/${{ parameters.image }}:linux-${{ parameters.branch }} + docker --config ~/.docker manifest create ${{ parameters.registry }}/${{ parameters.image }}:latest ${{ parameters.registry }}/${{ parameters.image }}:linux-latest + docker --config ~/.docker manifest push ${{ parameters.registry }}/${{ parameters.image }}:${{ parameters.branch }} + docker --config ~/.docker manifest push ${{ parameters.registry }}/${{ parameters.image }}:latest + displayName: Create multiarch manifest diff --git a/build/azure-devops/ordering-api/azure-pipelines.yml b/build/azure-devops/ordering-api/azure-pipelines.yml new file mode 100644 index 000000000..d11c4e270 --- /dev/null +++ b/build/azure-devops/ordering-api/azure-pipelines.yml @@ -0,0 +1,29 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Ordering/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/ordering-api/* + - deploy/k8s/helm/ordering-api/* + - deploy/k8s/helm/ordering-backgroundtasks/* + - deploy/k8s/helm/ordering-signalrhub/* +jobs: +- template: ../buildimages.yaml + parameters: + services: ordering-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: ordering.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/payment-api/azure-pipelines.yml b/build/azure-devops/payment-api/azure-pipelines.yml new file mode 100644 index 000000000..6acdec6d3 --- /dev/null +++ b/build/azure-devops/payment-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Payment/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/payment-api/* + - deploy/k8s/helm/payment-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: payment-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: payment.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/readme.md b/build/azure-devops/readme.md new file mode 100644 index 000000000..03680be34 --- /dev/null +++ b/build/azure-devops/readme.md @@ -0,0 +1,5 @@ +# Azure DevOps build definitions + +This folder contains the Azure DevOps build definitions in YAML format. Each folder contains one `azure-pipelines.yml` that contains the build definition for one microservice (usually a Docker image, but some microservices generates more than one Docker image). + +For more information about YAML builds read the [Azure DevOps documentation](https://docs.microsoft.com/azure/devops/pipelines/get-started-yaml?view=azure-devops). \ No newline at end of file diff --git a/build/azure-devops/web-shopping-agg/azure-pipelines.yml b/build/azure-devops/web-shopping-agg/azure-pipelines.yml new file mode 100644 index 000000000..6537591cd --- /dev/null +++ b/build/azure-devops/web-shopping-agg/azure-pipelines.yml @@ -0,0 +1,26 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/ApiGateways/Web.Bff.Shopping/aggregator/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/web-shopping-agg/* + - deploy/k8s/helm/webshoppingagg/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webshoppingagg + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webshoppingagg + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/webhooks-api/azure-pipelines.yml b/build/azure-devops/webhooks-api/azure-pipelines.yml new file mode 100644 index 000000000..d5e679c90 --- /dev/null +++ b/build/azure-devops/webhooks-api/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Services/Webhooks/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/webhooks-api/* + - deploy/k8s/helm/webhooks-api/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webhooks-api + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webhooks.api + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/webhooks-client/azure-pipelines.yml b/build/azure-devops/webhooks-client/azure-pipelines.yml new file mode 100644 index 000000000..f12a38487 --- /dev/null +++ b/build/azure-devops/webhooks-client/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Web/WebhookClient/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/webhooks-client/* + - deploy/k8s/helm/webhooks-web/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webhooks-client + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webhooks.client + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) diff --git a/build/azure-devops/webmvc/azure-pipelines.yml b/build/azure-devops/webmvc/azure-pipelines.yml new file mode 100644 index 000000000..cd2fba59c --- /dev/null +++ b/build/azure-devops/webmvc/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Web/WebMVC/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/webmvc/* + - deploy/k8s/helm/webmvc/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webmvc + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webmvc + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/webspa/azure-pipelines.yml b/build/azure-devops/webspa/azure-pipelines.yml new file mode 100644 index 000000000..aefced84a --- /dev/null +++ b/build/azure-devops/webspa/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Web/WebSPA/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/webspa/* + - deploy/k8s/helm/webspa/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webspa + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webspa + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file diff --git a/build/azure-devops/webstatus/azure-pipelines.yml b/build/azure-devops/webstatus/azure-pipelines.yml new file mode 100644 index 000000000..eeb8c15a1 --- /dev/null +++ b/build/azure-devops/webstatus/azure-pipelines.yml @@ -0,0 +1,27 @@ +variables: + registryEndpoint: eshop-registry +trigger: + branches: + include: + - master + - dev + paths: + include: + - src/BuildingBlocks/* + - src/Web/WebStatus/* + - build/azure-devops/buildimages.yml + - build/azure-devops/multiarch.yml + - build/azure-devops/webstatus/* + - deploy/k8s/helm/webstatus/* +jobs: +- template: ../buildimages.yaml + parameters: + services: webstatus + registryEndpoint: $(registryEndpoint) + helmfrom: $(Build.SourcesDirectory)/deploy/k8s/helm + helmto: $(Build.ArtifactStagingDirectory)/deploy/k8s/helm +- template: ../multiarch.yaml + parameters: + image: webstatus + branch: $(Build.SourceBranchName) + registryEndpoint: $(registryEndpoint) \ No newline at end of file