[AETHER-1265] Integrate Java profiler in TOST env
- Adds a dockerfile to build ONOS image with profiler agent enabled
- Prevents the overriding of the JAVA_OPTS when using the profiler
- Deploy profiler also in the atomix nodes when using stc
Change-Id: I00d5091428083f44360989c701350b7fead66038
diff --git a/tools/dev/Dockerfile-yourkit b/tools/dev/Dockerfile-yourkit
new file mode 100644
index 0000000..d54460e
--- /dev/null
+++ b/tools/dev/Dockerfile-yourkit
@@ -0,0 +1,116 @@
+# Copyright 2021-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# With this dockerfile you can build a ONOS Docker container
+# with YourKit profiler agent enabled
+
+ARG JOBS=2
+ARG PROFILE=default
+ARG TAG=11.0.8-11.41.23
+ARG JAVA_PATH=/usr/lib/jvm/zulu11-ca-amd64
+
+# First stage is the build environment.
+# zulu-openjdk images are based on Ubuntu.
+FROM azul/zulu-openjdk:${TAG} as builder
+
+# Define the profiler version to be used
+ARG ONOS_YOURKIT
+
+ENV BUILD_DEPS \
+ ca-certificates \
+ zip \
+ python \
+ python3 \
+ git \
+ bzip2 \
+ build-essential \
+ curl \
+ unzip
+RUN apt-get update && apt-get install -y ${BUILD_DEPS}
+
+# Install Bazelisk, which will download the version of bazel specified in
+# .bazelversion
+RUN curl -L -o bazelisk https://github.com/bazelbuild/bazelisk/releases/download/v1.5.0/bazelisk-linux-amd64
+RUN chmod +x bazelisk && mv bazelisk /usr/bin
+
+# Build-stage environment variables
+ENV ONOS_ROOT /src/onos
+ENV BUILD_NUMBER docker
+ENV JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8
+
+# Copy in the sources
+COPY . ${ONOS_ROOT}
+WORKDIR ${ONOS_ROOT}
+
+# Build ONOS using the JDK pre-installed in the base image, instead of the
+# Bazel-provided remote one. By doing wo we make sure to build with the most
+# updated JDK, including bug and security fixes, independently of the Bazel
+# version.
+ARG JOBS
+ARG JAVA_PATH
+ARG PROFILE
+RUN bazelisk build onos \
+ --jobs ${JOBS} \
+ --verbose_failures \
+ --javabase=@bazel_tools//tools/jdk:absolute_javabase \
+ --host_javabase=@bazel_tools//tools/jdk:absolute_javabase \
+ --define=ABSOLUTE_JAVABASE=${JAVA_PATH} \
+ --define profile=${PROFILE}
+
+# We extract the tar in the build environment to avoid having to put the tar in
+# the runtime stage. This saves a lot of space.
+RUN mkdir /output
+RUN tar -xf bazel-bin/onos.tar.gz -C /output --strip-components=1
+# Get yourkit profiler and extract in the ONOS temp folder
+RUN curl -L -o yourkit.zip https://www.yourkit.com/download/YourKit-JavaProfiler-$ONOS_YOURKIT.zip && \
+ unzip -o yourkit.zip && \
+ rm yourkit.zip && \
+ mv YourKit-JavaProfiler-$(echo $ONOS_YOURKIT | sed 's/\(.*\)-.*/\1/')/bin/linux-x86-64/libyjpagent.so /output/libyjpagent.so
+
+# Second and final stage is the runtime environment.
+FROM azul/zulu-openjdk:${TAG}
+
+LABEL org.label-schema.name="ONOS" \
+ org.label-schema.description="SDN Controller" \
+ org.label-schema.usage="http://wiki.onosproject.org" \
+ org.label-schema.url="http://onosproject.org" \
+ org.label-scheme.vendor="Open Networking Foundation" \
+ org.label-schema.schema-version="1.0" \
+ maintainer="onos-dev@onosproject.org"
+
+RUN apt-get update && apt-get install -y curl && \
+ rm -rf /var/lib/apt/lists/*
+
+# Install ONOS in /root/onos
+COPY --from=builder /output/ /root/onos/
+WORKDIR /root/onos
+
+# Set JAVA_HOME (by default not exported by zulu images)
+ARG JAVA_PATH
+ENV JAVA_HOME ${JAVA_PATH}
+# Set ONOS_YOURKIT to enable the profiler agent
+ENV ONOS_YOURKIT true
+
+# Ports
+# 6653 - OpenFlow
+# 6640 - OVSDB
+# 8181 - GUI
+# 8101 - ONOS CLI
+# 9876 - ONOS intra-cluster communication
+# 10001-10010 - YourKit profiler
+EXPOSE 6653 6640 8181 8101 9876 10001-10010
+
+# Run ONOS
+ENTRYPOINT ["./bin/onos-service"]
+CMD ["server"]