| /* | |
| * Copyright (c) 2018-2021 Oracle and/or its affiliates. All rights reserved. | |
| * Copyright (c) 2022 Contributors to the Eclipse Foundation | |
| * | |
| * This program and the accompanying materials are made available under the | |
| * terms of the Eclipse Public License v. 2.0, which is available at | |
| * http://www.eclipse.org/legal/epl-2.0. | |
| * | |
| * This Source Code may also be made available under the following Secondary | |
| * Licenses when the conditions for such availability set forth in the | |
| * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, | |
| * version 2 with the GNU Classpath Exception, which is available at | |
| * https://www.gnu.org/software/classpath/license.html. | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 | |
| */ | |
| // the label is unique and identifies the pod descriptor and its resulting pods | |
| // without this, the agent could be using a pod created from a different descriptor | |
| env.label = "glassfish-ci-pod-${UUID.randomUUID().toString()}" | |
| // Docker image defined in this project in [glassfish]/etc/docker/Dockerfile | |
| env.gfImage = "ee4jglassfish/ci:tini-jdk-11.0.10" | |
| def jobs = [ | |
| "verifyPhase", | |
| "cdi_all", | |
| "ql_gf_full_profile_all", | |
| "ql_gf_web_profile_all", | |
| "web_jsp", | |
| "ejb_group_1", | |
| "ejb_group_2", | |
| "ejb_group_3", | |
| "ejb_group_embedded", | |
| "batch_all", | |
| "connector_group_1", | |
| "connector_group_2", | |
| "connector_group_3", | |
| "connector_group_4", | |
| "jdbc_all", | |
| "persistence_all" | |
| ] | |
| def parallelStagesMap = jobs.collectEntries { | |
| ["${it}": generateStage(it)] | |
| } | |
| def generateStage(job) { | |
| if (job == 'verifyPhase') { | |
| return generateMvnPodTemplate(job) | |
| } else { | |
| return generateAntPodTemplate(job) | |
| } | |
| } | |
| def generateMvnPodTemplate(job) { | |
| return { | |
| podTemplate( | |
| inheritFrom: "${env.label}", | |
| containers: [ | |
| containerTemplate( | |
| name: "glassfish-build", | |
| image: "${env.gfImage}", | |
| resourceRequestMemory: "7Gi", | |
| resourceRequestCpu: "2650m" | |
| ) | |
| ] | |
| ) { | |
| node(label) { | |
| stage("${job}") { | |
| container('glassfish-build') { | |
| retry(5) { | |
| sleep 1 | |
| checkout scm | |
| } | |
| timeout(time: 1, unit: 'HOURS') { | |
| sh """ | |
| mvn clean install | |
| """ | |
| junit testResults: '**/*-reports/*.xml', allowEmptyResults: false | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| def generateAntPodTemplate(job) { | |
| return { | |
| podTemplate( | |
| inheritFrom: "${env.label}", | |
| containers: [ | |
| containerTemplate( | |
| name: "glassfish-build", | |
| image: "${env.gfImage}", | |
| resourceRequestMemory: "4Gi", | |
| resourceRequestCpu: "2650m" | |
| ) | |
| ] | |
| ) { | |
| node(label) { | |
| stage("${job}") { | |
| container('glassfish-build') { | |
| unstash 'build-bundles' | |
| sh """ | |
| mkdir -p ${WORKSPACE}/appserver/tests | |
| tar -xzf ${WORKSPACE}/bundles/appserv_tests.tar.gz -C ${WORKSPACE}/appserver/tests | |
| """ | |
| try { | |
| timeout(time: 1, unit: 'HOURS') { | |
| sh """ | |
| export CLASSPATH=${WORKSPACE}/glassfish6/javadb | |
| ${WORKSPACE}/appserver/tests/gftest.sh run_test ${job} | |
| """ | |
| } | |
| } finally { | |
| archiveArtifacts artifacts: "${job}-results.tar.gz" | |
| junit testResults: 'results/junitreports/*.xml', allowEmptyResults: false | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| pipeline { | |
| agent { | |
| kubernetes { | |
| label "${env.label}" | |
| yaml """ | |
| apiVersion: v1 | |
| kind: Pod | |
| metadata: | |
| spec: | |
| containers: | |
| - name: jnlp | |
| image: jenkins/inbound-agent:4.11-1-alpine-jdk11 | |
| imagePullPolicy: IfNotPresent | |
| env: | |
| - name: JAVA_TOOL_OPTIONS | |
| value: "-Xmx768m -Xss768k" | |
| resources: | |
| # fixes random failure: minimum cpu usage per Pod is 200m, but request is 100m. | |
| # affects performance on large repositories | |
| limits: | |
| memory: "1200Mi" | |
| cpu: "300m" | |
| requests: | |
| memory: "1200Mi" | |
| cpu: "300m" | |
| - name: glassfish-build | |
| image: ${env.gfImage} | |
| args: | |
| - cat | |
| tty: true | |
| imagePullPolicy: Always | |
| volumeMounts: | |
| - name: "jenkins-home" | |
| mountPath: "/home/jenkins" | |
| readOnly: false | |
| - name: maven-repo-shared-storage | |
| mountPath: /home/jenkins/.m2/repository | |
| - name: settings-xml | |
| mountPath: /home/jenkins/.m2/settings.xml | |
| subPath: settings.xml | |
| readOnly: true | |
| - name: settings-security-xml | |
| mountPath: /home/jenkins/.m2/settings-security.xml | |
| subPath: settings-security.xml | |
| readOnly: true | |
| - name: maven-repo-local-storage | |
| mountPath: "/home/jenkins/.m2/repository/org/glassfish/main" | |
| env: | |
| - name: "MAVEN_OPTS" | |
| value: "-Duser.home=/home/jenkins -Xmx2500m -Xss768k -XX:+UseStringDeduplication" | |
| - name: "MVN_EXTRA" | |
| value: "--batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" | |
| - name: JAVA_TOOL_OPTIONS | |
| value: "-Xmx2g -Xss768k -XX:+UseStringDeduplication" | |
| resources: | |
| limits: | |
| memory: "12Gi" | |
| cpu: "8000m" | |
| requests: | |
| memory: "7Gi" | |
| cpu: "4000m" | |
| volumes: | |
| - name: "jenkins-home" | |
| emptyDir: {} | |
| - name: maven-repo-shared-storage | |
| persistentVolumeClaim: | |
| claimName: glassfish-maven-repo-storage | |
| - name: settings-xml | |
| secret: | |
| secretName: m2-secret-dir | |
| items: | |
| - key: settings.xml | |
| path: settings.xml | |
| - name: settings-security-xml | |
| secret: | |
| secretName: m2-secret-dir | |
| items: | |
| - key: settings-security.xml | |
| path: settings-security.xml | |
| - name: maven-repo-local-storage | |
| emptyDir: {} | |
| """ | |
| } | |
| } | |
| environment { | |
| S1AS_HOME = "${WORKSPACE}/glassfish6/glassfish" | |
| APS_HOME = "${WORKSPACE}/appserver/tests/appserv-tests" | |
| TEST_RUN_LOG = "${WORKSPACE}/tests-run.log" | |
| GF_INTERNAL_ENV = credentials('gf-internal-env') | |
| PORT_ADMIN=4848 | |
| PORT_HTTP=8080 | |
| PORT_HTTPS=8181 | |
| } | |
| options { | |
| buildDiscarder(logRotator(numToKeepStr: '10')) | |
| // to allow re-running a test stage | |
| preserveStashes() | |
| // issue related to default 'implicit' checkout, disable it | |
| skipDefaultCheckout() | |
| // abort pipeline if previous stage is unstable | |
| skipStagesAfterUnstable() | |
| // show timestamps in logs | |
| timestamps() | |
| // global timeout, abort after 6 hours | |
| timeout(time: 6, unit: 'HOURS') | |
| } | |
| stages { | |
| stage('build') { | |
| agent { | |
| kubernetes { | |
| label "${env.label}" | |
| } | |
| } | |
| steps { | |
| container('glassfish-build') { | |
| timeout(time: 1, unit: 'HOURS') { | |
| checkout scm | |
| sh ''' | |
| echo Maven version | |
| mvn -v | |
| echo User | |
| id | |
| echo Uname | |
| uname -a | |
| # Until we fix ANTLR in cmp-support-sqlstore, broken in parallel builds. Just -Pfast after the fix. | |
| mvn clean install -Pfastest,staging -T4C | |
| ./gfbuild.sh archive_bundles | |
| mvn clean | |
| tar -c -C ${WORKSPACE}/appserver/tests common_test.sh gftest.sh appserv-tests quicklook | gzip --fast > ${WORKSPACE}/bundles/appserv_tests.tar.gz | |
| ls -la ${WORKSPACE}/bundles | |
| ''' | |
| archiveArtifacts artifacts: 'bundles/*.zip' | |
| stash includes: 'bundles/*', name: 'build-bundles' | |
| } | |
| } | |
| } | |
| } | |
| stage('tests') { | |
| steps { | |
| script { | |
| parallel parallelStagesMap | |
| } | |
| } | |
| } | |
| } | |
| } | |