Skip to content
Snippets Groups Projects
OpenShift Build and Usage Procedures

1. Introduction

General

What follows is a tutorial on how to build images on an OpenShift cluster in a three-step process (base image, build artifact image, target image). Note that all image streams/build configs assume the OC project/namespace oaicicd-ran.

If you want to regenerate images from modified sources, you have to rebuild the ran-build image. If you reinstalled dependencies, you have to restart from ran-base.

You first need to login. Do:

oc login -u <username> -p <password> --server <url>

Create a project/namespace where you will create your images

oc new-project oaicicd-ran

NOTE: If you change the project name then you have to change it in all the yaml files.

RHEL9 Entitlements

To build the RAN images, we use the codeready-builder-for-rhel-9-x86_64-rpms repository with all the proper development libraries. To access the library you will need etc-pki-entitlement inside the container image.

To import etc-pki-entitlement in your project follow this guide

In case you have difficulties in following it then you can copy the certificates from an RHEL9 host

oc create secret generic etc-pki-entitlement --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}.pem --from-file /etc/pki/entitlement/{NUMBER_ON_YOUR_COMPUTER}-key.pem

2. Build of base shared image

Create an image stream and build config that specify image properties and build parameters, then start the build:

oc create -f openshift/ran-base-is.yaml
oc create -f openshift/ran-base-bc.yaml
oc start-build ran-base --from-file=<oai-repo-directory> --follow

The --from-file=<oai-repo-directory> uploads the repository (from which the build is done) as a binary blob. It is therefore possible to make merges or other (local) modifications and build an image.

3. Build of build shared image

The same as for the base image.

oc create -f openshift/ran-build-is.yaml
oc create -f openshift/ran-build-bc.yaml
oc start-build ran-build --from-file=<oai-repo-directory> --follow

4. Build of a target image

The same as for the base image:

oc create -f openshift/oai-gnb-is.yaml
oc create -f openshift/oai-gnb-bc.yaml
oc start-build oai-gnb --from-file=<oai-repo-directory> --follow

5. Retrieval of Build Container Images and Build Artifacts

Build artifacts, such as build logs, can be retrieved by checking the logs of the individual build steps. For example, for the ran-build step, you can do:

oc logs ran-build-1-build

where ran-build-1-build is the name of the ran-build build (type oc get pods to get a list of all pods).

It is also possible to retrieve the build logs from a running pod. Currently, this is only used for the ran-base step (the others using a python script to scrape it from stdout):

oc create -f openshift/ran-base-log-retrieval.yaml
oc rsync ran-base-log-retrieval:/oai-ran/cmake_targets/log cmake_targets/log/ran-base
oc delete -f openshift/ran-base-log-retrieval.yaml

The images are uploaded into the OpenShift image registry. To download, login using podman, then pull an image:

oc whoami -t | sudo podman login -u <username> --password-stdin <url> --tls-verify=false
sudo podman pull <url>/oaicicd-ran/<image>:<tag> --tls-verify=false
sudo podman logout <url>

The <image> could be oai-gnb, and the <tag> ci-temp.

6. Deployment using HELM Charts

Helm charts are located under charts. Assuming that the image is in the image registry, the physims could be deployed as shown in the following steps:

grep -rl OAICICD_PROJECT ./charts/ | xargs sed -i -e "s#OAICICD_PROJECT#oaicicd-ran#" # select the correct project
sed -i -e "s#TAG#ci-temp#g" ./charts/physims/values.yaml                              # select the correct tag
helm install physim ./charts/physims/                                                 # deploy
oc get pods                                                                           # get the list of deployed containers
oc logs <pod>                                                                         # inspect the logs of a pod
helm uninstall physim                                                                 # undeploy