Я интегрирую код покрытия Jacoco для удаленных тестов. Я настроил плагин jacoco maven на моей локальной машине и агент jacoco на удаленной машине.
Когда я запускаю тесты с помощью этой команды:
mvn clean jacoco:prepare-agent jacoco:report install```
после завершения тестов у меня есть исключение закрытого сокета
**[INFO] --- jacoco-maven-plugin:0.8.2:dump (default) @ server ---
[INFO] Connecting to /139.XX.XX.XX:32082**
[ERROR] Failed to execute goal org.jacoco:jacoco-maven-plugin:0.8.2:dump
(default) on project server: Unable to dump coverage data: Socket closed unexpected
У меня есть jacoco.exec и тестовые файлысгенерировано локально ... но это не было правильно завершено, поскольку jacoco.xml не существует, поэтому я не могу видеть данные покрытия.
К вашему сведению, удаленная машина - это кластер kubernetes
Я добавил агент jacoco в образ докера моего приложения, работающего внутри кластера, и открыл службу из кластера (соединение было правильно установлено какмы можем видеть в журналах), и настроил мой jvm с jacoco, используя команду ниже. Я использую сервис входа для моего запроса теста https.
**jvmOptions="-javaagent:/tmp/jacoco-agent.jar=output=tcpserver,address=*,port=32082"**
ниже моих значений yamls для входа и конфигурации моего приложения:
controller:
TcpServiceConfigMapNoNamespace: false
UdpServiceConfigMapNoNamespace: false
bindAddress: ""
config: {}
defaultBackendService: kube-system/default-http-backend
defaultSSLCertificate: ""
disableIvp6: false
electionID: ingress-controller-leader
extraArgs: {}
hostNetwork: true
httpRedirectCode: ""
imagePullPolicy: IfNotPresent
imageRepo: nginx
imageTag: 1.14.0-5.10
ingressClass: nginx
kind: DaemonSet
name: controller
nodeSelector:
is_edge: "true"
podAnnotations: {}
podLabels: {}
publishService:
enabled: false
pathOverride: ""
replicaCount: 1
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 250m
memory: 256Mi
reusePort: true
scope:
enabled: false
namespace: ""
securityContextPrivileged: false
service:
annotations: {}
clusterIP: None
enabled: true
externalIPs: []
externalTrafficPolicy: ""
healthCheckNodePort: 0
loadBalancerIP: ""
loadBalancerSourceRanges: []
nodePorts:
http: ""
https: ""
targetPorts:
http: 80
https: 443
type: ClusterIP
tolerations:
- effect: NoExecute
key: is_edge
operator: Equal
value: "true"
updateStrategy:
rollingUpdate:
maxUnavailable: 1
type: RollingUpdate
workerProcessAsRoot: false
defaultBackend:
enabled: true
extraArgs: {}
imagePullPolicy: IfNotPresent
imageRepo: xxxx
imageTag: "1.3"
name: default-backend
nodeSelector: {}
podAnnotations: {}
podLabels: {}
replicaCount: 1
resources:
limits:
cpu: 10m
memory: 32Mi
requests:
cpu: 10m
memory: 32Mi
service:
annotations: {}
clusterIP: ""
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
servicePort: 80
type: ClusterIP
tolerations: []
global:
registry: xxx
rbac:
create: true
serviceAccountName: default
tcp: {}
udp: {}
и это значения моего приложения:
address: '*'
devHostPathMounts:
global:
registry: xxx
image:
name: xxx
tag: latest
infra: false
ingress:
annotations:
ingress.kubernetes.io/proxy-read-timeout: "600"
ingress.kubernetes.io/proxy-send-timeout: "600"
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/ssl-redirect: "false"
enabled: true
jvmOptions: -javaagent:/tmp/jacoco-agent.jar=output=tcpserver
server: ""
liveness: false
maxUnavailable: 0
nodeSelector:
is_control: "true"
port: 32082
rbac: true
readiness: false
replicas: 1
resources:
limits:
cpu: 2
memory: 512Mi
requests:
cpu: 1
memory: 164Mi
service:
httpPort: 8443
name: xxxx
type: ClusterIP
tolerations:
- operator: Exists
Я использую также yaml restshell:
extraHostPathMounts:
- hostPath: /root/.kube
mountPath: /root/.kube
name: kube-dir
readOnly: true
- hostPath: /etc/kubernetes
mountPath: /etc/kubernetes
name: kube-etc
readOnly: true
- hostPath: /etc/sysconfig
mountPath: /etc/sysconfig
name: sysconfig-etc
readOnly: true
- hostPath: /usr/local/sbin
mountPath: /usr/local/sbin
name: bin-dir
readOnly: true
- hostPath: /usr/local/bin
mountPath: /usr/local/bin
name: localbin-dir
readOnly: true
- hostPath: /root/.helm
mountPath: /root/.helm
name: helm-dir
readOnly: false
image:
pullPolicy: IfNotPresent
tag: 18.03
ingress:
annotations:
ingress.kubernetes.io/proxy-read-timeout: "600"
ingress.kubernetes.io/proxy-send-timeout: "600"
ingress.kubernetes.io/rewrite-target: /
ingress.kubernetes.io/secure-backends: "true"
ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/proxy-read-timeout: "600"
nginx.ingress.kubernetes.io/proxy-send-timeout: "600"
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/secure-backends: "true"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
enabled: true
path: /shell/
sso: false
liveness: true
maxUnavailable: 0
rbac: true
readiness: true
registry: xxx.com
secure: true
service:
httpPort: 9091
name: restshell
type: ClusterIP
token: token