Skip to content

Commit b69fd3c

Browse files
[Feature][Change] Updated azure devops ci pipeline (#15)
* Added few security steps in azure pipline Signed-off-by: iamabhishek-dubey <abhishekbhardwaj510@gmail.com>
1 parent 7688cfc commit b69fd3c

File tree

4 files changed

+108
-6
lines changed

4 files changed

+108
-6
lines changed

.azure-pipelines/pipeline.yml

+61-6
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,17 @@ variables:
1313
stages:
1414
- stage: precheck
1515
jobs:
16+
- job: gofmt
17+
dependsOn: []
18+
pool:
19+
vmImage: "ubuntu-18.04"
20+
steps:
21+
- task: GoTool@0
22+
displayName: "Installing Golang"
23+
inputs:
24+
version: '1.16'
25+
- script: scripts/gofmt.sh
26+
displayName: "Executing gofmt"
1627
- job: govet
1728
dependsOn: []
1829
pool:
@@ -45,7 +56,7 @@ stages:
4556
./bin/golangci-lint run --timeout 5m0s ./...
4657
displayName: "Executing golang-ci lint"
4758
48-
- stage: dockerfile_lint
59+
- stage: container_quality
4960
dependsOn: ["precheck"]
5061
jobs:
5162
- job: dockerfile_lint
@@ -88,7 +99,7 @@ stages:
8899
publishLocation: 'Container'
89100

90101
- stage: build_image
91-
dependsOn: ["dockerfile_lint"]
102+
dependsOn: ["container_quality"]
92103
jobs:
93104
- job: linux_amd64
94105
dependsOn: []
@@ -99,9 +110,53 @@ stages:
99110
command: 'build'
100111
Dockerfile: '**/Dockerfile'
101112
tags: '$(Build.BuildId)'
113+
repository: 'k8s-vault-webhook'
114+
- script: |
115+
mkdir -p $(Build.ArtifactStagingDirectory)/image
116+
docker save -o $(Build.ArtifactStagingDirectory)/image/k8s-vault-webhook.tar k8s-vault-webhook:$(Build.BuildId)
117+
displayName: "Archiving docker image"
118+
- task: PublishBuildArtifacts@1
119+
inputs:
120+
PathtoPublish: '$(Build.ArtifactStagingDirectory)/image'
121+
ArtifactName: 'drop'
122+
publishLocation: 'Container'
123+
124+
- stage: code_security
125+
dependsOn: ["build"]
126+
jobs:
127+
- job: gosec
128+
dependsOn: []
129+
steps:
130+
- script: scripts/gosec.sh
131+
displayName: "Execute gosec scan"
132+
- task: PublishTestResults@2
133+
displayName: "Publish test results"
134+
inputs:
135+
testResultsFormat: 'JUnit'
136+
testResultsFiles: './bin/results.xml'
137+
failTaskOnFailedTests: false
138+
testRunTitle: 'GoSec Test Result'
139+
140+
- stage: container_security
141+
dependsOn: ["build_image"]
142+
jobs:
143+
- job: trivy_scan
144+
dependsOn: []
145+
steps:
146+
- task: DownloadBuildArtifacts@0
147+
displayName: "Downloading the image artifact"
148+
inputs:
149+
buildType: 'current'
150+
downloadType: 'single'
151+
artifactName: 'drop'
152+
downloadPath: '$(System.ArtifactsDirectory)'
153+
- script: scripts/trivy-scan.sh
154+
displayName: "Execute trivy scan"
155+
env:
156+
IMAGE_PATH: $(System.ArtifactsDirectory)/drop/k8s-vault-webhook.tar
102157

103158
- stage: release_binaries
104-
dependsOn: ["build", "build_image"]
159+
dependsOn: ["code_security"]
105160
jobs:
106161
- job: goreleaser
107162
dependsOn: []
@@ -115,7 +170,7 @@ stages:
115170
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
116171

117172
- stage: release_quay
118-
dependsOn: ["build", "build_image"]
173+
dependsOn: ["container_security", "code_security"]
119174
jobs:
120175
- job: quay
121176
dependsOn: []
@@ -135,7 +190,7 @@ stages:
135190
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/master'))
136191

137192
- stage: release_github_image
138-
dependsOn: ["build", "build_image"]
193+
dependsOn: ["container_security", "code_security"]
139194
jobs:
140195
- job: github
141196
dependsOn: []
@@ -181,7 +236,7 @@ stages:
181236
displayName: "Executing k8s-vault-webhook"
182237
183238
- stage: docs
184-
dependsOn: ["release_binaries", "release_quay", "release_github_image"]
239+
dependsOn: ["verify"]
185240
jobs:
186241
- job: build
187242
dependsOn: []

scripts/gofmt.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/bash
2+
3+
gofmt_files=$(go fmt ./... | wc -l)
4+
5+
if [[ ${gofmt_files} > 0 ]]
6+
then
7+
echo "Please format golang files using:- go fmt ./..."
8+
exit 1
9+
else
10+
echo "All files are formated using gofmt"
11+
fi

scripts/gosec.sh

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#!/bin/bash
2+
3+
install_gosec() {
4+
curl -sfL https://raw.githubusercontent.com/securego/gosec/master/install.sh | sh -s latest
5+
}
6+
7+
execute_gosec() {
8+
./bin/gosec -fmt=junit-xml -out=./bin/results.xml ./... || true
9+
}
10+
11+
main() {
12+
install_gosec
13+
execute_gosec
14+
}
15+
16+
main

scripts/trivy-scan.sh

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/bash
2+
3+
install_trivy() {
4+
sudo apt-get install wget apt-transport-https gnupg lsb-release -y
5+
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
6+
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
7+
sudo apt-get update
8+
sudo apt-get install trivy -y
9+
}
10+
11+
execute_trivy() {
12+
trivy image --input ${IMAGE_PATH}
13+
}
14+
15+
main() {
16+
install_trivy
17+
execute_trivy
18+
}
19+
20+
main

0 commit comments

Comments
 (0)