Add CI to build both images 10/1510/1
authorE. Scott Daniels <daniels@research.att.com>
Tue, 12 Nov 2019 14:20:52 +0000 (09:20 -0500)
committerE. Scott Daniels <daniels@research.att.com>
Tue, 12 Nov 2019 15:26:36 +0000 (10:26 -0500)
This change adds the needed directory structure and config
files under the ci directory to build both the mc-core and
the mc_listener images.  Changes are needed in the ci
management repo to "activate" these, so this is part 1
which sets the stage for the multi-image build.

Also added a brief README at the top level.

Signed-off-by: E. Scott Daniels <daniels@research.att.com>
Change-Id: Ief76d4e1a8811d06464af0d5d158de27bf5b0221

Make core directory name under ci consistent with root source dir

Change-Id: I797c0f6373dd12669a032e619a64dafc1322a401

Add correct tag for mc-core

Signed-off-by: E. Scott Daniels <daniels@research.att.com>
Change-Id: I0087ced6c876c3b91ca74f1b6e13a909ab765d4d

Add top level readme

Signed-off-by: E. Scott Daniels <daniels@research.att.com>
Change-Id: I0c1eb11d26ab86f0bda1a84256587bc2da460d53

README [new file with mode: 0644]
ci/Dockerfile
ci/README
ci/listener/Dockerfile [new file with mode: 0644]
ci/listener/container-tag.yaml [new file with mode: 0644]
ci/mc-core/Dockerfile [new file with mode: 0644]
ci/mc-core/container-tag.yaml [new file with mode: 0644]

diff --git a/README b/README
new file mode 100644 (file)
index 0000000..a2c8748
--- /dev/null
+++ b/README
@@ -0,0 +1,22 @@
+
+This repo contains source and documentation for the Management Campaign (MC) xAPP.
+
+The following is a list of important directories at the root level of
+the repo and a brief description of each.
+
+mc-core
+This is the source for the core MC application
+
+sidecars
+The MC application currently uses at least one "sidecar" container to
+listen for messages and to funnel them in. This directory contains
+one subdirectory per sidecar application.
+
+ci
+This is the continuous integration directory. Within the ci directory
+are subdirectories for each docker image which is created to support
+the application.
+
+docs
+Project documentation in a form which can be scraped from the repo and pushed
+to a "free standing" document hosting site.
index 57e70a0..bd08320 100644 (file)
@@ -1,5 +1,10 @@
 # vim: ts=4 sw=4 noet:
 
 # vim: ts=4 sw=4 noet:
 
+### 2019 November 11th
+### This file is deprecated and can be removed once the ci-managment repo has been 
+### changed to use the docker files in the subdiretories
+###
+
 # -------------------------------------------------------------------------------
 #    Copyright (c) 2018-2019 AT&T Intellectual Property.
 #
 # -------------------------------------------------------------------------------
 #    Copyright (c) 2018-2019 AT&T Intellectual Property.
 #
index abe687b..96f4177 100644 (file)
--- a/ci/README
+++ b/ci/README
 These files are needed to support the continuous integration process
 which verifies code on commit and might build images for the application.
 
 These files are needed to support the continuous integration process
 which verifies code on commit and might build images for the application.
 
