|  | /* | 
|  | * 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 images defined in this project in [glassfish]/etc/docker* | 
|  | // Older image | 
|  | env.gfImage11 = "dmatej/eclipse-jenkins-glassfish:11.0.14.1" | 
|  | // Image required to be able to build hibernate-validator snapshot, but now used for glassfish too | 
|  | env.gfImage17 = "dmatej/eclipse-jenkins-glassfish:17.20" | 
|  |  | 
|  | 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", | 
|  | "naming_all", | 
|  | "deployment_all", | 
|  | "security_all", | 
|  | "webservice_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.gfImage17}", | 
|  | 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.gfImage17}", | 
|  | 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}/glassfish7/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.gfImage17} | 
|  | 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}/glassfish7/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 | 
|  |  | 
|  | # temporary build of external snapshot dependencies | 
|  | mvn clean install -f ./snapshots/pom.xml | 
|  | # 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 | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  |  |