рд╣реЕрд▓реЛ рдкреНрд░рддреНрдпреЗрдХрдЬрдг!
рдпрд╛ рд▓реЗрдЦрд╛рдд рдорд▓рд╛ рдЬреЗрдирдХрд┐рдиреНрд╕рдЪрд╛ рдСрдЯреЛрдореЗрд╢рди рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХрд░реВрди OpenShift рдордзреНрдпреЗ JMeter рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдорд╛рд░реНрдЧ рд╕рд╛рдВрдЧрд╛рдпрдЪрд╛ рдЖрд╣реЗ. рдкреНрд░рдердо рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгреЗ рдХрд░реВ (рдирд┐рд░реНрдорд┐рддреА ImageStreams
, BuildConfig
, Job
рдЗ.) рдореЕрдиреНрдпреБрдЕрд▓ рдореЛрдбрдордзреНрдпреЗ. рддреНрдпрд╛рдирдВрддрд░, рдЬреЗрдирдХрд┐рдиреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд▓рд┐рд╣реВ.
рдкреНрд░рд╛рд░рдВрдн рдмрд┐рдВрджреВ рдореНрд╣рдгреВрди рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╣реЗ рдЕрд╕рд╛рд╡реЗ:
- OpenShift (v3.11) рдХреНрд▓рд╕реНрдЯрд░ рдЪрд╛рд▓рд╡рдд рдЖрд╣реЗ
- OpenShift рдордзреНрдпреЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓реНрд╕рд╕рд╣ рдЬреЗрдирдХрд┐рдиреНрд╕ рд╕рд░реНрд╡реНрд╣рд░
- ╤Д╨░╨╣╨╗
apache-jmeter-5.2.tgz
рдЪрд╛рдЪрдгреНрдпрд╛ рдореНрд╣рдгреВрди рддреЗ рд╕реЛрдкреЗ рдЕрд╕реЗрд▓ HTTP Request
рд╡рд░ ya.ru
рдПрдХрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдд.
OpenShift рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░рдгреЗ
рдПрдХ рдирд╡реАрди рд╡рд╛рддрд╛рд╡рд░рдг рддрдпрд╛рд░ рдХрд░реВрди рд╕реБрд░реБрд╡рд╛рдд рдХрд░реВрдпрд╛. рдЪрд▓рд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ perftest
рд╕рдВрдШрд╛рдиреЗ рд╡реЗрдврд▓реЗрд▓реЗ:
$ oc new-project perftest --display-name="Performance Tests" --description="Performance Tests - JMeter"
рдЖрдореНрд╣реА рдирд╡реАрди рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ perftest
, рд╣реЗ рдЕрд╕реЗ рдЖрд╣реЗ рд╣реЗ рддрдкрд╛рд╕реВрдпрд╛:
$ oc project
Using project "perftest" on server "https://127.0.0.1:8443".
рд╕реНрдЯреЛрд░реЗрдЬрдЪреА рдирд┐рд░реНрдорд┐рддреА
рдЪрд╛рдЪрдгреА рдЕрд╣рд╡рд╛рд▓ рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░рд╕рд╣ рдПрдХрддреНрд░рд┐рддрдкрдгреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓ рдЖрдгрд┐ jmeter-meter
'рдПрдХ рдЬрд╛рдЧрд╛ - /jmeter/reports
.
рдЖрддрд╛ рд╕реНрдЯреЛрд░реЗрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЪрд╛рдВрдЧрд▓реЗ рдЖрд╣реЗ, рдХрд╛рд░рдг POD рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рдмрд╛рдВрдзрд▓реЗ рдЬрд╛рддреАрд▓ jmeter-web
╨╕ jmeter-master
.
рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрдзрд┐рдХреГрдд рджрд╕реНрддрдРрд╡рдЬрд╛рдд рд╕реНрдЯреЛрд░реЗрдЬрдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдорд╛рд╣рд┐рддреА рдорд┐рд│реЗрд▓
рд╕рд╛рдареА yaml рдлрд╛рдЗрд▓реНрд╕ рдмрдирд╡реВ PV
╨╕ PVC
.
pv.yaml
$ tee pv.yaml<<EOF
apiVersion: v1
kind: PersistentVolume
metadata:
name: jmeter-reports
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
glusterfs:
endpoints: glusterfs-cluster
path: /jmeter/reports
readOnly: false
persistentVolumeReclaimPolicy: Retain
EOF
pvc.yaml
$ tee pvc.yaml<<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: jmeter-reports
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
EOF
рдЪрд▓рд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ PV
╨╕ PVC
OpenShift рджреНрд╡рд╛рд░реЗ рд╡реЗрдврд▓реЗрд▓реЗ:
$ oc create -f pv.yaml -n perftest
$ oc create -f pvc.yaml -n perftest
рд╕рд╛рдареА рд╕реНрдерд┐рддреА рддрдкрд╛рд╕рдд рдЖрд╣реЗ PVC
:
$ oc get pvc -n perftest
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
jmeter-reports Bound pvc-b0e5f152-db4b-11ea-a497-566f75280024 10Gi RWX glusterfs-storage 8m
GUI рдордзреНрдпреЗ рддреЗ рдХрд╕реЗ рджрд┐рд╕реЗрд▓ рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ:
JMeter рдмреЗрд╕ рдЗрдореЗрдЬ рддрдпрд╛рд░ рдХрд░рдгреЗ
рдЪрд▓рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреБрдвреЗ рдЬрд╛рдКрдпрд╛ ImageStream
╨╕ BuildConfig
.
рдЖрдкрдг рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреА рдХрд╛рдЧрджрдкрддреНрд░рд╛рдВрдордзреНрдпреЗ рд╢реЛрдзреВ рд╢рдХрддрд╛ -
рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреЗ рдзреЛрд░рдг рдЖрд╣реЗ Docker
рд╕реНрдерд╛рдирд┐рдХ рд╕реНрддреНрд░реЛрддрд╛рдХрдбреВрди.
рдЪрд▓рд╛ рдмреЗрд╕ рдЗрдореЗрдЬ рдмрдирд╡реВ jmeter-base
, рдЬреНрдпрд╛рдЪрд╛ рдЖрдзрд╛рд░ рдЕрд╕реЗрд▓ jmeter-master
.
рдбреЙрдХрд░рдлрд╛рдЗрд▓
FROM openjdk:8u212-jdk
ARG JMETER_VER="5.2"
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VER
ENV PATH $JMETER_HOME/bin:$PATH
RUN mkdir -p /jmeter/results
&& mkdir /jmeter/tests
WORKDIR /jmeter
COPY apache-jmeter-$JMETER_VER.tgz .
RUN tar -xzf $JMETER_HOME.tgz
&& rm $JMETER_HOME.tgz
&& ls -la
RUN sed -i s/#server.rmi.ssl.disable=false/server.rmi.ssl.disable=true/ $JMETER_HOME/bin/jmeter.properties
EXPOSE 60000
рдЖрд╣реЗ.yaml
$ tee is.yaml<<EOF
apiVersion: v1
kind: ImageStream
metadata:
labels:
build: jmeter-base
name: jmeter-base
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: v1
kind: BuildConfig
metadata:
name: jmeter-base
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-base:latest'
postCommit: {}
resources: {}
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'openjdk:8u212-jdk'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
рдЪрд▓рд╛ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ IS
╨╕ BC
:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
рдЖрддрд╛ рдмреЗрд╕ рдЗрдореЗрдЬ рдПрдХрддреНрд░ рдХрд░реВ jmeter-base
:
$ oc start-build jmeter-base -n perftest --from-dir=. --follow
JMeter WEB
jmeter-web
рд╣рд╛ Apache рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рдЖрд╣реЗ. рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА рдЪрд╛рдЪрдгреА рдкрд░рд┐рдгрд╛рдорд╛рдВрд╕рд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдгреЗ рд╣реЗ рддреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдЖрд╣реЗ.
рддрдпрд╛рд░ рдХреЗрд▓реЗ Dockerfile
рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╛рдЗрд▓ httpd.conf
. рдирд┐рд░реНрджреЗрд╢рд╛рд╕рд╛рдареА DocumentRoot
рдореВрд▓реНрдп рд╕реЗрдЯ /jmeter/reports
, рдореНрд╣рдгрдЬреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЪрд╛рдЪрдгреА рдкрд░рд┐рдгрд╛рдо рдЬрддрди рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд.
рдбреЙрдХрд░рдлрд╛рдЗрд▓
$ tee Dockerfile<<EOF
FROM httpd:2.4
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
RUN chmod -R 777 /usr/local/apache2/logs
EXPOSE 8080
CMD ["httpd", "-D", "FOREGROUND"]
EOF
рдЖрд╣реЗ.yaml
$ tee is.yaml<<EOF
apiVersion: v1
kind: ImageStream
metadata:
generation: 1
labels:
build: jmeter-web
name: jmeter-web
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: v1
kind: BuildConfig
metadata:
name: jmeter-web
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-web:latest'
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'httpd:2.4'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
рдЪрд▓рд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ ImageStream
╨╕ BuildConfig
рд╡рд╕реНрддреВ:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
рдХрдбреВрди рдкреНрд░рддрд┐рдорд╛ рдЧреЛрд│рд╛ рдХрд░рдд рдЖрд╣реЗ Dockerfile
:
$ oc start-build jmeter-web -n perftest --from-dir=. --follow
dc.yaml
$ tee dc.yaml<<EOF
apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: jmeter-web
spec:
replicas: 1
template:
metadata:
labels:
name: jmeter-web
spec:
containers:
- image: 172.30.1.1:5000/perftest/jmeter-web
name: jmeter-web
volumeMounts:
- mountPath: /jmeter/reports
name: jmeter-reports
ports:
- containerPort: 80
protocol: TCP
- containerPort: 8080
protocol: TCP
volumes:
- name: jmeter-reports
persistentVolumeClaim:
claimName: jmeter-reports
EOF
sc.yaml
$ tee sc.yaml<<EOF
apiVersion: v1
kind: Service
metadata:
labels:
app: jmeter-web
name: jmeter-web
spec:
ports:
- name: 8080-tcp
port: 8080
protocol: TCP
targetPort: 8080
selector:
deploymentconfig: jmeter-web
sessionAffinity: None
type: ClusterIP
EOF
рдЪрд▓рд╛ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ Service
╨╕ DeploymentConfig
:
$ oc create -f sc.yaml -n perftest
$ oc create -f dc.yaml -n perftest
рдЬреЗрдореАрдЯрд░-рдорд╛рд╕реНрдЯрд░
рдЪрд▓рд╛ Apache рд╡реЗрдм рд╕рд░реНрд╡реНрд╣рд░ рддреИрдирд╛рдд рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░реВрдпрд╛.
рд╣реА рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдЖрд╣реЗ jmeter-master
'a, рд╡рд░ рдЖрдзрд╛рд░рд┐рдд jmeter-base
, рдЬреЗ рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡реЗрд▓ рдЖрдгрд┐ рд╕реНрдЯреЛрд░реЗрдЬрдордзреНрдпреЗ рдирд┐рдХрд╛рд▓ рдЬрддрди рдХрд░реЗрд▓.
рдбреЙрдХрд░рдлрд╛рдЗрд▓
Dockerfile
рддреЗ jmeter-master
, рдЖрдзрд╛рд░реАрдд jmeter-base
.
FROM jmeter-base
ARG JMETER_VER="5.2"
ENV JMETER_HOME /jmeter/apache-jmeter-$JMETER_VER
ENV PATH $JMETER_HOME/bin:$PATH
WORKDIR /jmeter
COPY run.sh /jmeter/
COPY tests/*.jmx /jmeter/tests/
RUN chmod +x /jmeter/run.sh
ENTRYPOINT ["/bin/bash"]
CMD ["/jmeter/run.sh"]
run.sh
run.sh
рд╣реА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЖрд╣реЗ рдЬреА JMeter рдЪрд╛рд▓рд╡рддреЗ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдирд┐рдХрд╛рд▓ рдЬрддрди рдХрд░рддреЗ files
.
рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реЙрдиреНрдЪ рдХреЗрд▓реНрдпрд╛рд╡рд░, рддреЗ рдорд╛рдЧреАрд▓ рдЪрд╛рдЪрдгреНрдпрд╛ рд╣рдЯрд╡рддреЗ, рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдлрдХреНрдд рдирд╡реАрдирддрдо рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддрд╛. рдкрд░рдВрддреБ рд╣реА рд╕рдорд╕реНрдпрд╛ рдирд╛рд╣реА, рдХрд╛рд░рдг рддреБрдореНрд╣реА рддреБрдордЪреНрдпрд╛ рдЧрд░рдЬреЗрдиреБрд╕рд╛рд░ рддреЗ рдмрджрд▓реВ рд╢рдХрддрд╛.
#!/bin/bash
set -e
if [ -d "/jmeter/reports/files" ]
then
echo "Directory /jmeter/reports/files exist - OK"
else
echo "Creating /jmeter/reports/files directory"
mkdir /jmeter/reports/files
fi
if [ -d "/jmeter/reports/dashboards" ]
then
echo "Directory /jmeter/reports/dashboards exist"
else
echo "Creating /jmeter/reports/dashboards directory"
mkdir /jmeter/reports/dashboards
fi
echo "*** JMeter START Tests ***"
for item in $(ls -1 /jmeter/tests | grep jmx)
do
echo "*** Removing dashboard directory for $item"
rm -rdf /jmeter/reports/dashboards/${item}*
echo "*** Removing tests directory for $item"
rm -rdf /jmeter/reports/files/${item}*
echo "*** Testing a $item file ***"
jmeter -n -t /jmeter/tests/${item} -l /jmeter/reports/files/${item}-report.jtl -e -o /jmeter/reports/dashboards/${item}-dash
done
рдЖрд╣реЗ.yaml
$ tee is.yaml<<EOF
apiVersion: image.openshift.io/v1
kind: ImageStream
metadata:
generation: 1
labels:
build: jmeter-master
name: jmeter-master
EOF
bc.yaml
$ tee bc.yaml<<EOF
apiVersion: build.openshift.io/v1
kind: BuildConfig
metadata:
name: jmeter-master
spec:
failedBuildsHistoryLimit: 5
nodeSelector: null
output:
to:
kind: ImageStreamTag
name: 'jmeter-master:latest'
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
dockerStrategy:
from:
kind: ImageStreamTag
name: 'jmeter-base:latest'
type: Docker
successfulBuildsHistoryLimit: 5
EOF
рдЪрд▓рд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛ IS
╨╕ BC
рд╡рд╕реНрддреВ:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
рдЖрдореНрд╣реА рдЧреЛрд│рд╛ рдХрд░рддреЛ jmeter-master
рдкреНрд░рддрд┐рдорд╛:
$ oc start-build jmeter-master -n perftest --from-dir=. --follow
рдиреЛрдХрд░реА
Job
рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддрд╛рдд OpenShift
рдПрдХ рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА POD
рдЪреНрдпрд╛ рдЖрдгрд┐ рдХрдорд╛рдВрдб/рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдпрд╢рд╕реНрд╡реА рдкреВрд░реНрддрддреЗрдЪреА рд╣рдореА рджреНрдпрд╛.
$ tee job.yaml<<EOF
apiVersion: batch/v1
kind: Job
metadata:
name: jmeter-master
labels:
jobName: jmeter-master
spec:
completions: 1
parallelism: 1
template:
metadata:
name: jmeter-master
labels:
jobName: jmeter-master
spec:
containers:
- name: jmeter-master
image: 172.30.1.1:5000/perftest/jmeter-master:latest
volumeMounts:
- mountPath: /jmeter/reports
name: jmeter-reports
imagePullPolicy: Always
volumes:
- name: jmeter-reports
persistentVolumeClaim:
claimName: jmeter-reports
restartPolicy: Never
terminationGracePeriodSeconds: 30
EOF
рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рд╛ Job
:
$ oc create -f job.yaml -n perftest
рдЪрд▓рд╛ рдиреЛрдХрд░реАрдЪреА рд╕реНрдерд┐рддреА рддрдкрд╛рд╕реВрдпрд╛:
$ oc get jobs -n perftest
NAME DESIRED SUCCESSFUL AGE
jmeter-master 1 1 5m
рд╣рдЯрд╡рдгреНрдпрд╛рд╕рд╛рдареА Job
рдЪрд▓рд╛ рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВ:
$ oc delete jobs/jmeter-master -n perftest --ignore-not-found=true
рдЬреЗрдирдХрд┐рдиреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди
рдЖрддрд╛ рдСрдЯреЛрдореЗрд╢рди. рдЪрд▓рд╛ рдкреБрдиреНрд╣рд╛ рдЪрд░рдгрд╛рдВрд╡рд░ рдЬрд╛рдК:
git clone
oc whoami -t
oc start-build ...
oc delete jobs/jmeter-master
oc create -f job.yaml -n perftest
рдЦрд╛рд▓реА рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рд░реЗрдкреЙрдЬрд┐рдЯрд░реА рдХреНрд▓реЛрдирд┐рдВрдЧ, рд╣рдЯрд╡рдгреЗ рдЖрдгрд┐ OpenShift рдирд┐рд░реНрдорд┐рддреА рдХреЗрд▓реА рдЬрд╛рддреЗ Job
рдЪреНрдпрд╛
#!groovy
pipeline {
agent any
stages {
stage('Start Notifications') {
steps {
echo "Sending Email Notification"
}
post {
always {
echo "STARTED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "START - Performance Tests",mimeType: "text/html", body: "<strong>START - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
}
}
stage('Git checkout') {
steps {
...
}
}
stage('Perf Tests') {
steps {
script {
sh '''
OC_CMD1="oc login -u=username -p=PASS -n=perftest
--server=https://...:8443"
$OC_CMD1
OC_TOKEN=`oc whoami -t`
OC_CMD2="oc --token=$OC_TOKEN --server=https://...:8443
start-build jmeter-master -n=perftest --from-dir=./master
--follow=true"
OC_CMD3="oc --token=$OC_TOKEN --server=https://...:8443
delete jobs/jmeter-master -n=perftest --ignore-not-found=true"
OC_CMD4="oc--token=$OC_TOKEN --server=https://...:8443
create -f ./master/job.yaml -n=perftest"
$OC_CMD2
$OC_CMD3
$OC_CMD4
'''
}
}
}
post {
failure {
echo "FAILED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "FAILED - Performance Tests",mimeType: "text/html", body: "<strong>FAILED - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
success {
echo "SUCCESSED - Performance Tests"
mail(to: '[email protected]', from: "[email protected]", subject: "SUCCESSED - Performance Tests",mimeType: "text/html", body: "<strong>SUCCESSED - Performance Tests</strong><br /><br />Project: Name of Project<br />Environment: PerfTest<br />Build number: ${env.BUILD_NUMBER}<br />Build URL: ${env.BUILD_URL}"
}
}
}
}
рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдЪреЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдИрдореЗрд▓рджреНрд╡рд╛рд░реЗ рд╕реВрдЪрдирд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓ '[email protected]
рдкрд╛рд╕реВрди [email protected]
.
рд▓рд┐рдВрдХрд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░реВрди files
, рдЬреЗ рдЪрд╛рдЪрдгреА рдЕрд╣рд╡рд╛рд▓ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ:
рдлрд╛рдЗрд▓ рд╕рд╛рдордЧреНрд░реА ya.HTTP.Request.jmx-report.jtk
:
timeStamp,elapsed,label,responseCode,responseMessage,threadName,dataType,success,failureMessage,bytes,sentBytes,grpThreads,allThreads,URL,Latency,IdleTime,Connect
1597311456443,569,Yandex - HTTP Request,200,Ok,Thread Group 1-1,text,true,,59449,220,1,1,https://ya.ru/,145,0,57
1597311456443,147,Yandex - HTTP Request-0,302,Found,Thread Group 1-1,,true,,478,110,1,1,http://ya.ru/,145,0,57
1597311456592,420,Yandex - HTTP Request-1,200,Ok,Thread Group 1-1,text,true,,58971,110,1,1,https://ya.ru/,370,0,259
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╛ рд▓реЗрдЦрд╛рдиреЗ OpenShift рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд JMeter рдЪрд╛рдЪрдгреНрдпрд╛ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рдЪрд╛ рдПрдХ рдкрд░реНрдпрд╛рдп рджрд╛рдЦрд╡рд▓рд╛ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдкрд╛рдпрд░реНтАНрдпрд╛ рд╕реНрд╡рд╣рд╕реНрддреЗ рдкреВрд░реНрдг рдХреЗрд▓реНрдпрд╛, рддреНрдпрд╛рдирдВрддрд░ рдЖрдореНрд╣реА рдЪрд╛рд▓рдгрд╛рд▒реНрдпрд╛ рдЪрд╛рдЪрдгреНрдпрд╛рдВрдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЬреЗрдирдХрд┐рдиреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рддрдпрд╛рд░ рдХреЗрд▓реА.
рд╕реНрд░реЛрдд рдЖрдгрд┐ рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг
рдЬреЗрдореАрдЯрд░ - рдбреЙрдХрд░ рд╡рд╛рдкрд░реВрди рд╡рд┐рддрд░рд┐рдд рд▓реЛрдб рдЪрд╛рдЪрдгреА рдЬреЗрдирдХрд┐рдиреНрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╡рд░реВрди рдУрдкрдирд╢рд┐рдлреНрдЯрдордзреНрдпреЗ рдЬреЗрдореАрдЯрд░ рдЪрд╛рдЪрдгреА рдЪрд╛рд▓рд╡рдгреЗ рдУрдкрдирд╢реАрдлреНрдЯрдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рд╕реНрдЯреЛрд░реЗрдЬ рдмрд┐рд▓реНрдб рдЖрдгрд┐ рдкреНрд░рддрд┐рдорд╛ рдкреНрд░рд╡рд╛рд╣
рд╕реНрддреНрд░реЛрдд: www.habr.com