forked from danielpenagos/reactjs-shopping-cart
-
Notifications
You must be signed in to change notification settings - Fork 46
/
Copy pathazure-pipelines-devsecops.yml
189 lines (166 loc) · 5.07 KB
/
azure-pipelines-devsecops.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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# Full Scan + Deploy
# Pipeline para realizar análisis de código fuente, build de la imagen y análisis de la imagen de un contenedor
# Se finaliza con la publicación de la aplicación en una Web App en Azure
trigger: none # Disable CI triggers.
#- master
resources:
- repo: self
variables:
# a regular variable
- name: dockerfilePath
value: '$(Build.SourcesDirectory)/Dockerfile'
- name: tag
value: 'latest'
- name: vmImageName
value: 'ubuntu-latest'
# a variable group
- group: Mis_Variables
stages:
# Análisis del código fuente
- stage: CodeSecurityScan
displayName: Code Security Scan
jobs:
# Análisis con Mend
- job: Mend
displayName: Mend
pool:
vmImage: $(vmImageName)
steps:
- task: WhiteSource@21
inputs:
cwd: '$(System.DefaultWorkingDirectory)'
projectName: 'reactjs-shopping-cart'
# Análisis con SonarCloud
- job: SonarCloud
displayName: SonarCloud
pool:
vmImage: $(vmImageName)
steps:
- checkout: self
fetchDepth: 0
- task: SonarCloudPrepare@1
inputs:
SonarCloud: 'SonarCloud_Malevarro'
organization: 'malevarro'
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: 'malevarro_reactjs-shopping-cart'
cliProjectName: 'reactjs-shopping-cart'
cliSources: '.'
- task: SonarCloudAnalyze@1
- task: SonarCloudPublish@1
inputs:
pollingTimeoutSec: '300'
# Análisis con Checkov
- job: Checkov
displayName: Checkov
pool:
vmImage: $(vmImageName)
steps:
- task: Bash@3
displayName: 'Install Checkov CLI'
inputs:
targetType: 'inline'
script: |
echo 'Install Checkov'
pip3 install checkov
mkdir checkov-report
- task: Bash@3
displayName: 'Checkov Dockerfile Analysis'
inputs:
targetType: 'inline'
script: |
checkov -d . --soft-fail --framework all --output junitxml > ./checkov-report/TEST-checkov-IaC-report.xml
- task: PublishTestResults@2
displayName: 'Checkov Dockerfile Report'
inputs:
testResultsFormat: 'JUnit'
testResultsFiles: '**/TEST-checkov-IaC-report.xml'
searchFolder: '$(System.DefaultWorkingDirectory)/checkov-report'
mergeTestResults: false
testRunTitle: 'Checkov Dockerfile Report'
failTaskOnFailedTests: false
publishRunAttachments: true
# Creación de imagen de contenedor
- stage: Build
displayName: Build and push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and push an image to container registry
inputs:
command: buildAndPush
repository: $(WEBAPP_NAME)
dockerfile: $(dockerfilePath)
containerRegistry: $(ACR_Conn)
tags: |
$(tag)
# Análisis de imagen de contenedor
- stage: ImageSecurityScan
displayName: Image Security Analysis
jobs:
# Análisis con Snyk
- job: Snyk
displayName: Snyk
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
inputs:
containerRegistry: $(ACR_Conn)
command: 'login'
- task: SnykSecurityScan@1
inputs:
serviceConnectionEndpoint: $(Snyk_Conn)
testType: 'container'
dockerImageName: $(ACR_NAME)/$(WEBAPP_NAME):latest
dockerfilePath: '$(dockerfilePath)'
monitorWhen: 'always'
failOnIssues: false
# Análisis con Trivy
- job: Trivy
displayName: Trivy
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
inputs:
containerRegistry: $(ACR_Conn)
command: 'login'
- task: trivy@1
inputs:
version: 'latest'
debug: true
loginDockerConfig: true
image: '$(ACR_NAME)/$(WEBAPP_NAME):latest'
exitCode: '0'
#Publicando la aplicacion en Azure
- stage: DeployWebApp
displayName: Deploy Web App
jobs:
- job: Deploy
displayName: Deploy
pool:
vmImage: $(vmImageName)
steps:
- task: AzureRmWebAppDeployment@4
displayName: Deploy Web App
inputs:
ConnectionType: 'AzureRM'
azureSubscription: $(Azure_Conn)
appType: 'webAppContainer'
WebAppName: $(WEBAPP_NAME)
DockerNamespace: '$(ACR_NAME)'
DockerRepository: '$(WEBAPP_NAME)'
DockerImageTag: '$(tag)'
AppSettings: '-port 3000'
- task: AzureAppServiceManage@0
displayName: Restart App Service
inputs:
azureSubscription: $(Azure_Conn)
Action: 'Restart Azure App Service'
WebAppName: $(WEBAPP_NAME)