tb.sh: Support for Jenkins builds
StarlingX comuninty builds are moving to a debian based build server. CentOS builds must no run in a tb.sh managed container. - Add support for seperate repo and workspace mounts - Add support for mock/mock-cache mounts - Add support for timestamp qualified workspace - Settings for above via localrc - Add 'status' subcommand to check container state. Signed-off-by: Scott Little <scott.little@windriver.com> Change-Id: I3abd7c0bc0651107e599cb71878464bc7a0ebc5e
This commit is contained in:
parent
88919b76a9
commit
08b18c40ab
20
Dockerfile
20
Dockerfile
|
@ -218,16 +218,6 @@ COPY toCOPY/.inputrc /home/$MYUNAME/
|
|||
COPY toCOPY/generate-cgcs-tis-repo /usr/local/bin
|
||||
COPY toCOPY/generate-cgcs-centos-repo.sh /usr/local/bin
|
||||
|
||||
# ENV setup
|
||||
RUN echo "# Load stx-builder configuration" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "if [[ -r \${HOME}/buildrc ]]; then" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " source \${HOME}/buildrc" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " export PROJECT SRC_BUILD_ENVIRONMENT MYPROJECTNAME MYUNAME" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " export MY_BUILD_CFG MY_BUILD_CFG_RT MY_BUILD_CFG_STD MY_BUILD_DIR MY_BUILD_ENVIRONMENT MY_BUILD_ENVIRONMENT_FILE MY_BUILD_ENVIRONMENT_FILE_RT MY_BUILD_ENVIRONMENT_FILE_STD MY_DEBUG_BUILD_CFG_RT MY_DEBUG_BUILD_CFG_STD MY_LOCAL_DISK MY_MOCK_ROOT MY_REPO MY_REPO_ROOT_DIR MY_SRC_RPM_BUILD_DIR MY_RELEASE MY_WORKSPACE LAYER" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "fi" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "export FORMAL_BUILD=0" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "export PATH=\$MY_REPO/build-tools:\$PATH" >> /etc/profile.d/stx-builder-conf.sh
|
||||
|
||||
# centos locales are broken. this needs to be run after the last yum install/update
|
||||
RUN localedef -i en_US -f UTF-8 en_US.UTF-8
|
||||
|
||||
|
@ -269,6 +259,16 @@ RUN echo "$MYUNAME ALL=(ALL:ALL) NOPASSWD:ALL" >> /etc/sudoers && \
|
|||
sed -i "s/dir-listing.activate/#dir-listing.activate/g" /etc/lighttpd/conf.d/dirlisting.conf && \
|
||||
echo "dir-listing.activate = \"enable\"" >> /etc/lighttpd/conf.d/dirlisting.conf
|
||||
|
||||
# ENV setup
|
||||
RUN echo "# Load stx-builder configuration" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "if [[ -r \${HOME}/buildrc ]]; then" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " source \${HOME}/buildrc" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " export PROJECT SRC_BUILD_ENVIRONMENT MYPROJECTNAME MYUNAME" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo " export MY_BUILD_CFG MY_BUILD_CFG_RT MY_BUILD_CFG_STD MY_BUILD_DIR MY_BUILD_ENVIRONMENT MY_BUILD_ENVIRONMENT_FILE MY_BUILD_ENVIRONMENT_FILE_RT MY_BUILD_ENVIRONMENT_FILE_STD MY_DEBUG_BUILD_CFG_RT MY_DEBUG_BUILD_CFG_STD MY_LOCAL_DISK MY_MOCK_ROOT MY_REPO MY_REPO_ROOT_DIR MY_SRC_RPM_BUILD_DIR MY_RELEASE MY_WORKSPACE LAYER" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "fi" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "export FORMAL_BUILD=0" >> /etc/profile.d/stx-builder-conf.sh && \
|
||||
echo "export PATH=\$MY_REPO/build-tools:\$PATH" >> /etc/profile.d/stx-builder-conf.sh
|
||||
|
||||
RUN useradd -r -u $MYUID -g cgts -m $MYUNAME && \
|
||||
ln -s /home/$MYUNAME/.ssh /mySSH && \
|
||||
rsync -av /etc/skel/ /home/$MYUNAME/
|
||||
|
|
46
buildrc
46
buildrc
|
@ -33,6 +33,13 @@ fi
|
|||
# Real (outside the container) username
|
||||
export USER=${USER:-$(id -un)}
|
||||
|
||||
# avoid calling your project 'build' it will break some SRPMs
|
||||
export PROJECT=${PROJECT:-test}
|
||||
|
||||
# These are used in the Dockerfile, not sure where else
|
||||
export MYUNAME=${MYUNAME:-builder}
|
||||
export MYPROJECTNAME=${PROJECT}
|
||||
|
||||
# Local mirror location
|
||||
HOST_MIRROR_DIR=${HOST_MIRROR_DIR:-${HOME}/starlingx/mirror}
|
||||
|
||||
|
@ -44,9 +51,32 @@ HOST_MIRROR_DIR=${HOST_MIRROR_DIR:-${HOME}/starlingx/mirror}
|
|||
# We remove a leading '/' as having more than one breaks certain bits of the build
|
||||
GUEST_LOCALDISK=${LOCALDISK:-localdisk}
|
||||
GUEST_LOCALDISK=${GUEST_LOCALDISK%/}
|
||||
GUEST_MY_REPO_ROOT_DIR=${MY_REPO_ROOT_DIR:-${GUEST_LOCALDISK}/designer/${MYUNAME}/${PROJECT}}
|
||||
GUEST_MY_REPO_ROOT_DIR=${GUEST_MY_REPO_ROOT_DIR%/}
|
||||
GUEST_MY_WORKSPACE_ROOT_DIR=${MY_WORKSPACE_ROOT_DIR:-${GUEST_LOCALDISK}/loadbuild/${MYUNAME}/${PROJECT}}
|
||||
GUEST_MY_WORKSPACE_ROOT_DIR=${GUEST_MY_WORKSPACE_ROOT_DIR%/}
|
||||
GUEST_MY_REPO=${MY_REPO:-${GUEST_LOCALDISK}/designer/${MYUNAME}/${PROJECT}/cgcs-root}
|
||||
GUEST_MY_REPO=${GUEST_MY_REPO%/}
|
||||
GUEST_MOCK_DIR=${MOCK_DIR:-${GUEST_MY_WORKSPACE_ROOT_DIR}/mock}
|
||||
GUEST_MOCK_DIR=${GUEST_MOCK_DIR%/}
|
||||
GUEST_MOCK_CACHE_DIR=${MOCK_CACHE_DIR:-${GUEST_MY_WORKSPACE_ROOT_DIR}/mock}
|
||||
GUEST_MOCK_CACHE_DIR=${GUEST_MOCK_CACHE_DIR%/}
|
||||
if [[ -n "${TIMESTAMP}" ]]; then
|
||||
DEFAULT_GUEST_MY_WORKSPACE=${GUEST_LOCALDISK}/loadbuild/${MYUNAME}/${PROJECT}/${TIMESTAMP}
|
||||
else
|
||||
DEFAULT_GUEST_MY_WORKSPACE=${GUEST_LOCALDISK}/loadbuild/${MYUNAME}/${PROJECT}
|
||||
fi
|
||||
GUEST_MY_WORKSPACE=${MY_WORKSPACE:-${DEFAULT_GUEST_MY_WORKSPACE}}
|
||||
GUEST_MY_WORKSPACE=${GUEST_MY_WORKSPACE%/}
|
||||
|
||||
# In the docker run command this will be correct for the host side of the mapping
|
||||
LOCALDISK=${HOST_PREFIX}/${GUEST_LOCALDISK}
|
||||
export LOCALDISK=${HOST_PREFIX%/}/${GUEST_LOCALDISK#/}
|
||||
export MY_REPO_ROOT_DIR=${HOST_PREFIX%/}/${GUEST_MY_REPO_ROOT_DIR#/}
|
||||
export MY_REPO=${HOST_PREFIX%/}/${GUEST_MY_REPO#/}
|
||||
export MY_WORKSPACE_ROOT_DIR=${HOST_PREFIX%/}/${GUEST_MY_WORKSPACE_ROOT_DIR#/}
|
||||
export MY_WORKSPACE=${HOST_PREFIX%/}/${GUEST_MY_WORKSPACE#/}
|
||||
export MOCK_DIR=${MOCK_DIR:-${MY_WORKSPACE_ROOT_DIR#/}/mock}
|
||||
export MOCK_CACHE_DIR=${MOCK_CACHE_DIR:-${MY_WORKSPACE_ROOT_DIR#/}/mock-cache}
|
||||
|
||||
|
||||
# Release Variable
|
||||
|
@ -55,13 +85,6 @@ export MY_RELEASE=${MY_RELEASE:-4.0}
|
|||
# Default branch to build
|
||||
export BRANCH=${BRANCH:-intel_r0}
|
||||
|
||||
# avoid calling your project 'build' it will break some SRPMs
|
||||
export PROJECT=${PROJECT:-test}
|
||||
|
||||
# These are used in the Dockerfile, not sure where else
|
||||
export MYUNAME=${MYUNAME:-builder}
|
||||
export MYPROJECTNAME=${PROJECT:-frog1}
|
||||
|
||||
export SRC_BUILD_ENVIRONMENT=${SRC_BUILD_ENVIRONMENT:-$MY_RELEASE}
|
||||
|
||||
# All of the below are dependent on variables defined earlier, right now
|
||||
|
@ -70,11 +93,8 @@ export MY_BUILD_ENVIRONMENT=$MYUNAME-$PROJECT-$SRC_BUILD_ENVIRONMENT
|
|||
export MY_BUILD_ENVIRONMENT_FILE=${MY_BUILD_ENVIRONMENT}.cfg
|
||||
export MY_BUILD_ENVIRONMENT_FILE_STD=${MY_BUILD_ENVIRONMENT}-std.cfg
|
||||
export MY_BUILD_ENVIRONMENT_FILE_RT=${MY_BUILD_ENVIRONMENT}-rt.cfg
|
||||
export MY_BUILD_DIR=${LOCALDISK}/loadbuild/$MYUNAME/$PROJECT
|
||||
export MY_WORKSPACE=$MY_BUILD_DIR
|
||||
export MY_LOCAL_DISK=${LOCALDISK}/designer/$MYUNAME
|
||||
export MY_REPO_ROOT_DIR=$MY_LOCAL_DISK/$PROJECT
|
||||
export MY_REPO=$MY_REPO_ROOT_DIR/cgcs-root
|
||||
export MY_BUILD_DIR=${MY_WORKSPACE}
|
||||
export MY_WORKSPACE=${MY_BUILD_DIR}
|
||||
export MY_SRC_RPM_BUILD_DIR=$MY_BUILD_DIR/rpmbuild
|
||||
export MY_BUILD_CFG=$MY_WORKSPACE/$MY_BUILD_ENVIRONMENT_FILE
|
||||
export MY_BUILD_CFG_STD=$MY_WORKSPACE/std/${MY_BUILD_ENVIRONMENT_FILE_STD}
|
||||
|
|
90
tb.sh
90
tb.sh
|
@ -3,9 +3,14 @@
|
|||
#
|
||||
# Subcommands:
|
||||
# env - Display a selection of configuration values
|
||||
# exec - Starts a shell inside a running container
|
||||
# run - Starts a container
|
||||
# stop - Stops a running container
|
||||
# create - Create a docker image customized for the current localrc settings
|
||||
# create_no_cache - Create a docker image customized for the current localrc settings, but do NOT us the docker cache
|
||||
# run - Starts a build container
|
||||
# exec - Starts a shell inside a running build container
|
||||
# status - Check if the build container is running
|
||||
# stop - Stops a build container
|
||||
# kill - Kill the build container
|
||||
# clean -
|
||||
#
|
||||
# Configuration
|
||||
# tb.sh expects to find its configuration file buildrc in the current
|
||||
|
@ -21,8 +26,18 @@ fi
|
|||
|
||||
CMD=$1
|
||||
|
||||
TC_CONTAINER_NAME=${MYUNAME}-centos-builder
|
||||
TC_CONTAINER_TAG=local/${MYUNAME}-stx-builder:7.8
|
||||
ROOT_NAME=${MYUNAME}
|
||||
if [[ -n "${PROJECT}" ]]; then
|
||||
ROOT_NAME+="-${PROJECT,,}"
|
||||
fi
|
||||
if [[ -n "${LAYER}" ]]; then
|
||||
ROOT_NAME+="-${LAYER,,}"
|
||||
fi
|
||||
if [[ -n "${TIMESTAMP}" ]]; then
|
||||
ROOT_NAME+="-${TIMESTAMP,,}"
|
||||
fi
|
||||
TC_CONTAINER_NAME="${ROOT_NAME}-centos-builder"
|
||||
TC_IMAGE_NAME=local/${ROOT_NAME}-stx-builder:7.8
|
||||
TC_DOCKERFILE=Dockerfile
|
||||
NO_CACHE=0
|
||||
|
||||
|
@ -43,7 +58,7 @@ function create_container {
|
|||
${EXTRA_ARGS} \
|
||||
--ulimit core=0 \
|
||||
--network host \
|
||||
-t ${TC_CONTAINER_TAG} \
|
||||
-t ${TC_IMAGE_NAME} \
|
||||
-f ${TC_DOCKERFILE} \
|
||||
.
|
||||
}
|
||||
|
@ -57,15 +72,41 @@ function exec_container {
|
|||
|
||||
function run_container {
|
||||
# create localdisk
|
||||
mkdir -p ${LOCALDISK}/designer/${MYUNAME}/${PROJECT}
|
||||
echo "Creating ${MY_WORKSPACE_ROOT_DIR}, ${MY_REPO_ROOT_DIR}, ${HOST_MIRROR_DIR}/CentOS"
|
||||
mkdir -p ${MY_WORKSPACE_ROOT_DIR}
|
||||
mkdir -p ${MY_REPO_ROOT_DIR}
|
||||
#create centOS mirror
|
||||
mkdir -p ${HOST_MIRROR_DIR}/CentOS
|
||||
|
||||
local extra_mounts=""
|
||||
|
||||
if [[ -d "${MY_WORKSPACE_ROOT_DIR}" ]] && \
|
||||
[[ -d "${MY_REPO_ROOT_DIR}" ]] && \
|
||||
[[ -n "${MOCK_DIR}" ]] && [[ -n "${MOCK_CACHE_DIR}" ]]; then
|
||||
if [[ ! -d "${MOCK_DIR}" ]]; then
|
||||
mkdir -p "${MOCK_DIR}"
|
||||
chmod 775 "${MOCK_DIR}"
|
||||
fi
|
||||
if [[ ! -d "${MOCK_CACHE_DIR}" ]]; then
|
||||
mkdir -p "${MOCK_CACHE_DIR}"
|
||||
chmod 775 "${MOCK_CACHE_DIR}"
|
||||
fi
|
||||
extra_mounts+="-v $(readlink -f ${MY_WORKSPACE_ROOT_DIR}):/${GUEST_MY_WORKSPACE_ROOT_DIR} "
|
||||
extra_mounts+="-v $(readlink -f ${MY_REPO_ROOT_DIR}):/${GUEST_MY_REPO_ROOT_DIR} "
|
||||
extra_mounts+="-v $(readlink -f ${MOCK_DIR}):/localdisk/loadbuild/mock "
|
||||
extra_mounts+="-v $(readlink -f ${MOCK_CACHE_DIR}):/localdisk/loadbuild/mock-cache "
|
||||
elif [ -d "${LOCALDISK}" ]; then
|
||||
extra_mounts+="-v $(readlink -f ${LOCALDISK}):/${GUEST_LOCALDISK} "
|
||||
else
|
||||
echo "Can't find '${LOCALDISK}' "
|
||||
exit 1
|
||||
fi
|
||||
|
||||
docker run -it --rm \
|
||||
--name ${TC_CONTAINER_NAME} \
|
||||
--detach \
|
||||
$extra_mounts \
|
||||
-v /var/run/docker.sock:/var/run/docker.sock \
|
||||
-v $(readlink -f ${LOCALDISK}):/${GUEST_LOCALDISK} \
|
||||
-v ${HOST_MIRROR_DIR}:/import/mirrors:ro \
|
||||
-v /sys/fs/cgroup:/sys/fs/cgroup:ro \
|
||||
-v ~/.ssh:/mySSH:ro \
|
||||
|
@ -75,7 +116,16 @@ function run_container {
|
|||
-e MYUNAME=${MYUNAME} \
|
||||
--privileged=true \
|
||||
--security-opt seccomp=unconfined \
|
||||
${TC_CONTAINER_TAG}
|
||||
${TC_IMAGE_NAME}
|
||||
}
|
||||
|
||||
function status_container {
|
||||
docker container ls -f name=${TC_CONTAINER_NAME}
|
||||
}
|
||||
|
||||
function inspect_container {
|
||||
echo docker container inspect ${TC_CONTAINER_NAME}
|
||||
docker container inspect ${TC_CONTAINER_NAME}
|
||||
}
|
||||
|
||||
function stop_container {
|
||||
|
@ -88,26 +138,36 @@ function kill_container {
|
|||
|
||||
function clean_container {
|
||||
docker rm ${TC_CONTAINER_NAME} || true
|
||||
docker image rm ${TC_CONTAINER_TAG}
|
||||
docker image rm ${TC_IMAGE_NAME}
|
||||
}
|
||||
|
||||
function usage {
|
||||
echo "$0 [create|create_no_cache|run|exec|env|stop|kill|clean]"
|
||||
echo "$0 [create|create_no_cache|run|exec|env|status|stop|kill|clean]"
|
||||
}
|
||||
|
||||
case $CMD in
|
||||
env)
|
||||
echo "LOCALDISK=${LOCALDISK}"
|
||||
echo "GUEST_LOCALDISK=${GUEST_LOCALDISK}"
|
||||
echo "MY_REPO_ROOT_DIR=${MY_REPO_ROOT_DIR}"
|
||||
echo "GUEST_MY_REPO_ROOT_DIR=${GUEST_MY_REPO_ROOT_DIR}"
|
||||
echo "MY_REPO=${MY_REPO}"
|
||||
echo "GUEST_MY_REPO=${GUEST_MY_REPO}"
|
||||
echo "MY_WORKSPACE_ROOT_DIR=${MY_WORKSPACE_ROOT_DIR}"
|
||||
echo "GUEST_MY_WORKSPACE_ROOT_DIR=${GUEST_MY_WORKSPACE_ROOT_DIR}"
|
||||
echo "MY_WORKSPACE=${MY_WORKSPACE}"
|
||||
echo "GUEST_MY_WORKSPACE=${GUEST_MY_WORKSPACE}"
|
||||
echo "TC_DOCKERFILE=${TC_DOCKERFILE}"
|
||||
echo "TC_CONTAINER_NAME=${TC_CONTAINER_NAME}"
|
||||
echo "TC_CONTAINER_TAG=${TC_CONTAINER_TAG}"
|
||||
echo "TC_IMAGE_NAME=${TC_IMAGE_NAME}"
|
||||
echo "SOURCE_REMOTE_NAME=${SOURCE_REMOTE_NAME}"
|
||||
echo "SOURCE_REMOTE_URI=${SOURCE_REMOTE_URI}"
|
||||
echo "HOST_MIRROR_DIR=${HOST_MIRROR_DIR}"
|
||||
echo "MY_RELEASE=${MY_RELEASE}"
|
||||
echo "MY_REPO_ROOT_DIR=${MY_REPO_ROOT_DIR}"
|
||||
echo "TIMESTAMP=${TIMESTAMP}"
|
||||
echo "LAYER=${LAYER}"
|
||||
echo "PROJECT=${PROJECT}"
|
||||
echo "MYUNAME=${MYUNAME}"
|
||||
echo "MY_EMAIL=${MY_EMAIL}"
|
||||
;;
|
||||
|
@ -124,6 +184,12 @@ case $CMD in
|
|||
run)
|
||||
run_container
|
||||
;;
|
||||
status)
|
||||
status_container
|
||||
;;
|
||||
inspect)
|
||||
inspect_container
|
||||
;;
|
||||
stop)
|
||||
stop_container
|
||||
;;
|
||||
|
|
Loading…
Reference in New Issue