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