From 7c30666187e7fd331875cea9b4274d6b4b624942 Mon Sep 17 00:00:00 2001 From: Devan Carpenter Date: Sun, 14 Feb 2021 15:59:28 +0100 Subject: [PATCH] CI: add basic gitlab-ci jobs Adds simple jobs for building the the Engine for Debian 10. Pre-built docker images containing des will be pulled down and used to build the Adapter. Upon successful compilation an image containing the build output will be pushed to a docker registry. --- .gitlab-ci-files/common-prepare.yml | 34 +++++++++++++++ .gitlab-ci.yml | 43 +++++++++++++++++++ scripts/debian10/Makefile | 31 +++++++++++++ scripts/debian10/build_pEpJNIAdapter.sh | 28 ++++++++++++ .../pEpJNIAdapter.debian10.Dockerfile | 24 +++++++++++ 5 files changed, 160 insertions(+) create mode 100644 .gitlab-ci-files/common-prepare.yml create mode 100644 .gitlab-ci.yml create mode 100644 scripts/debian10/Makefile create mode 100755 scripts/debian10/build_pEpJNIAdapter.sh create mode 100644 scripts/debian10/pEpJNIAdapter.debian10.Dockerfile diff --git a/.gitlab-ci-files/common-prepare.yml b/.gitlab-ci-files/common-prepare.yml new file mode 100644 index 0000000..14567f1 --- /dev/null +++ b/.gitlab-ci-files/common-prepare.yml @@ -0,0 +1,34 @@ +.ensure_docker: &ensure_docker + # Check for docker and install if missing + - 'which docker || ( sudo apt-get update -y && sudo apt-get install docker.io -y )' + +.ensure_rsync: &ensure_rsync + # Install rsync and deps if missing + - 'which ssh-agent || ( sudo apt-get update -y && sudo apt-get install openssh-client -y )' + - 'which rsync || ( sudo apt-get update -y && sudo apt-get install rsync -y )' + - 'which make || ( sudo apt-get update -y && sudo apt-get install make -y )' + +.enable_insecure_docker_registries: &enable_insecure_docker_registries + # Enable "insecure" docker registries + - | + cat < /tmp/docker-daemon.json + { + "insecure-registries" : ["${DOCKER_REGISTRY_HOST}"] + } + EOD + - sudo cp /tmp/docker-daemon.json /etc/docker/daemon.json + - sudo systemctl restart docker.service + +.standard_job: + tags: [kvm] + before_script: + - *ensure_docker + - *ensure_rsync + - *enable_insecure_docker_registries + +.make_in_docker: + extends: .standard_job + script: + - docker login -u ${DOCKER_REGISTRY_USER} -p ${DOCKER_REGISTRY_PASS} ${DOCKER_REGISTRY_HOST} + - cd scripts/${CI_DISTRO_TARGET} + - make diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..2344ef3 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,43 @@ +include: + - '.gitlab-ci-files/common-prepare.yml' + +stages: + - build + + +# CentOS/RHEL + +centos8:build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "centos8" + +centos8:tagged-build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "centos8" + TAGGED_BUILD: "true" + rules: + - if: $CI_COMMIT_TAG + +# Debian + +debian10:build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "debian10" + DEBIAN_FRONTEND: "noninteractive" + +debian10:tagged-build: + extends: .make_in_docker + stage: build + variables: + CI_DISTRO_TARGET: "debian10" + DEBIAN_FRONTEND: "noninteractive" + TAGGED_BUILD: "true" + rules: + - if: $CI_COMMIT_TAG + diff --git a/scripts/debian10/Makefile b/scripts/debian10/Makefile new file mode 100644 index 0000000..55e980d --- /dev/null +++ b/scripts/debian10/Makefile @@ -0,0 +1,31 @@ +include ../../DEPENDENCIES +export +LIBPEPADAPTER_VERSION=${libpEpAdapter} +PEPENGINE_VERSION=${pEpEngine} +SEQUOIA_VERSION=${sequoia} +CURRENT_DISTRO=$(shell basename $(shell pwd)) +IMAGE_NAME=${DOCKER_REGISTRY_HOST}/pep-$(CURRENT_DISTRO)-jniadapter +DOCKERFILE=pEpJNIAdapter.$(CURRENT_DISTRO).Dockerfile +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: + -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 diff --git a/scripts/debian10/build_pEpJNIAdapter.sh b/scripts/debian10/build_pEpJNIAdapter.sh new file mode 100755 index 0000000..225d262 --- /dev/null +++ b/scripts/debian10/build_pEpJNIAdapter.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env sh +set -exo + +export LC_ALL=en_US.UTF-8 && \ + +# JAVA_HOME (only for the pEpJNIAdapter) +if [ $(uname) == "Linux" ]; then { + export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/javac))); +} fi +if [ $(uname) == "Darwin" ]; then { + export JAVA_HOME=$(dirname $(dirname $(readlink /usr/bin/javac))); +} fi +echo $JAVA_HOME + +cat >local.conf <<__LOCAL__ +PREFIX=${INSTPREFIX} +DEBUG=0 +JAVA_HOME=${JAVA_HOME} +YML2_PATH=${INSTPREFIX}/yml2 +YML2_PROC=${INSTPREFIX}/yml2/yml2proc --encoding=utf8 +#YML2_OPTS=--encoding=utf8 +ENGINE_INC_PATH=${INSTPREFIX}/include +ENGINE_LIB_PATH=${INSTPREFIX}/lib +AD_INC_PATH=${INSTPREFIX}/include +AD_LIB_PATH=${INSTPREFIX}/lib +__LOCAL__ + +make WARN= DEBUG= diff --git a/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile new file mode 100644 index 0000000..ed7f8bc --- /dev/null +++ b/scripts/debian10/pEpJNIAdapter.debian10.Dockerfile @@ -0,0 +1,24 @@ +ARG DOCKER_REGISTRY_HOST +ARG CURRENT_DISTRO +ARG LIBPEPADAPTER_VERSION +ARG PEPENGINE_VERSION +FROM ${DOCKER_REGISTRY_HOST}/pep-${CURRENT_DISTRO}-libpepadapter:${LIBPEPADAPTER_VERSION}_engine-${PEPENGINE_VERSION} + +ENV BUILDROOT /build +ENV INSTPREFIX /install +ENV OUTDIR /out + +### Setup working directory +RUN mkdir ${BUILDROOT}/pEpJNIAdapter +COPY . ${BUILDROOT}/pEpJNIAdapter +USER root +RUN chown -R pep-builder:pep-builder ${BUILDROOT}/pEpJNIAdapter +USER pep-builder +WORKDIR ${BUILDROOT}/pEpJNIAdapter + +ARG PEPJNIADAPTER_VERSION +ARG CURRENT_DISTRO + +### Build libpEpAdapter +RUN sh ./scripts/${CURRENT_DISTRO}/build_pEpJNIAdapter.sh && \ + rm -rf ${BUILDROOT}/*