forked from ita-social-projects/EPlast
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathazure-pipelines-prod.yml
140 lines (132 loc) · 4.34 KB
/
azure-pipelines-prod.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# Deploy to Azure Kubernetes Service
# Build and push image to Azure Container Registry; Deploy to Azure Kubernetes Service
# https://docs.microsoft.com/azure/devops/pipelines/languages/docker
variables:
- group: EPlast-PROD
# Container registry service connection established during pipeline creation
- name: dockerRegistryServiceConnection
value: '6ed81c59-e17e-4f6e-b772-e7a2b4d0d06f'
- name: imageRepository
value: 'eplastbackend'
- name: containerRegistry
value: 'eplastregistry.azurecr.io'
- name: dockerfilePath
value: '**/Dockerfile'
- name: tag
value: '$(Build.BuildId)'
- name: imagePullSecret
value: 'eplastregistryd27e-auth'
- name: k8sNamespaceForPR
value: 'review-app-$(System.PullRequest.PullRequestId)'
- name: vmImageName
value: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build
inputs:
command: build
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
repository: $(imageRepository)
tags: |
$(tag)
arguments: --build-arg ASPNETCORE_ENVIRONMENT=$(Aspnetcore_Environment)
- upload: manifests
artifact: manifests
- task: Docker@2
displayName: Push
inputs:
command: push
containerRegistry: $(dockerRegistryServiceConnection)
repository: $(imageRepository)
tags: |
$(tag)
- upload: manifests
artifact: manifests
- stage: Test
displayName: Test stage
dependsOn: []
jobs:
- job: Test
displayName: Test
pool:
vmImage: 'windows-2022'
steps:
- task: DotNetCoreCLI@2
displayName: Restore
inputs:
command: restore
projects: 'EPlast/EPlast.sln'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
projects: 'EPlast/EPlast.sln'
arguments: '--configuration $(BuildConfiguration)'
- task: DotNetCoreCLI@2
displayName: 'Add package coverlet.msbuild'
inputs:
command: custom
projects: |
EPlast/EPlast.XUnitTest/EPlast.XUnitTest.csproj
EPlast/EPlast.Tests/EPlast.Tests.csproj
custom: add
arguments: 'package coverlet.msbuild'
- task: DotNetCoreCLI@2
displayName: Test
inputs:
command: test
projects: |
EPlast/EPlast.XUnitTest/EPlast.XUnitTest.csproj
EPlast/EPlast.Tests/EPlast.Tests.csproj
arguments: '--configuration $(BuildConfiguration) /p:CollectCoverage=true /p:CoverletOutputFormat=opencover /p:Include="[EPlast.WebApi]*Controllers*%2c[EPlast.BLL]*Services*%2c[EPlast.BLL]*Handlers*" /p:Exclude="[EPlast.XUnitTest]*%2c[EPlast.Tests]*" --logger trx'
publishTestResults: false
- stage: Deploy
displayName: Deploy stage
dependsOn:
- Build
- Test
jobs:
- deployment: Deploy
condition: and(succeeded(), not(startsWith(variables['Build.SourceBranch'], 'refs/pull/')))
displayName: Deploy
pool:
vmImage: $(vmImageName)
environment: 'EPlast.eplast'
strategy:
runOnce:
deploy:
steps:
- task: qetza.replacetokens.replacetokens-task.replacetokens@3
displayName: Replace tokens in **/*
inputs:
rootDirectory: $(Pipeline.Workspace)/manifests
targetFiles: '**/*.yml'
keepToken: true
tokenPrefix: ___
tokenSuffix: ___
- task: KubernetesManifest@0
displayName: Create imagePullSecret
inputs:
action: 'createSecret'
kubernetesServiceConnection: 'Eplast-PROD-Kubernetes'
secretType: 'dockerRegistry'
secretName: '$(imagePullSecret)'
dockerRegistryEndpoint: '$(dockerRegistryServiceConnection)'
- task: KubernetesManifest@0
displayName: Deploy to Kubernetes cluster
inputs:
action: 'deploy'
kubernetesServiceConnection: 'Eplast-PROD-Kubernetes'
manifests: |
$(Pipeline.Workspace)/manifests/prod/deployment.yml
$(Pipeline.Workspace)/manifests/prod/ingress-prod.yml
containers: '$(containerRegistry)/$(imageRepository):$(tag)'
imagePullSecrets: '$(imagePullSecret)'