osmo-gsm-tester: Build srsLTE inside the docker instance if inst not provided by host
osmo-gsm-tester.git/contrib/jenkins-build-srslte.sh cannot be used because there's a need to split the fetch step from the build step. That's because we want to fetch in the host (in order to use host's user ssh key for potential private repos) while still building inside the docker container, where we have all the dependencies (and where the binaries are going to be run afterwards by osmo-gsm-tester). During the changes above it was also noticed that /tmp/trial on the host got its UID+GID changed (because we switch user inside the container to downscale privileges). Fix it by chown'ing the directory back to the host user's UID+GID. Change-Id: Ia0db8fba840392a0b7883cfc15e45c2e80407a16
This commit is contained in:
parent
853ddcd792
commit
41230705dc
|
@ -1,11 +1,20 @@
|
|||
#!/bin/sh
|
||||
|
||||
# This docket env allows running a typical osmo-gsm-tester setup with a main
|
||||
# This docker env allows running a typical osmo-gsm-tester setup with a main
|
||||
# unit (ogt-master) running osmo-gsm-tester process, and using another docker
|
||||
# container as a remote host where to run child processes.
|
||||
#
|
||||
# Trial directory must be set in the parent host's /tmp/trial path, which will
|
||||
# then be mounted to ogt-master and used my osmo-gsm-tester.
|
||||
# Trial directory to use may be placed in the container's host /tmp/trial path,
|
||||
# which will then be mounted to ogt-master and used my osmo-gsm-tester.
|
||||
# If no inst is detected, then jenkins.sh will attempt to fetch the sources in
|
||||
# the host system (so that host's user ssh keys are potentially available) under
|
||||
# /tmp/trial, and the inst is then later built inside the container.
|
||||
# Several env vars are available to tweak where to fetch from.
|
||||
# SRS_LTE_BRANCH: The srsLTE.git branch to fetch.
|
||||
# SRS_LTE_REPO_PREFIX: The URL & prefix patch from where to clone the srsLTe.git
|
||||
# repo.
|
||||
# SRS_LTE_REPO_NAME: The srsLTE.git repo name, usually "srsLTE", but known to
|
||||
# have different names on some forks.
|
||||
#
|
||||
# osmo-gsm-tester parameters and suites are passed to osmo-gsm-tester.sh in same
|
||||
# directory as this script using environment variable OSMO_GSM_TESTER_OPTS.
|
||||
|
@ -14,6 +23,35 @@
|
|||
# osmo-gsm-tester last run can be found as usual under the trial directory
|
||||
# (/tmp/trial/last_run).
|
||||
|
||||
TRIAL_DIR="/tmp/trial"
|
||||
|
||||
SRS_LTE_BRANCH=${SRS_LTE_BRANCH:-master}
|
||||
SRS_LTE_REPO_PREFIX=${SRS_LTE_REPO_PREFIX:-git@github.com:srsLTE}
|
||||
SRS_LTE_REPO_NAME=${SRS_LTE_REPO_NAME:-srsLTE}
|
||||
have_repo_srslte() {
|
||||
echo "srsLTE inst not provided, fetching it now and it will be build in container"
|
||||
if [ -d "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" ]; then
|
||||
git fetch -C ${TRIAL_DIR}/${SRS_LTE_REPO_NAME}
|
||||
else
|
||||
mkdir -p ${TRIAL_DIR}
|
||||
git clone "${SRS_LTE_REPO_PREFIX}/${SRS_LTE_REPO_NAME}" "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}"
|
||||
fi
|
||||
# Figure out whether we need to prepend origin/ to find branches in upstream.
|
||||
# Doing this allows using git hashes instead of a branch name.
|
||||
if git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" rev-parse "origin/$SRS_LTE_BRANCH"; then
|
||||
SRS_LTE_BRANCH="origin/$SRS_LTE_BRANCH"
|
||||
fi
|
||||
|
||||
git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" checkout -B build_branch "$SRS_LTE_BRANCH"
|
||||
rm -rf "${TRIAL_DIR:?}/${SRS_LTE_REPO_NAME}/*"
|
||||
git -C "${TRIAL_DIR}/${SRS_LTE_REPO_NAME}" reset --hard "$SRS_LTE_BRANCH"
|
||||
}
|
||||
|
||||
# If srsLTE trial not provided by user, fetch srsLTE git repo and let the container build it:
|
||||
if [ "x$(ls ${TRIAL_DIR}/srslte.*.tgz 2>/dev/null | wc -l)" = "x0" ]; then
|
||||
have_repo_srslte
|
||||
fi
|
||||
|
||||
. ../jenkins-common.sh
|
||||
IMAGE_SUFFIX="${IMAGE_SUFFIX:-master}"
|
||||
docker_images_require \
|
||||
|
@ -51,8 +89,11 @@ docker run --rm \
|
|||
--network $NET_NAME \
|
||||
--ip 172.18.50.2 \
|
||||
-v $VOL_BASE_DIR/ogt-master:/data \
|
||||
-v /tmp/trial:/tmp/trial \
|
||||
-v "${TRIAL_DIR}:/tmp/trial" \
|
||||
-e "OSMO_GSM_TESTER_OPTS=${OSMO_GSM_TESTER_OPTS}" \
|
||||
-e "SRS_LTE_REPO_NAME=${SRS_LTE_REPO_NAME}" \
|
||||
-e "HOST_USER_ID=$(id -u)" \
|
||||
-e "HOST_GROUP_ID=$(id -g)" \
|
||||
--name ${BUILD_TAG}-ogt-master \
|
||||
$REPO_USER/osmo-gsm-tester
|
||||
|
||||
|
|
|
@ -11,4 +11,39 @@ ip addr add 172.18.50.8/24 dev eth0
|
|||
ip addr add 172.18.50.9/24 dev eth0
|
||||
ip addr add 172.18.50.10/24 dev eth0
|
||||
|
||||
su -c "python3 -u /tmp/osmo-gsm-tester/src/osmo-gsm-tester.py /tmp/trial $OSMO_GSM_TESTER_OPTS" -m jenkins
|
||||
build_srslte() {
|
||||
git_repo_dir="/tmp/trial/${SRS_LTE_REPO_NAME}"
|
||||
if [ ! -d "$git_repo_dir" ]; then
|
||||
echo "No external trial nor git repo provided for srsLTE!"
|
||||
exit 1
|
||||
fi
|
||||
pushd "/tmp/trial"
|
||||
rm -rf inst && mkdir inst
|
||||
rm -rf build && mkdir build && cd build || exit 1
|
||||
cmake -DCMAKE_INSTALL_PREFIX="../inst/" "${git_repo_dir}"
|
||||
set +x; echo; echo; set -x
|
||||
make "-j$(nproc)"
|
||||
set +x; echo; echo; set -x
|
||||
make install
|
||||
this="srslte.build-${BUILD_NUMBER-$(date +%Y-%m-%d_%H_%M_%S)}"
|
||||
tar="${this}.tgz"
|
||||
tar czf "/tmp/trial/$tar" -C "/tmp/trial/inst" .
|
||||
cd "/tmp/trial/" && md5sum "$tar" >>checksums.md5
|
||||
popd
|
||||
}
|
||||
|
||||
# Build srsLTE.git if not provided by host system:
|
||||
if [ "x$(ls /tmp/trial/srslte.*.tgz 2>/dev/null | wc -l)" = "x0" ]; then
|
||||
build_srslte
|
||||
fi
|
||||
|
||||
# Make trial dir avaialable to jenkins user inside container:
|
||||
chown -R jenkins /tmp/trial/
|
||||
|
||||
rc=0
|
||||
su -c "python3 -u /tmp/osmo-gsm-tester/src/osmo-gsm-tester.py /tmp/trial $OSMO_GSM_TESTER_OPTS" -m jenkins || rc=$?
|
||||
|
||||
# Make trial dir again owned by user running the container:
|
||||
chown -R "${HOST_USER_ID}:${HOST_GROUP_ID}" /tmp/trial/
|
||||
|
||||
exit $rc
|
||||
|
|
Loading…
Reference in New Issue