forked from docker-training/kube-native
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathJenkinsfile-testing
88 lines (83 loc) · 4.3 KB
/
Jenkinsfile-testing
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
pipeline {
agent any
environment {
MSR_FQDN_PORT='ec2-18-196-126-116.eu-central-1.compute.amazonaws.com:4443'
}
stages {
stage('Unit') {
environment {
MSR_ACCESS_KEY = credentials('jenkins-msr-access-token')
}
steps {
sh 'docker --context=testserver login -u jenkins -p ${MSR_ACCESS_KEY} ${MSR_FQDN_PORT}'
sh 'docker --context=testserver image pull ${MSR_FQDN_PORT}/engineering/api-test:${TAG}'
sh 'kubectl run $(echo $TAG | tr . -) \
-n testing \
--restart=Never --attach=True \
--overrides=\'{"apiVersion": "v1", "spec": {"nodeSelector": { "kubernetes.io/hostname": "testing" }}}\' \
--image=${MSR_FQDN_PORT}/engineering/api-test:${TAG}'
}
}
stage('Integration') {
environment {
MSR_ACCESS_KEY = credentials('jenkins-msr-access-token')
MAJORMINOR = '0.0'
}
steps {
// deploy our application for integration testing
sh 'BUILDNO=$(echo ${TAG} | sed "s/.*\\.//"); \
helm install integrationtest --namespace testing --wait helm --set API.tag=rc-${MAJORMINOR}.${BUILDNO} --set environment.host=testing'
// make sure all pods are up before we try to run the integration tests
sh 'DBPOD=$(kubectl get pod -l app=db -n testing -o jsonpath="{.items[0].metadata.name}"); \
APIPOD=$(kubectl get pod -l app=api -n testing -o jsonpath="{.items[0].metadata.name}"); \
kubectl wait --timeout=60s --for=condition=Ready pod/${DBPOD} -n testing; \
kubectl wait --timeout=60s --for=condition=Ready pod/${APIPOD} -n testing'
// run integration tests
sh 'BUILDNO=$(echo ${TAG} | sed "s/.*\\.//"); \
kubectl run integration-${BUILDNO} \
--image ${MSR_FQDN_PORT}/engineering/api-build:integration-${MAJORMINOR}.${BUILDNO} \
-n testing --restart=Never --attach=True;'
}
}
stage('Finalization') {
environment {
MSR_ACCESS_KEY=credentials('jenkins-msr-access-token')
MAJORMINOR = '0.0'
DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE=credentials('jenkins-content-trust')
JENKINS_PK=credentials('jenkins-key')
MSR_CA=credentials('msr-ca')
}
steps {
sh 'docker --context=stageserver login -u jenkins -p ${MSR_ACCESS_KEY} ${MSR_FQDN_PORT} ; \
BUILDNO=$(echo ${TAG} | sed "s/.*\\.//"); \
curl -k https://${MSR_FQDN_PORT}/ca \
-o /usr/local/share/ca-certificates/${MSR_FQDN_PORT}.crt ; \
update-ca-certificates; \
docker --context=stageserver trust key load ${JENKINS_PK}; \
docker --context=stageserver image pull \
${MSR_FQDN_PORT}/engineering/api-build:rc-${MAJORMINOR}.${BUILDNO}; \
docker --context=stageserver image tag \
${MSR_FQDN_PORT}/engineering/api-build:rc-${MAJORMINOR}.${BUILDNO} \
${MSR_FQDN_PORT}/engineering/api:${MAJORMINOR}.${BUILDNO} ; \
docker --context=stageserver trust sign ${MSR_FQDN_PORT}/engineering/api:${MAJORMINOR}.${BUILDNO} ; \
sed -i "s|api-build|api|g" helm/values.yaml ; \
sed -i "s|\'demo\'|${MAJORMINOR}.${BUILDNO}|g" helm/values.yaml ; \
helm package --version ${MAJORMINOR}.${BUILDNO} --destination releases helm ; \
helm push releases/demochart-${MAJORMINOR}.${BUILDNO}.tgz https://${MSR_FQDN_PORT}/charts/engineering/api --username jenkins --password ${MSR_ACCESS_KEY} --ca-file ${MSR_CA}'
}
}
stage('Deploy') {
steps {
sh 'BUILDNO=$(echo ${TAG} | sed "s/.*\\.//"); \
cd releases; \
helm install final --namespace staging demochart-0.0.${BUILDNO}.tgz'
}
}
}
post {
always{
sh 'rm -rf ${WORKSPACE}/* ; \
helm uninstall integrationtest --namespace testing'
}
}
}