| /* |
| * Copyright (c) 2018-2021 Oracle and/or its affiliates. All rights reserved. |
| * |
| * 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()}" |
| |
| // list of test ids |
| def jobs = [ |
| "cdi_all", |
| "ql_gf_full_profile_all", |
| "ql_gf_web_profile_all", |
| "web_jsp" |
| ] |
| |
| |
| def jobs_all = [ |
| "cdi_all", |
| "ql_gf_web_profile_all" |
| "ql_gf_full_profile_all", |
| "ql_gf_web_profile_all", |
| "web_jsp", |
| |
| "deployment_all", |
| "ejb_group_1", |
| "ejb_group_2", |
| "ejb_group_3", |
| "ejb_web_all", |
| "ql_gf_nucleus_all", |
| "nucleus_admin_all", |
| "jdbc_all", |
| "batch_all", |
| "persistence_all", |
| "connector_group_1", |
| "connector_group_2", |
| "connector_group_3", |
| "connector_group_4" |
| ] |
| |
| def parallelStagesMap = jobs.collectEntries { |
| ["${it}": generateStage(it)] |
| } |
| |
| def generateStage(job) { |
| return { |
| podTemplate(label: env.label) { |
| node(label) { |
| stage("${job}") { |
| container('glassfish-ci') { |
| // do the scm checkout |
| retry(10) { |
| sleep 60 |
| checkout scm |
| } |
| |
| // run the test |
| unstash 'build-bundles' |
| |
| try { |
| retry(3) { |
| timeout(time: 2, unit: 'HOURS') { |
| sh """ |
| export CLASSPATH=$WORKSPACE/glassfish7/javadb |
| ./appserver/tests/gftest.sh run_test ${job} |
| """ |
| } |
| } |
| } finally { |
| // archive what we can... |
| archiveArtifacts artifacts: "${job}-results.tar.gz" |
| junit testResults: 'results/junitreports/*.xml', allowEmptyResults: false |
| } |
| } |
| } |
| } |
| } |
| } |
| } |
| |
| pipeline { |
| |
| options { |
| // keep at most 50 builds |
| buildDiscarder(logRotator(numToKeepStr: '10')) |
| |
| // preserve the stashes 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') |
| } |
| |
| agent { |
| kubernetes { |
| label "${env.label}" |
| defaultContainer 'glassfish-ci' |
| yaml """ |
| apiVersion: v1 |
| kind: Pod |
| metadata: |
| spec: |
| 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: {} |
| containers: |
| - name: jnlp |
| image: jenkins/jnlp-slave:alpine |
| imagePullPolicy: IfNotPresent |
| env: |
| - name: JAVA_TOOL_OPTIONS |
| value: -Xmx1G |
| resources: |
| limits: |
| memory: "1Gi" |
| cpu: "1" |
| - name: glassfish-ci |
| # Docker image defined in this project in [glassfish]/etc/docker/Dockerfile |
| image: ee4jglassfish/ci:tini-jdk-11.0.10 |
| 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" |
| - name: "MVN_EXTRA" |
| value: "--batch-mode -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn" |
| resources: |
| limits: |
| memory: "7Gi" |
| cpu: "3" |
| """ |
| } |
| } |
| |
| 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 |
| } |
| |
| stages { |
| stage('build') { |
| agent { |
| kubernetes { |
| label "${env.label}" |
| } |
| } |
| steps { |
| container('glassfish-ci') { |
| timeout(time: 1, unit: 'HOURS') { |
| |
| // do the scm checkout |
| checkout scm |
| |
| // do the build |
| sh ''' |
| echo Maven version |
| mvn -v |
| |
| echo User |
| id |
| |
| echo Uname |
| uname -a |
| |
| bash -xe ./gfbuild.sh build_re_dev |
| ''' |
| archiveArtifacts artifacts: 'bundles/*.zip' |
| // junit testResults: 'test-results/build-unit-tests/results/junitreports/test_results_junit.xml' |
| stash includes: 'bundles/*', name: 'build-bundles' |
| } |
| } |
| } |
| } |
| |
| stage('tests') { |
| steps { |
| script { |
| parallel parallelStagesMap |
| } |
| } |
| } |
| } |
| } |
| |
| |