dump seçeneği
Şöyle yaparız. Burada sırayla her POD üzerindeki JaCoCo agent'a bağlanıyor ve dump seçeneği ile dosyayı alıyor. Daha sonra merge seçeneği ile dosyaları birleştiriyor
#!/usr/bin/env bash
set -e -u -o pipefail
if [ "${#}" -lt 4 ]; then
echo "Usage: ${0} <path-to-jacococli.jar> <kubernetes-context> <kubernetes-namespace> <kubernetes-pod-selector>"
echo "For selector syntax, see https://kubernetes.io/docs/concepts/overview/working-with-objects/labels."
exit 1
fi
JACOCO_CLI_LOCAL="$(realpath "${1}")"
CONTEXT="${2}"
NAMESPACE="${3}"
POD_SELECTOR="${4}"
# All resources are stored in a temporary directory.
TMP_DIR='/tmp/jacoco-export'
mkdir -p "${TMP_DIR}"
pushd "${TMP_DIR}"
# Fetch coverage data from all pods.
kubectl get pods \
--context="${CONTEXT}" \
--namespace="${NAMESPACE}" \
--selector="${POD_SELECTOR}" \
--no-headers \
-o custom-columns=":metadata.name" \
| while read POD; do
# One pod at a time, open a tunnel, connect to the JaCoCo agent to fetch
# the coverage data and close the tunnel again.
echo $CONTEXT - $POD
(
kubectl port-forward \
--context="${CONTEXT}" \
--namespace "${NAMESPACE}" \
"${POD}" \
"6300:6300" &
trap "kill ${!}" ERR EXIT HUP INT TERM
java -jar "${JACOCO_CLI_LOCAL}" dump --destfile "jacoco-${POD}.exec"
)
done
# Merge the coverage data into a single file.
java -jar "${JACOCO_CLI_LOCAL}" merge --destfile jacoco.exec jacoco-*.exec
popd
report seçeneği
Örnek
Dosyayı HTML olarak formatlamak için şöyle yaparız
java -jar jacococli.jar report jacoco.exec [options]
Örnek
Şöyle yaparız.
#!/usr/bin/env bash
set -e -u -o pipefail
if [[ "${#}" -lt 2 ]]; then
echo "Usage: ${0} <path-to-jacococli.jar> [--sourcefiles-matcher=<string>] [ --classfiles-miles-matcher<string>] <source-roots>..."
exit 1
fi
JACOCO_CLI_LOCAL="$(realpath "${1}")"
shift
SOURCEFILES_MATCHER='*/src/main/java'
CLASSFILES_MATCHER='*/target/classes'
while [ "${#}" -gt 0 ]; do
case "${1}" in
--sourcefiles-matcher)
shift
SOURCEFILES_MATCHER="${1}"
;;
--classfiles-matcher)
shift
CLASSFILES_MATCHER="${1}"
;;
*)
break
;;
esac
done
if [[ "${#}" -ne 1 ]]; then
echo "No source roots passed."
exit 1
fi
pushd /tmp/jacoco-export
# Generate an HTML report based on the collected data. Note that this command
# assumes that the associated source code has been compiled (i.e. that the
# `target/classes` directories are present and populated).
java -jar "${JACOCO_CLI_LOCAL}" report jacoco.exec --html report \
$(find "${@:1}" -path "${CLASSFILES_MATCHER}" | sed 's/^/--classfiles /') \
$(find "${@:1}" -path "${SOURCEFILES_MATCHER}" | sed 's/^/--sourcefiles /')
popd