Halló allir!
Í þessari grein vil ég deila einni af leiðunum til að keyra JMeter árangurspróf í OpenShift með Jenkins sem sjálfvirkni. Fyrst munum við gera öll nauðsynleg skref (búa til ImageStreams
, BuildConfig
, Job
osfrv.) í handvirkri stillingu. Eftir það skulum við skrifa Jenkins Pipeline.
Sem upphafspunktur ættum við að hafa:
- keyra OpenShift (v3.11) klasa
- Jenkins þjónn með stilltum skilríkjum til að vinna í OpenShift
- файл
apache-jmeter-5.2.tgz
Sem próf verður það einfalt HTTP Request
á ya.ru
í einum straumi.
Að búa til verkefni í OpenShift
Byrjum á því að búa til nýtt umhverfi. Við skulum búa til perftest
umkringdur teymi:
$ oc new-project perftest --display-name="Performance Tests" --description="Performance Tests - JMeter"
Við verðum sjálfkrafa flutt yfir í nýstofnað umhverfi perftest
, við skulum athuga hvort þetta sé svona:
$ oc project
Using project "perftest" on server "https://127.0.0.1:8443".
Stofnun geymslu
Prófunarskýrslur verða geymdar sameiginlega með vefþjóninum og jmeter-meter
'staður - /jmeter/reports
.
Það er betra að búa til Storajs núna, því PODs verða bundin við þá jmeter-web
и jmeter-master
.
Þú finnur ítarlegri upplýsingar um geymslu í opinberu skjölunum
Við skulum búa til yaml skrár fyrir 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
Við skulum búa til PV
и PVC
umkringdur OpenShift:
$ oc create -f pv.yaml -n perftest
$ oc create -f pvc.yaml -n perftest
Er að athuga stöðuna fyrir 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
Svona mun það líta út í GUI:
Að búa til JMeter grunnmynd
Við skulum halda áfram að skapa ImageStream
и BuildConfig
.
Þú getur fundið allar nauðsynlegar upplýsingar í skjölunum -
Myndbyggingarstefnan er Docker
frá staðbundnum heimildum.
Við skulum búa til grunnmynd jmeter-base
, sem verður grundvöllur fyrir jmeter-master
.
Dockerfil
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
is.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
Við skulum búa til hluti IS
и BC
:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Nú skulum við setja saman grunnmyndina jmeter-base
:
$ oc start-build jmeter-base -n perftest --from-dir=. --follow
JMeter VEFUR
jmeter-web
Þetta er Apache vefþjónn. Verkefni þess er að útvega möppu með niðurstöðum úr prófunum til að skoða.
Undirbúinn Dockerfile
og stillingarskrá httpd.conf
. Til tilskipunar DocumentRoot
gildi sett /jmeter/reports
, þ.e. möppuna þar sem prófunarniðurstöður eru vistaðar.
Dockerfil
$ 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
is.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
Við skulum búa til ImageStream
и BuildConfig
hlutir:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Að safna mynd frá 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
Við skulum búa til hluti Service
и DeploymentConfig
:
$ oc create -f sc.yaml -n perftest
$ oc create -f dc.yaml -n perftest
Jmeter-meistari
Við skulum byrja að dreifa Apache vefþjóninum.
Þetta er Dockerfile jmeter-master
'a, byggt á jmeter-base
, sem mun keyra próf og vista niðurstöðurnar í geymslu.
Dockerfil
Dockerfile
í jmeter-master
, byggt á 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
þetta er forskrift sem keyrir JMeter og vistar niðurstöðurnar í möppu files
.
Í hvert skipti sem forskriftin er ræst eyðir hún fyrri prófum, þannig að þú getur aðeins unnið með nýjustu gögnin. En þetta er ekki vandamál, því þú getur breytt því til að henta þínum þörfum.
#!/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
is.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
Við skulum búa til IS
и BC
hlutir:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Við söfnum jmeter-master
mynd:
$ oc start-build jmeter-master -n perftest --from-dir=. --follow
Starf
Job
eru notuð í OpenShift
'e til að keyra einn eða fleiri POD
's og tryggja árangursríka frágang þeirra eftir að skipunin/handritið hefur verið framkvæmt.
$ 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
Búðu til hlut Job
:
$ oc create -f job.yaml -n perftest
Athugum stöðu starfsins:
$ oc get jobs -n perftest
NAME DESIRED SUCCESSFUL AGE
jmeter-master 1 1 5m
Til að eyða Job
við skulum nota skipunina:
$ oc delete jobs/jmeter-master -n perftest --ignore-not-found=true
Jenkins leiðsla
Nú sjálfvirkni. Við skulum fara yfir skrefin aftur:
git clone
oc whoami -t
oc start-build ...
oc delete jobs/jmeter-master
oc create -f job.yaml -n perftest
Hér að neðan er leiðsla þar sem klónun geymslu, eyðing og OpenShift stofnun er framkvæmd Job
's.
#!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}"
}
}
}
}
Eftir að Pipeline hefur lokið rekstri sínum munum við fá tilkynningu í tölvupósti '[email protected]
frá [email protected]
.
Með því að smella á hlekkinn files
, sem geymir prófunarskýrslur:
Innihald skráar 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
Ályktun
Þessi grein sýndi einn af valkostunum til að keyra JMeter próf í OpenShift umhverfinu. Við kláruðum öll skrefin handvirkt, eftir það bjuggum við til Jenkins Pipeline til að gera sjálfvirkan ferlið við að keyra prófanir.
Heimildir og skjöl
JMeter - Dreifð álagsprófun með Docker Að keyra JMeter próf í OpenShift frá Jenkins Pipeline opnar vaktViðvarandi geymsla Byggingar og myndstraumar
Heimild: www.habr.com