diff --git a/Jenkinsfile b/Jenkinsfile index 22f33da..50473d9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,39 +1,63 @@ @Library('shared-libraries') _ + pipeline{ + agent none; + environment{ - JAVA_HOME_DIR="/home/builder/java/jdk-11.0.2" + JAVA_HOME_DIR="/home/builder/java/jdk-17.0.2" GRADLE_DIR =".gradle" } + options { checkoutToSubdirectory 'marklogic-python-client' - buildDiscarder logRotator(artifactDaysToKeepStr: '7', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '') + buildDiscarder logRotator(artifactDaysToKeepStr: '7', artifactNumToKeepStr: '', daysToKeepStr: '30', numToKeepStr: '5') } + stages{ stage('tests'){ agent {label 'devExpLinuxPool'} steps{ - script{ - copyRPM 'Latest','11' - setUpML '$WORKSPACE/xdmp/src/Mark*.rpm' - sh label:'deploy project', script: '''#!/bin/bash - export JAVA_HOME=$JAVA_HOME_DIR - export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR - export PATH=$GRADLE_USER_HOME:$JAVA_HOME/bin:$PATH - cd marklogic-python-client/test-app - ./gradlew -i mlDeploy -PmlPassword=admin - ''' - sh label:'Run tests', script: '''#!/bin/bash - cd marklogic-python-client - python -m venv .venv; - source .venv/bin/activate; - pip install poetry; - poetry install; - pytest --junitxml=TestReport.xml || true - ''' - junit 'marklogic-python-client/TestReport.xml' - } + cleanupDocker() + sh label:'mlsetup', script: '''#!/bin/bash + echo "Removing any running MarkLogic server and clean up MarkLogic data directory" + sudo /usr/local/sbin/mladmin remove + docker-compose down -v || true + sudo /usr/local/sbin/mladmin cleandata + cd marklogic-python-client/test-app + MARKLOGIC_LOGS_VOLUME=/tmp docker-compose up -d --build + ''' + sh label:'deploy project', script: '''#!/bin/bash + export JAVA_HOME=$JAVA_HOME_DIR + export GRADLE_USER_HOME=$WORKSPACE/$GRADLE_DIR + export PATH=$GRADLE_USER_HOME:$JAVA_HOME/bin:$PATH + cd marklogic-python-client/test-app + echo "Waiting for MarkLogic server to initialize." + sleep 60s + ./gradlew -i mlDeploy -PmlPassword=admin + ''' + // 'set -e' causes the script to fail if any command fails. + sh label:'Run tests', script: '''#!/bin/bash + set -e + cd marklogic-python-client + python -m venv .venv; + source .venv/bin/activate; + pip install poetry; + poetry install; + pytest --junitxml=TestReport.xml || true + ''' + junit 'marklogic-python-client/TestReport.xml' + } + post{ + always{ + updateWorkspacePermissions() + sh label:'mlcleanup', script: '''#!/bin/bash + cd marklogic-python-client/test-app + docker-compose down -v || true + ''' + cleanupDocker() + } } } } -} \ No newline at end of file +} diff --git a/test-app/.env b/test-app/.env new file mode 100644 index 0000000..d4314d1 --- /dev/null +++ b/test-app/.env @@ -0,0 +1,6 @@ +# Defines environment variables for docker-compose. +# Can be overridden via e.g. `MARKLOGIC_IMAGE=latest-10.0 docker-compose up -d --build`. +MARKLOGIC_IMAGE=ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi:latest-12 + +# Defaults to a useful value for local development. +MARKLOGIC_LOGS_VOLUME=./docker/marklogic/logs diff --git a/test-app/docker-compose.yml b/test-app/docker-compose.yml index 825ae3d..6a2d1bb 100644 --- a/test-app/docker-compose.yml +++ b/test-app/docker-compose.yml @@ -3,7 +3,7 @@ name: docker-tests-marklogic_python services: marklogic: - image: "ml-docker-db-dev-tierpoint.bed-artifactory.bedford.progress.com/marklogic/marklogic-server-ubi-rootless:latest-12" + image: "${MARKLOGIC_IMAGE}" platform: linux/amd64 environment: - INSTALL_CONVERTERS=true @@ -11,7 +11,7 @@ services: - MARKLOGIC_ADMIN_USERNAME=admin - MARKLOGIC_ADMIN_PASSWORD=admin volumes: - - ./docker/marklogic/logs:/var/opt/MarkLogic/Logs + - ${MARKLOGIC_LOGS_VOLUME}:/var/opt/MarkLogic/Logs ports: - "8000-8002:8000-8002" - "8030-8031:8030-8031"