-The Docker file is used to build an image during CI vetting, and maybe even
-during the building of the overall application container. For vetting,
-the successful build indicates that all vetting of the repo passed.
+There are multiple containers built from this repo. For each container built
+there is a subdirectory here:
+
+       listener -- the mc_listener application which ingests RMR messages to feed
+                               the core MC xAPP.
+
+       mc_core --      The core MC xAPP.
+
+
+The builds are kicked off based on the yaml files in the ci-management project
+       ssh://<some-user>@gerrit.o-ran-sc.org:29418/ci-management
+
+Specifically controlled by ric-app-mc.yaml.
+
+
+Image Versioning
+Docker image tags are applied based on the contents of the container-tag.yaml 
+file in each of the directories listed above. Specifically the "tag" field as
+illustrated in the following example:
+
+     tag: '1.2.1'
+
+
diff --git a/ci/listener/Dockerfile b/ci/listener/Dockerfile
new file mode 100644 (file)
index 0000000..38ecfca
--- /dev/null
@@ -0,0 +1,76 @@
+# vim: ts=4 sw=4 noet:
+#==================================================================================
+#      Copyright (c) 2018-2019 AT&T Intellectual Property.
+#
+#   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.
+#==================================================================================
+
+
+#      Mnemonic:       Dockerfile (listener)
+#      Abstract:       Build file which creaes a runtime image for the listener. 
+#                              Building should be as simple as:
+#
+#                                      docker build -f ci/listener/Dockerfile -t mc_listener:xx.xx .
+#
+#                              The build MUST be run from the repo root as it is impossible to 
+#                              reference the needed source from inside of this directory.
+#
+#                              Running the image in a container:
+#                                      The fifo output directory needs to be mounted to the container
+#                                      e.g.  -v /exports/mcl/fifos:/tmp/mcl/fifos.  The internal
+#                                      directory can be supplied on the command line using -d path, but
+#                                      should not be needed.
+#
+#                                      The RMR listen port must be properly exposed to the container. The
+#                                      internal default is 4560, and can be changed with the -p port option
+#                                      on the command line (needed if running from docker-compose). Typical
+#                                      exposure might be  -p <host-port>:4560  on the docker run command.
+#
+#                                      The MC listener application does NOT need route table updates and thus
+#                                      there is NO need to expose the route table generator port on this
+#                                      container.
+#
+#      Date:           22 August 2019
+#      Author:         E. Scott Daniels
+
+
+FROM ubuntu:18.04 as buildenv
+RUN mkdir /playpen
+
+RUN apt-get update && apt-get install -y cmake gcc make git g++ wget
+
+RUN mkdir /playpen/bin /playpen/src
+ARG SRC=sidecars/listener
+COPY ${SRC}/build_dev_env.sh /playpen/bin/
+COPY ${SRC}/Makefile ${SRC}/*.h ${SRC}/*.c /playpen/src/
+
+ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
+ENV C_INCLUDE_PATH=/usr/local/include
+RUN bash /playpen/bin/build_dev_env.sh
+RUN cd /playpen/src/; make -B mc_listener sender pipe_reader
+
+# -----  final, smaller image ----------------------------------
+FROM ubuntu:18.04
+
+# obtusely this uses the previous value
+ARG SRC
+
+RUN mkdir -p /playpen/bin
+COPY --from=buildenv /usr/local/lib/* /usr/local/lib/
+COPY --from=buildenv /playpen/src/mc_listener /playpen/src/sender /playpen/src/pipe_reader /playpen/bin/
+COPY ${SRC}/verify.sh /playpen/bin
+
+ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
+ENV C_INCLUDE_PATH=/usr/local/include
+
+CMD [ "/playpen/bin/mc_listener" ]
diff --git a/ci/listener/container-tag.yaml b/ci/listener/container-tag.yaml
new file mode 100644 (file)
index 0000000..ae02c3b
--- /dev/null
@@ -0,0 +1,2 @@
+---
+tag: '1.2.1'
diff --git a/ci/mc-core/Dockerfile b/ci/mc-core/Dockerfile
new file mode 100644 (file)
index 0000000..90fffc2
--- /dev/null
@@ -0,0 +1,95 @@
+# -------------------------------------------------------------------------------
+#    Copyright (c) 2018-2019 AT&T Intellectual Property.
+#
+#   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.
+# -------------------------------------------------------------------------------
+
+#      Mnemonic:       Dockerfile (mc_core)
+#      Abstract:       Build file which creaes a runtime image for the MC-xAPP core process.
+#                              Building should be as simple as:
+#
+#                                      docker build -f ci/mc_core/Dockerfile -t mcxapp .
+#
+#                              The build MUST be run from the repo root as it is impossible to 
+#                              reference the needed source from inside of this directory.
+#
+
+ARG STAGE_DIR=/mc
+ARG SRC=mc-core
+
+FROM nexus3.o-ran-sc.org:10004/bldr-ubuntu16-c-go:2-u16.04-nng AS project-build
+# Update & installation of linux packages
+RUN apt-get update -y && \
+        apt-get install -y curl && \
+        apt-get install -y procps && \
+        apt-get install -y python-pip
+
+ARG STAGE_DIR
+ARG SRC
+
+COPY ${SRC}/mc ${STAGE_DIR}
+WORKDIR ${STAGE_DIR}
+RUN git clone https://github.com/protocolbuffers/protobuf.git
+WORKDIR ${STAGE_DIR}/protobuf
+RUN ./autogen.sh
+RUN ./configure
+RUN make clean
+RUN make
+RUN make install
+RUN ldconfig
+WORKDIR ${STAGE_DIR}
+RUN git clone https://github.com/protobuf-c/protobuf-c.git
+WORKDIR protobuf-c
+RUN ./autogen.sh
+ENV PKG_CONFIG_PATH /usr/local/lib/pkgconfig
+RUN ./configure
+RUN make
+RUN make install
+RUN ldconfig
+RUN pip install protobuf
+WORKDIR ${STAGE_DIR}
+RUN git clone https://gerrit.o-ran-sc.org/r/com/gs-lite
+WORKDIR ${STAGE_DIR}/gs-lite
+COPY ${SRC}/mc/cfg ${STAGE_DIR}/gs-lite/cfg
+COPY ${SRC}/mc/local_datasource ${STAGE_DIR}/gs-lite/src/lib/gscprts/local_datasource
+COPY ${SRC}/mc/local ${STAGE_DIR}/gs-lite/include/lfta/local
+COPY ${SRC}/mc/queries ${STAGE_DIR}/gs-lite/demo/queries
+RUN ./build_and_install.sh
+WORKDIR ${STAGE_DIR}/gs-lite/demo/queries
+ENV GSLITE_ROOT ${STAGE_DIR}/gs-lite
+RUN bash ${STAGE_DIR}/gs-lite/bin/buildit
+
+
+# now install the binaries and libraries into smaller docker image
+FROM ubuntu:16.04
+
+ARG STAGE_DIR
+
+COPY --from=project-build ${STAGE_DIR}/gs-lite/demo/queries /mc/gs-lite/demo/queries
+COPY --from=project-build ${STAGE_DIR}/gs-lite/bin /mc/gs-lite/bin
+COPY --from=project-build ${STAGE_DIR}/data_gen /mc/data_gen
+COPY --from=project-build ${STAGE_DIR}/mc_deployment.json /mc/
+COPY --from=project-build ${STAGE_DIR}/extract_params.py /mc/
+COPY --from=project-build /usr/local/lib/libproto* /usr/local/lib/
+
+RUN apt-get update && \
+    apt-get install -y curl python python-pip && \
+    apt-get clean
+
+RUN ldconfig
+RUN pip install protobuf
+
+ENV XAPP_DESCRIPTOR_PATH /mc/mc_deployment.json
+WORKDIR /mc/gs-lite/demo/queries
+ENV GSLITE_ROOT /mc/gs-lite
+CMD ["./runall"]
diff --git a/ci/mc-core/container-tag.yaml b/ci/mc-core/container-tag.yaml
new file mode 100644 (file)
index 0000000..b72de81
--- /dev/null
@@ -0,0 +1,2 @@
+---
+tag: '1.0.1'