Hello mong le e mong!
Sehloohong sena ke batla ho arolelana e 'ngoe ea litsela tsa ho etsa liteko tsa ts'ebetso ea JMeter ho OpenShift ho sebelisa Jenkins joalo ka boiketsetso. Pele re tla etsa mehato eohle e hlokahalang (ho theha ImageStreams
, BuildConfig
, Job
etc.) ka mokhoa oa matsoho. Kamora moo, ha re ngoleng Jenkins Pipeline.
Ha re qala, re lokela ho ba le:
- e tsamaisang sehlopha sa OpenShift (v3.11).
- Seva ea Jenkins e nang le mangolo a netefalitsoeng a ho sebetsa ho OpenShift
- file
apache-jmeter-5.2.tgz
E le liteko ho tla ba bonolo HTTP Request
mabapi le ya.ru
ka molapo o le mong.
Ho theha projeke ho OpenShift
Ha re qaleng ka ho theha tikoloho e ncha. Ha re bopeng perftest
ho pota-potiloe ke sehlopha:
$ oc new-project perftest --display-name="Performance Tests" --description="Performance Tests - JMeter"
Re tla fetisetsoa ka bohona tikolohong e ncha e entsoeng perftest
, a re hlahlobeng hore na ho joalo:
$ oc project
Using project "perftest" on server "https://127.0.0.1:8443".
Pōpo ea Polokelo
Litlaleho tsa liteko li tla bolokoa ka mokhoa o ts'oanang le setsi sa marang-rang le jmeter-meter
'sebaka - /jmeter/reports
.
Ho molemo ho theha Storajs hona joale, hobane li-POD li tla tlamelloa ho tsona jmeter-web
и jmeter-master
.
U tla fumana lintlha tse qaqileng haholoanyane mabapi le polokelo litokomaneng tsa molao
Ha re theheng lifaele tsa yaml bakeng sa 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
Ha re bopeng PV
и PVC
e pota-potiloe ke OpenShift:
$ oc create -f pv.yaml -n perftest
$ oc create -f pvc.yaml -n perftest
Ho hlahloba boemo ba 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
Mona ke hore na e tla shebahala joang ho GUI:
Ho theha setšoantšo sa JMeter Base
Ha re tsoeleng pele ho bopa ImageStream
и BuildConfig
.
U ka fumana lintlha tsohle tse hlokahalang litokomaneng -
Leano la ho haha setšoantšo ke Docker
ho tsoa mohloling oa lehae.
Ha re theheng setšoantšo sa motheo jmeter-base
, e tla ba motheo oa jmeter-master
.
dockerfile
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
ke.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
Ha re theheng lintho IS
и BC
:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Joale a re bokelleng setšoantšo sa motheo jmeter-base
:
$ oc start-build jmeter-base -n perftest --from-dir=. --follow
JMeter WEB
jmeter-web
Sena ke Apache web server. Mosebetsi oa eona ke ho fana ka bukana e nang le liphetho tsa liteko bakeng sa ho boha.
Lokisitsoe Dockerfile
le faele ea tlhophiso httpd.conf
. Bakeng sa tataiso DocumentRoot
boleng sete /jmeter/reports
, ke. bukana eo liphetho tsa liteko li bolokiloeng ho eona.
dockerfile
$ 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
ke.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
Ha re bopeng ImageStream
и BuildConfig
dintho:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Ho bokella setšoantšo ho tsoa 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
Ha re theheng lintho Service
и DeploymentConfig
:
$ oc create -f sc.yaml -n perftest
$ oc create -f dc.yaml -n perftest
Monghali Jmeter
Ha re qale ho tsamaisa seva sa marang-rang sa Apache.
Ena ke Dockerfile jmeter-master
'a, e thehiloeng ho jmeter-base
, e tla tsamaisa liteko le ho boloka liphetho polokelong.
dockerfile
Dockerfile
etsoe jmeter-master
, ho ipapisitsoe le 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"]
matha.sh
run.sh
ona ke mongolo o tsamaisang JMeter mme o boloka liphetho bukeng files
.
Nako le nako ha mongolo o qalisoa, o hlakola liteko tse fetileng, kahoo o ka sebetsa feela ka lintlha tsa morao-rao. Empa sena ha se bothata, hobane o ka e fetola hore e lumellane le litlhoko tsa hau.
#!/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
ke.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
Ha re bopeng IS
и BC
dintho:
$ oc create -f is.yaml -n perftest
$ oc create -f bc.yaml -n perftest
Rea bokella jmeter-master
setšoantšo:
$ oc start-build jmeter-master -n perftest --from-dir=. --follow
Jobo
Job
's li sebelisoa ho OpenShift
'e molemong oa ho matha e le 'ngoe kapa ho feta POD
'me u tiise hore li tla phethoa ka katleho ka mor'a ho phethahatsa taelo/script.
$ 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
Etsa ntho Job
:
$ oc create -f job.yaml -n perftest
Ha re hlahlobeng boemo ba mosebetsi:
$ oc get jobs -n perftest
NAME DESIRED SUCCESSFUL AGE
jmeter-master 1 1 5m
Ho phumula Job
ha re sebeliseng taelo:
$ oc delete jobs/jmeter-master -n perftest --ignore-not-found=true
Pipeline ea Jenkins
Hona joale othomathike. Ha re feteleng mehato hape:
git clone
oc whoami -t
oc start-build ...
oc delete jobs/jmeter-master
oc create -f job.yaml -n perftest
Ka tlase ke phaephe eo ho eona ho etsoang cloning ea polokelo, ho hlakola le ho theha OpenShift 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}"
}
}
}
}
Kamora hore Pipeline e phethe tšebetso ea eona, re tla fumana tsebiso ka lengolo-tsoibila '[email protected]
от [email protected]
.
Ka ho tobetsa sehokelo files
, e bolokang tlaleho ea tlhahlobo:
Likahare tsa faele 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
fihlela qeto e
Sengoliloeng sena se bonts'itse e 'ngoe ea likhetho tsa ho etsa liteko tsa JMeter tikolohong ea OpenShift. Re qetile mehato eohle ka letsoho, ka mor'a moo re thehile Jenkins Pipeline ho iketsetsa mokhoa oa ho etsa liteko.
Mehloli le litokomane
JMeter - Teko ea Moroalo o abuoang o sebelisa Docker Ho matha liteko tsa JMeter ho OpenShift ho tsoa ho Pipeline ea Jenkins openhiftHo boloka ho phehella E aha le Melapo ea Litšoantšo
Source: www.habr.com