Browse Source
This commit cleans up the existing CI scripts a bit while adding jobs to build RPM packages. The directory structure allows for easily adding more package targets. RPM outputs will only be uploaded on tagged commits.pull/14/head

11 changed files with 269 additions and 5 deletions
@ -0,0 +1,30 @@ |
|||||
|
ARG DOCKER_REGISTRY_HOST |
||||
|
ARG CURRENT_DISTRO |
||||
|
ARG LIBPEPADAPTER_VERSION |
||||
|
FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-libpepadapter:${LIBPEPADAPTER_VERSION} |
||||
|
|
||||
|
ENV BUILDROOT /build |
||||
|
ENV INSTPREFIX /install |
||||
|
ENV OUTDIR /out |
||||
|
|
||||
|
ARG JNIADAPTER_VERSION |
||||
|
|
||||
|
## Install system dependencies |
||||
|
USER root |
||||
|
RUN yum -y install time java-1.8.0-openjdk java-1.8.0-openjdk-devel && \ |
||||
|
yum clean all |
||||
|
|
||||
|
## Build and install pEpJNIAdapter |
||||
|
### Setup working directory |
||||
|
RUN mkdir ${BUILDROOT}/pEpJNIAdapter |
||||
|
COPY . ${BUILDROOT}/pEpJNIAdapter |
||||
|
RUN chown -R pep-builder:pep-builder ${BUILDROOT}/pEpJNIAdapter |
||||
|
USER pep-builder |
||||
|
WORKDIR ${BUILDROOT}/pEpJNIAdapter |
||||
|
|
||||
|
RUN sh ./scripts/common/build_pEpJNIAdapter.sh && \ |
||||
|
install -m 644 -t ${INSTPREFIX}/lib dist/libpEpJNI.a && \ |
||||
|
install -m 755 -t ${INSTPREFIX}/lib dist/libpEpJNI.so && \ |
||||
|
install -m 644 -t ${INSTPREFIX}/lib dist/pEp.jar && \ |
||||
|
echo "${pepjni_ver}">${INSTPREFIX}/pEp_JNI.ver && \ |
||||
|
rm -rf ${BUILDROOT}/* |
@ -0,0 +1,79 @@ |
|||||
|
include ../../DEPENDENCIES |
||||
|
export
|
||||
|
LIBPEPADAPTER_VERSION=${libpEpAdapter} |
||||
|
PEPENGINE_VERSION=${pEpEngine} |
||||
|
SEQUOIA_VERSION=${sequoia} |
||||
|
CURRENT_DISTRO=${CI_DISTRO_TARGET} |
||||
|
IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CURRENT_DISTRO)-jniadapter |
||||
|
DOCKERFILE=JNIAdapter.$(CURRENT_DISTRO).Dockerfile |
||||
|
PKG_BUILD_IMAGE=${DOCKER_REGISTRY_HOST}/fpm-$(CURRENT_DISTRO) |
||||
|
PKG_INSTALL_PATH=/opt/pEp |
||||
|
PKG_NAME=pEpJNIAdapter |
||||
|
PKG_DESCRIPTION="p≡p JNI Adapter Binary RPM Package" |
||||
|
PKG_DEPENDS="libpEpAdapter --depends java-1.8.0-openjdk" |
||||
|
PKG_INSTALL_PATH_STRING="/ /package/lib=${PKG_INSTALL_PATH}" |
||||
|
IS_TAGGED=${TAGGED_BUILD} |
||||
|
ifeq ($(IS_TAGGED), true) |
||||
|
# $CI_COMMIT_TAG is a predefined environment variable from Gitlab
|
||||
|
PEPJNIADAPTER_VERSION=${CI_COMMIT_TAG} |
||||
|
else |
||||
|
PEPJNIADAPTER_VERSION=$(shell git rev-parse --short=8 HEAD) |
||||
|
endif |
||||
|
all: build |
||||
|
|
||||
|
build: |
||||
|
-docker pull $(IMAGE_NAME):latest |
||||
|
cd ../../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \
|
||||
|
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \
|
||||
|
--build-arg PEPJNIADAPTER_VERSION=$(PEPJNIADAPTER_VERSION) \
|
||||
|
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \
|
||||
|
--build-arg PEPENGINE_VERSION=$(PEPENGINE_VERSION) \
|
||||
|
--build-arg SEQUOIA_VERSION=$(SEQUOIA_VERSION) \
|
||||
|
--cache-from $(IMAGE_NAME):latest \
|
||||
|
--tag=$(IMAGE_NAME):$(PEPJNIADAPTER_VERSION) \
|
||||
|
--tag=$(IMAGE_NAME):$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) \
|
||||
|
--tag=$(IMAGE_NAME):latest \
|
||||
|
-f scripts/${CURRENT_DISTRO}/$(DOCKERFILE) . |
||||
|
docker push $(IMAGE_NAME):$(PEPJNIADAPTER_VERSION) |
||||
|
docker push $(IMAGE_NAME):$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) |
||||
|
docker push $(IMAGE_NAME):latest |
||||
|
|
||||
|
java8: |
||||
|
-docker pull $(IMAGE_NAME)-java8:latest |
||||
|
cd ../../ && docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \
|
||||
|
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \
|
||||
|
--build-arg PEPJNIADAPTER_VERSION=$(PEPJNIADAPTER_VERSION) \
|
||||
|
--build-arg LIBPEPADAPTER_VERSION=$(LIBPEPADAPTER_VERSION) \
|
||||
|
--build-arg PEPENGINE_VERSION=$(PEPENGINE_VERSION) \
|
||||
|
--build-arg SEQUOIA_VERSION=$(SEQUOIA_VERSION) \
|
||||
|
--cache-from $(IMAGE_NAME):latest \
|
||||
|
--tag=$(IMAGE_NAME)-java8:$(PEPJNIADAPTER_VERSION) \
|
||||
|
--tag=$(IMAGE_NAME)-java8:$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) \
|
||||
|
--tag=$(IMAGE_NAME)-java8:latest \
|
||||
|
-f scripts/${CURRENT_DISTRO}/java8.$(DOCKERFILE) . |
||||
|
docker push $(IMAGE_NAME)-java8:$(PEPJNIADAPTER_VERSION) |
||||
|
docker push $(IMAGE_NAME)-java8:$(PEPJNIADAPTER_VERSION)_libpepadapter-$(LIBPEPADAPTER_VERSION)_engine-$(PEPENGINE_VERSION) |
||||
|
docker push $(IMAGE_NAME)-java8:latest |
||||
|
rpm: |
||||
|
-docker pull $(PKG_BUILD_IMAGE)-jniadapter:latest |
||||
|
@docker build --build-arg CURRENT_DISTRO=$(CURRENT_DISTRO) \
|
||||
|
--build-arg PEPJNIADAPTER_VERSION=$(PEPJNIADAPTER_VERSION) \
|
||||
|
--build-arg DOCKER_REGISTRY_HOST=${DOCKER_REGISTRY_HOST} \
|
||||
|
--build-arg PKG_INSTALL_PATH=$(PKG_INSTALL_PATH) \
|
||||
|
--cache-from $(PKG_BUILD_IMAGE)-jniadapter:latest \
|
||||
|
--tag=$(PKG_BUILD_IMAGE)-jniadapter:$(PEPJNIADAPTER_VERSION) \
|
||||
|
--tag=$(PKG_BUILD_IMAGE)-jniadapter:latest \
|
||||
|
packages/rpm |
||||
|
@docker push $(PKG_BUILD_IMAGE)-jniadapter:$(PEPJNIADAPTER_VERSION) |
||||
|
@docker push $(PKG_BUILD_IMAGE)-jniadapter:latest |
||||
|
@docker run -e PEPJNIADAPTER_VERSION=$(PEPJNIADAPTER_VERSION) \
|
||||
|
-e PKG_VERSION=$(LIBPEPADAPTER_VERSION) \
|
||||
|
-e PKG_INSTALL_PATH=$(PKG_INSTALL_PATH) \
|
||||
|
-e PKG_NAME=$(PKG_NAME) \
|
||||
|
-e PKG_DESCRIPTION=$(PKG_DESCRIPTION) \
|
||||
|
-e PKG_DEPENDS=$(PKG_DEPENDS) \
|
||||
|
-e PKG_INSTALL_PATH_STRING=$(PKG_INSTALL_PATH_STRING) \
|
||||
|
--rm -v $(shell pwd)/packages/rpm/create-jniadapter-rpm.sh:/usr/bin/create-rpm.sh:ro \
|
||||
|
-v $(shell pwd)/out:/out \
|
||||
|
-w / $(PKG_BUILD_IMAGE)-jniadapter:${PEPJNIADAPTER_VERSION} \
|
||||
|
/usr/bin/create-rpm.sh |
@ -0,0 +1,18 @@ |
|||||
|
ARG DOCKER_REGISTRY_HOST |
||||
|
ARG CURRENT_DISTRO |
||||
|
ARG PEPJNIADAPTER_VERSION |
||||
|
FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-jniadapter:${PEPJNIADAPTER_VERSION} AS pEpBuild |
||||
|
|
||||
|
FROM ${DOCKER_REGISTRY_HOST}/fpm-${CURRENT_DISTRO}:latest |
||||
|
# whatever is required for building should be installed in this image; just like BuildRequires: for RPM specs |
||||
|
RUN yum -y install readline-devel epel-release && \ |
||||
|
yum -y install patchelf chrpath |
||||
|
|
||||
|
ARG PEP_MACHINE_DIR |
||||
|
COPY --from=pEpBuild /install /source |
||||
|
|
||||
|
COPY install.sh /usr/local/bin/install.sh |
||||
|
|
||||
|
ENV INSTPREFIX /source |
||||
|
|
||||
|
RUN /usr/local/bin/install.sh |
@ -0,0 +1,25 @@ |
|||||
|
#!/bin/bash -ex |
||||
|
# we should always set proper ownership before exiting, otherwise |
||||
|
# the created packages will have root:root ownership and we'll be unable |
||||
|
# to delete them from our host. |
||||
|
trap 'chown -R --reference /usr/bin/create-rpm.sh /out/' EXIT |
||||
|
|
||||
|
# the source directory is mounted read-only to prevent issues where the build |
||||
|
# could alter the source; we should copy it somewhere inside the container |
||||
|
cd /source/out |
||||
|
ls -alh |
||||
|
tree |
||||
|
INSTALL_TOP=/package |
||||
|
mkdir -p ${INSTALL_TOP}/lib |
||||
|
cp -ar lib/* ${INSTALL_TOP}/lib/. |
||||
|
|
||||
|
|
||||
|
cd /out |
||||
|
|
||||
|
#this would be the no-signature command line |
||||
|
fpm -t rpm -s dir \ |
||||
|
-n ${PKG_NAME} \ |
||||
|
--version ${PKG_VERSION} \ |
||||
|
--description "${PKG_DESCRIPTION}" \ |
||||
|
--depends ${PKG_DEPENDS} \ |
||||
|
-C ${PKG_INSTALL_PATH_STRING} |
@ -0,0 +1,34 @@ |
|||||
|
#!/bin/bash |
||||
|
set -exuo pipefail |
||||
|
|
||||
|
# =========================== |
||||
|
# Distro |
||||
|
# =========================== |
||||
|
|
||||
|
echo 7 >"${INSTPREFIX}/D_REVISION" |
||||
|
|
||||
|
D_REV=$(cat ${INSTPREFIX}/D_REVISION) |
||||
|
D="" |
||||
|
|
||||
|
D=${INSTPREFIX}/out |
||||
|
|
||||
|
mkdir -p ${INSTPREFIX}/out |
||||
|
rm -rf ${INSTPREFIX}/out/* |
||||
|
mkdir -p "$D"/{bin,ld,lib/pEp,share/pEp,include/pEp} |
||||
|
|
||||
|
tree ${INSTPREFIX} |
||||
|
|
||||
|
# pEpJNIAdapter |
||||
|
cp -a ${INSTPREFIX}/lib/libpEpJNI.a "$D"/lib |
||||
|
cp -a ${INSTPREFIX}/lib/libpEpJNI.so "$D"/lib |
||||
|
cp -a ${INSTPREFIX}/lib/pEp.jar "$D"/lib |
||||
|
|
||||
|
# versions |
||||
|
cp -a ${INSTPREFIX}/*.ver "$D" |
||||
|
|
||||
|
find "$D"/lib -maxdepth 1 -type f -print -exec patchelf --set-rpath '$ORIGIN/pEp:$ORIGIN' {} \; |
||||
|
find "$D"/lib/pEp -type f -print -exec patchelf --set-rpath '$ORIGIN' {} \; |
||||
|
find "$D"/bin -type f -print -exec patchelf --set-rpath '$ORIGIN/../lib/pEp:$ORIGIN/../lib' {} \; |
||||
|
|
||||
|
ls -lh "$D"/* |
||||
|
du -sch "$D" |
Loading…
Reference in new issue