хүн бүрт Сайн байна уу!
Энэ нийтлэлд би Женкинсийг автоматжуулалт болгон ашиглан OpenShift дээр JMeter гүйцэтгэлийн тестийг ажиллуулах аргуудын нэгийг хуваалцахыг хүсч байна. Эхлээд бид шаардлагатай бүх алхмуудыг хийх болно (үүсгэх ImageStreams
, BuildConfig
, Job
гэх мэт) гарын авлагын горимд. Үүний дараа Jenkins Pipeline гэж бичье.
Эхлэх цэг болгон бид дараах зүйлсийг хийх ёстой:
- 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
.
Storaj-уудыг одоо үүсгэх нь дээр, учир нь 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
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
Объектуудыг бүтээцгээе 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
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
бүтээцгээе 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 вэб серверийг байрлуулж эхэлцгээе.
Энэ бол Dockerfile юм 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
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
бүтээцгээе 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
'e нэг буюу хэд хэдэн ажиллуулахын тулд 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}"
}
}
}
}
Pipeline үйл ажиллагаагаа дуусгасны дараа бид имэйлээр мэдэгдэл хүлээн авах болно '[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 тестийг ажиллуулах сонголтуудын нэгийг харуулсан. Бид бүх алхмуудыг гараар хийж дуусгасны дараа туршилтын ажиллагааг автоматжуулах зорилгоор Jenkins Pipeline-ийг бүтээсэн.
Эх сурвалж, баримт бичиг
JMeter - Docker ашиглан хуваарилагдсан ачааллын туршилт Jenkins Pipeline-аас OpenShift дээр JMeter тестийг ажиллуулж байна нээлттэй ээлжБайнгын хадгалалт Барилга ба зургийн урсгал
Эх сурвалж: www.habr.com