X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=jjb%2Freleng-macros.yaml;h=82e772c74fac727c3ca240c9db0f2e676bf9701d;hb=d429e518be01b2dcbe3094399826489fdea55381;hp=286cb4641592635ed7de4232c93f823aa997cebc;hpb=aeff47f1dbf22ec340e9dc954f145caa33b1d1fa;p=releng%2Fbuilder.git diff --git a/jjb/releng-macros.yaml b/jjb/releng-macros.yaml index 286cb4641..82e772c74 100644 --- a/jjb/releng-macros.yaml +++ b/jjb/releng-macros.yaml @@ -1,86 +1,120 @@ # OLD Releng macros - +--- - property: name: opendaylight-infra-properties properties: - - build-discarder: - days-to-keep: '{build-days-to-keep}' + - build-discarder: + days-to-keep: '{build-days-to-keep}' + num-to-keep: 40 + # Need to keep artifacts for at least 1 day as some projects need to + # be able to validate their artifacts and only allowing limited + # number of artifacts could make fast moving jobs lost their + # artifacts before the developers can test it. + artifact-days-to-keep: 1 - parameter: name: opendaylight-infra-parameters parameters: - - string: - name: PROJECT - default: '{project}' - description: 'Parameter to identify an ODL Gerrit project' - - string: - name: ARCHIVE_ARTIFACTS - default: '{artifacts} **/target/surefire-reports/*-output.txt' - description: 'Space separated glob patterns for artifacts to archive into logs.opendaylight.org' - - string: - name: GERRIT_PROJECT - default: '{project}' - description: "GERRIT_PROJECT parameter if not given by trigger" - - string: - name: GERRIT_BRANCH - default: '{branch}' - description: "JJB configured GERRIT_BRANCH parameter" - - string: - name: GERRIT_REFSPEC - default: '{refspec}' - description: "GERRIT_REFSPEC parameter if not given by trigger" - - string: - name: STACK_NAME - default: '$JOB_NAME-$BUILD_NUMBER' - description: "Used by Heat to generate a unique stack & vm name" + - string: + name: PROJECT + default: '{project}' + description: 'Parameter to identify an ODL Gerrit project' + - string: + name: ARCHIVE_ARTIFACTS + default: > + {artifacts} + # Before adding more here, beware of https://jira.linuxfoundation.org/browse/RELENG-280 + **/target/surefire-reports/*-output.txt + **/target/failsafe-reports/failsafe-summary.xml + **/hs_err_*.log + **/target/feature/feature.xml + **/*.hprof + description: 'Space separated glob patterns for artifacts to archive into logs.opendaylight.org' + - string: + name: GERRIT_PROJECT + default: '{project}' + description: "GERRIT_PROJECT parameter if not given by trigger" + - string: + name: GERRIT_BRANCH + default: '{branch}' + description: "JJB configured GERRIT_BRANCH parameter" + - string: + name: GERRIT_REFSPEC + default: '{refspec}' + description: | + Gerrit reference to checkout (ex: refs/heads/master, + refs/changes/48/61548/1 where 61548 is Gerrit change ID, 1 is + patch number and 48 is last two digits of change ID) + - string: + name: STACK_NAME + default: '$SILO-$JOB_NAME-$BUILD_NUMBER' + description: "Used by Heat to generate a unique stack & vm name" + - string: + name: OS_CLOUD + default: '{os-cloud}' + description: | + The name of a cloud configuration in clouds.yaml. OS_CLOUD is a + variable name that is significant to openstack client as a + environment variable. Please refer to the documentation for + further details. + https://docs.openstack.org/developer/python-openstackclient/ - parameter: name: build-tag parameters: - - string: - name: BUILD_TAG - default: '' - description: 'Tag in Git to checkout' + - string: + name: BUILD_TAG + default: '' + description: 'Tag in Git to checkout' - parameter: name: controller-version-parameter parameters: - - string: - name: ODL_VERSION - default: '{odl_version}' - description: 'Controller version (for use with openstacks networking_odl project)' + - string: + name: ODL_VERSION + default: '{odl_version}' + description: 'Controller version (for use with openstacks networking_odl project)' - parameter: name: patches-to-build-parameter parameters: - - string: - name: PATCHES_TO_BUILD - default: '' - description: 'csv list of patches in project:changeset format to build distribution with' + - string: + name: PATCHES_TO_BUILD + default: '' + description: | + Patches to add to distro in CSV project:changeset format (genius:32/53632/9,netvirt:59/50259/47) + +- parameter: + name: run-test-parameter + parameters: + - string: + name: RUNTEST + default: '{run-test}' + description: 'Set true to run test after build' - parameter: name: distribution-branch-to-build-parameter parameters: - - string: - name: DISTRIBUTION_BRANCH_TO_BUILD - default: 'master' - description: 'distribution repo branch to build with' + - string: + name: DISTRIBUTION_BRANCH_TO_BUILD + default: 'master' + description: 'distribution repo branch to build with' - parameter: name: p2zip-parameter parameters: - - string: - name: P2ZIP_URL - default: '' - description: 'Nexus staging profile id' + - string: + name: P2ZIP_URL + default: '' + description: 'Nexus staging profile id' - parameter: name: stage-id-parameter parameters: - - string: - name: STAGING_PROFILE_ID - default: '{stage-id}' - description: 'Nexus staging profile id' + - string: + name: STAGING_PROFILE_ID + default: '{stage-id}' + description: 'Nexus staging profile id' - parameter: name: maven-exec @@ -93,48 +127,48 @@ - scm: name: git-scm scm: - - git: - credentials-id: 'opendaylight-jenkins-ssh' - url: '$GIT_BASE' - refspec: '' - branches: - - 'origin/{branch}' - skip-tag: true - wipe-workspace: true + - git: + credentials-id: 'opendaylight-jenkins-ssh' + url: '$GIT_BASE' + refspec: '' + branches: + - 'origin/{branch}' + skip-tag: true + wipe-workspace: true - scm: name: git-scm-with-submodules scm: - - git: - credentials-id: 'opendaylight-jenkins-ssh' - url: '$GIT_BASE' - refspec: '' - branches: - - 'refs/heads/{branch}' - skip-tag: true - wipe-workspace: true - submodule: - recursive: true + - git: + credentials-id: 'opendaylight-jenkins-ssh' + url: '$GIT_BASE' + refspec: '' + branches: + - 'refs/heads/{branch}' + skip-tag: true + wipe-workspace: true + submodule: + recursive: true - scm: name: gerrit-trigger-scm scm: - - git: - credentials-id: 'opendaylight-jenkins-ssh' - url: '$GIT_BASE' - refspec: '{refspec}' - branches: - - 'origin/$GERRIT_BRANCH' - skip-tag: true - choosing-strategy: '{choosing-strategy}' + - git: + credentials-id: 'opendaylight-jenkins-ssh' + url: '$GIT_BASE' + refspec: '{refspec}' + branches: + - 'origin/$GERRIT_BRANCH' + skip-tag: true + choosing-strategy: '{choosing-strategy}' - wrapper: name: build-timeout wrappers: - - timeout: - type: absolute - timeout: 360 - fail: true + - timeout: + type: absolute + timeout: 360 + fail: true # This is a single macro to use for all jobs who vote on every (relevant) patch set. # Only 'recheck' trigger word is supported, it always triggers the full set of relevant jobs, @@ -147,251 +181,251 @@ - trigger: name: gerrit-trigger-patch-submitted triggers: - - gerrit: - server-name: '{server}' - trigger-on: - - patchset-created-event: - exclude-drafts: 'true' - exclude-trivial-rebase: 'false' - exclude-no-code-change: 'true' - - draft-published-event - - comment-added-contains-event: - comment-contains-value: 'recheck' - projects: - - project-compare-type: 'ANT' - project-pattern: '{project}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - file-paths: - - compare-type: 'ANT' - pattern: '{files}' + - gerrit: + server-name: '{server}' + trigger-on: + - patchset-created-event: + exclude-drafts: true + exclude-trivial-rebase: false + exclude-no-code-change: false + - draft-published-event + - comment-added-contains-event: + comment-contains-value: recheck + projects: + - project-compare-type: ANT + project-pattern: '{project}' + branches: + - branch-compare-type: ANT + branch-pattern: '**/{branch}' + file-paths: + - compare-type: ANT + pattern: '{files}' # TODO: Unify argument names across gerrit-trigger-* macros. - trigger: name: gerrit-trigger-patch-merged triggers: - - gerrit: - server-name: '{server-name}' - trigger-on: - - change-merged-event - - comment-added-contains-event: - comment-contains-value: 'remerge' - projects: - - project-compare-type: 'ANT' - project-pattern: '{name}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/{branch}' - skip-vote: - successful: true - failed: true - unstable: true - notbuilt: true - # Force Jenkins always vote the values it should already have voted - # during the prior verify phase - override-votes: true - gerrit-build-started-verified-value: 1 - gerrit-build-successful-verified-value: 1 - gerrit-build-failed-verified-value: 1 - gerrit-build-unstable-verified-value: 1 - gerrit-build-notbuilt-verified-value: 1 - gerrit-build-started-codereview-value: 0 - gerrit-build-successful-codereview-value: 0 - gerrit-build-failed-codereview-value: 0 - gerrit-build-unstable-codereview-value: 0 - gerrit-build-notbuilt-codereview-value: 0 + - gerrit: + server-name: '{server-name}' + trigger-on: + - change-merged-event + - comment-added-contains-event: + comment-contains-value: 'remerge' + projects: + - project-compare-type: 'ANT' + project-pattern: '{name}' + branches: + - branch-compare-type: 'ANT' + branch-pattern: '**/{branch}' + skip-vote: + successful: true + failed: true + unstable: true + notbuilt: true + # Force Jenkins always vote the values it should already have voted + # during the prior verify phase + override-votes: true + gerrit-build-started-verified-value: 1 + gerrit-build-successful-verified-value: 1 + gerrit-build-failed-verified-value: 1 + gerrit-build-unstable-verified-value: 1 + gerrit-build-notbuilt-verified-value: 1 + gerrit-build-started-codereview-value: 0 + gerrit-build-successful-codereview-value: 0 + gerrit-build-failed-codereview-value: 0 + gerrit-build-unstable-codereview-value: 0 + gerrit-build-notbuilt-codereview-value: 0 # TODO: Unify argument names across gerrit-trigger-* macros. - trigger: name: gerrit-trigger-patch-sonar triggers: - - gerrit: - server-name: '{server-name}' - trigger-on: - - comment-added-contains-event: - comment-contains-value: 'run-sonar' - projects: - - project-compare-type: 'ANT' - project-pattern: '{name}' - branches: - - branch-compare-type: 'ANT' - branch-pattern: '**/master' - skip-vote: - successful: true - failed: true - unstable: true - notbuilt: true - -- publisher: - name: archive-artifacts - publishers: - - archive: - artifacts: '{artifacts}' - allow-empty: true - fingerprint: true - latest-only: true + - gerrit: + server-name: '{server-name}' + trigger-on: + - comment-added-contains-event: + comment-contains-value: 'run-sonar' + projects: + - project-compare-type: 'ANT' + project-pattern: '{name}' + branches: + - branch-compare-type: 'ANT' + branch-pattern: '**/master' + skip-vote: + successful: true + failed: true + unstable: true + notbuilt: true - publisher: name: email-notification publishers: - - email-ext: - recipients: '{email-recipients}' - reply-to: '' - content-type: default - subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!' - body: | - $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS: - - Check console output at $BUILD_URL to view the results. - unstable: true - fixed: true - send-to: - - recipients + - email-ext: + recipients: '{email-recipients}' + reply-to: '' + content-type: default + subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!' + body: | + $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS: + + Please refer to the logs server URL for console logs when possible + and use the Jenkins Build URL as a last resort. + + Console Logs URL: + https://logs.opendaylight.org/$SILO/$JENKINS_HOSTNAME/$JOB_NAME/$BUILD_NUMBER + + Jenkins Build URL: + $BUILD_URL + unstable: true + fixed: true + send-to: + - recipients - publisher: - name: jacoco-report - publishers: - - jacoco: - exec-pattern: "**/**.exec" - class-pattern: "**/classes" - source-pattern: "**/src/main/java" - exclusion-pattern: "**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**" - status-update: true - targets: - - branch: - healthy: 10 - unhealthy: 20 - - method: - healthy: 50 - unhealthy: 40 - -- publisher: - name: opendaylight-infra-shiplogs - # To archive things the job will need to create a "archives" directory in - # the workspace and this macro will handle copying the contents of the - # archives directory. - # - # Uses the build parameter ARCHIVE_ARTIFACTS if not empty to find files - # to archive. You can pass globstar patterns for example "**/*.xml **/*.log" - # as the archive pattern. This is a space separated list of files to archive. - # - # Also ensure that the workspace is cleaned up at the end of the build. + name: jacoco-report publishers: - - postbuildscript: - builders: - - shell: | - if [ -d "$WORKSPACE/.venv-openstack" ]; then - source $WORKSPACE/.venv-openstack/bin/activate - openstack --os-cloud rackspace stack delete --yes $STACK_NAME - fi - - shell: !include-raw: include-raw-deploy-archives.sh - - maven-target: - maven-version: '{maven-version}' - pom: '.archives/deploy-archives.xml' - goals: 'clean deploy -V -B -q -Dmaven.repo.local=/tmp/r' - settings: 'jenkins-log-archives-settings' - settings-type: cfp - global-settings: 'odl-global-settings' - global-settings-type: cfp - - description-setter: - regexp: '^Build logs: .*' - # Cleanup after ourselves - - wipe-org-opendaylight-repo - script-only-if-succeeded: False - script-only-if-failed: False - mark-unstable-if-failed: True - - workspace-cleanup: - exclude: - # Do not clean up *.jenkins-trigger files for jobs that use a - # properties file as input for triggering another build. - - '**/*.jenkins-trigger' - fail-build: false + - jacoco: + exec-pattern: "**/**.exec" + class-pattern: "**/classes" + source-pattern: "**/src/main/java" + exclusion-pattern: "**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**" + status-update: true + targets: + - branch: + healthy: 10 + unhealthy: 20 + - method: + healthy: 50 + unhealthy: 40 + +- builder: + # Deploys a maven site to Nexus using lftools nexus-zip command + name: opendaylight-infra-deploy-maven-site + builders: + - lf-provide-maven-settings: + global-settings-file: global-settings + settings-file: '{settings-file}' + - lf-infra-create-netrc: + server-id: opendaylight-site + - shell: !include-raw-escape: + - global-jjb/shell/lftools-install.sh + - opendaylight-infra-deploy-maven-site.sh + - lf-provide-maven-settings-cleanup - builder: name: opendaylight-infra-stack # opendaylight-infra-stack.sh has a required variable {stack-template} that # must be passed into this macro. builders: - - shell: !include-raw: opendaylight-infra-stack.sh - - shell: !include-raw-escape: opendaylight-infra-copy-ssh-keys.sh + - shell: !include-raw: opendaylight-infra-stack.sh + - shell: !include-raw-escape: opendaylight-infra-copy-ssh-keys.sh + +- builder: + name: opendaylight-infra-push-gerrit-patch + # opendaylight-infra-push-gerrit-patch.sh allows a job to push a patch to + # Gerrit in an automated fashion. This is meant for tasks that creates + # the same patch regularly and needs the ability to detect if an unreviewed + # patch already exists. In which case it will update the existing patch. + # + # Note: This patch assumes the $WORKSPACE contains the project repo with + # the files changed already "git add" and waiting for a "git commit" call. + # + # This script requires the following JJB variables to be passed in: + # {project} Gerrit project-name + # {gerrit-topic} Gerrit topic, please make a unique topic. + # {gerrit-commit-message} Commit message to assign to commit. + # NOTE: Requires git review to be installed on node. + builders: + - shell: !include-raw: opendaylight-infra-push-gerrit-patch.sh - builder: name: distribute-build-url # Place URL of the current run of a build job to a file at given path. builders: - - shell: 'echo "$BUILD_URL" > {path}/build.url' + - shell: | + #!/bin/bash + set +e # DO NOT fail script if command returns non-zero. + + echo "$BUILD_URL" > {path}/build.url + + # DO NOT fail the build if the echo failed. + exit 0 - builder: name: wipe-org-opendaylight-repo builders: - - shell: 'if [ -d /tmp/r/org/opendaylight ]; then rm -rf /tmp/r/org/opendaylight; fi' + - shell: 'if [ -d /tmp/r/org/opendaylight ]; then rm -rf /tmp/r/org/opendaylight; fi' - builder: name: wipe-local-maven-repo builders: - - shell: 'if [ -d /tmp/r ]; then rm -rf /tmp/r; fi' + - shell: 'if [ -d /tmp/r ]; then rm -rf /tmp/r; fi' - builder: name: jacoco-nojava-workaround builders: - - shell: 'mkdir -p $WORKSPACE/target/classes $WORKSPACE/jacoco/classes' + - shell: 'mkdir -p $WORKSPACE/target/classes $WORKSPACE/jacoco/classes' - builder: name: check-clm builders: - - sonatype-clm: - application-name: '{application-name}' + - sonatype-clm: + application-name: '{application-name}' - builder: name: releng-check-unicode builders: - - shell: | - $WORKSPACE/scripts/check-unicode.sh jjb/ + - shell: | + $WORKSPACE/scripts/check-unicode.sh jjb/ - builder: name: provide-maven-settings builders: - - config-file-provider: - files: - - file-id: '{global-settings-file}' - variable: 'GLOBAL_SETTINGS_FILE' - - file-id: '{settings-file}' - variable: 'SETTINGS_FILE' + - config-file-provider: + files: + - file-id: '{global-settings-file}' + variable: 'GLOBAL_SETTINGS_FILE' + - file-id: '{settings-file}' + variable: 'SETTINGS_FILE' - builder: name: releng-fetch-p2zip-if-necessary builders: - - shell: | - # Cleanup any existing zips and metadata before we download the new update site - rm -f *.zip *.xml - - conditional-step: - condition-kind: strings-match - condition-string1: '$P2ZIP_URL' - condition-string2: '' - condition-basedir: workspace - steps: + - shell: | + # Cleanup any existing zips and metadata before we download the new update site + rm -f *.zip *.xml + - conditional-step: + condition-kind: strings-match + condition-string1: '$P2ZIP_URL' + condition-string2: '' + condition-basedir: workspace + steps: # TODO: Figure out latest snapshot version number to pull rather than hardcoding 1.1.1-SNAPSHOT - maven-target: maven-version: '{maven-version}' - goals: 'org.apache.maven.plugins:maven-dependency-plugin:get org.apache.maven.plugins:maven-dependency-plugin:copy -V -B -Dartifact=org.opendaylight.yangide:org.opendaylight.yangide.update-site:1.1.1-SNAPSHOT:zip -DoutputDirectory=$WORKSPACE' + goals: > + org.apache.maven.plugins:maven-dependency-plugin:get + org.apache.maven.plugins:maven-dependency-plugin:copy + -V -B + -Dartifact=org.opendaylight.yangide:org.opendaylight.yangide.update-site:1.1.1-SNAPSHOT:zip + -DoutputDirectory=$WORKSPACE settings: '{settings}' global-settings: '{global-settings}' - builder: name: releng-generate-p2pom builders: - - shell: !include-raw: include-raw-generate-p2pom.sh + - shell: !include-raw: include-raw-generate-p2pom.sh - builder: name: releng-update-p2composite-metadata builders: - - shell: !include-raw: include-raw-update-p2composite-metadata.sh - - conditional-step: - condition-kind: file-exists - condition-filename: deploy-composite-repo.xml - condition-basedir: workspace - steps: + - shell: !include-raw: include-raw-update-p2composite-metadata.sh + - conditional-step: + condition-kind: file-exists + condition-filename: deploy-composite-repo.xml + condition-basedir: workspace + steps: - maven-target: maven-version: '{maven-version}' pom: 'deploy-composite-repo.xml' @@ -402,73 +436,216 @@ - builder: name: releng-stage-release builders: - - shell: !include-raw: include-raw-stage-release.sh + - shell: !include-raw: include-raw-stage-release.sh - wrapper: # This wrapper is required for all jobs as it configures the wrappers # needed by OpenDaylight infra. name: opendaylight-infra-wrappers wrappers: - - mask-passwords - - config-file-provider: - files: - - file-id: rackspace-heat - target: '$HOME/.config/openstack/clouds.yaml' - - timeout: - type: absolute - timeout: '{build-timeout}' - timeout-var: 'BUILD_TIMEOUT' - fail: true - - timestamps - - ssh-agent-credentials: - users: - - 'opendaylight-jenkins-ssh' - - openstack: - single-use: True + - mask-passwords + - config-file-provider: + files: + - file-id: npmrc + target: '$HOME/.npmrc' + - file-id: rackspace-heat + target: '$HOME/.config/openstack/clouds.yaml' + - timeout: + type: absolute + timeout: '{build-timeout}' + timeout-var: 'BUILD_TIMEOUT' + fail: true + - timestamps + - ssh-agent-credentials: + users: + - 'opendaylight-jenkins-ssh' + - openstack: + single-use: true - builder: - name: packer-validate + # TODO: Verify signature after downloading users public key from a locally created + # repository instead of the public keymesh. This requires a process in place to get ODL + # developers public keys into a local repository without increasing the job thoughput. + name: verify-gpg-signature builders: - - config-file-provider: - files: - - file-id: 'packer-cloud-env' - variable: 'CLOUDENV' - - shell: | - cd packer - varfiles="../packer/vars/*" - templates="../packer/templates/*" - provision="../packer/provision/*.sh" - for v in $varfiles; do - [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue - for t in $templates; do - export PACKER_LOG="yes" && \ - export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \ - packer.io validate -var-file=$CLOUDENV \ - -var-file=$v $t - if [ $? -ne 0 ]; then - break - fi - done - done - for p in $provision; do - /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1 - done + - shell: !include-raw: include-raw-verify-gpg-signatures.sh - builder: - name: packer-build + name: opendaylight-infra-jjbini builders: - - shell: | - cd packer - export PACKER_LOG="yes" && \ - export PACKER_LOG_PATH="packer-build.log" && \ - packer.io build -var-file=$CLOUDENV \ - -var-file=../packer/vars/{platform}.json \ - ../packer/templates/{template}.json + - config-file-provider: + files: + - file-id: 'jjbini' + target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini' - builder: - # TODO: Verify signature after downloading users public key from a locally created - # repository instead of the public keymesh. This requires a process in place to get ODL - # developers public keys into a local repository without increasing the job thoughput. - name: verify-gpg-signature + name: distribution-check-wipe + # Step zero: Wipe file repositories up front. + builders: + - shell: | + echo "wipe r: the local Maven repository" + rm -rfv /tmp/r + echo "wipe n: the fake remote (Nexus) repository" + rm -rfv /tmp/n + echo "wipe t: the transient repository used in some manipulations" + rm -rfv /tmp/t + +- builder: + name: distribution-check-build-project + # Step one: Online build of the project, using local repository /tmp/r/ and deploying artifacts to /tmp/n/. + # Ordinary SingleFeatureTest failures are detected in the verify job, so we can use "q" profile here. + # Arguments: + # pom: Relative path to pom file to use. Typically '$GERRIT_PROJECT/pom.xml'. + builders: + - maven-target: + maven-version: 'mvn33' + pom: '{pom}' + goals: | + clean deploy dependency:tree + -DoutputFile=dependency_tree.txt + -Pq + -DaltDeploymentRepository=fake-nexus::default::file:///tmp/n/ + {mvn-opts} + java-opts: + - '-Xmx4096m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true' + settings: 'integration-settings' + settings-type: cfp + global-settings: 'global-settings' + global-settings-type: cfp + +- builder: + name: distribution-check-verify-groupid + # Step two: Verify all deployed artifacts belong to the project's groupId. + # This is done by moving the allowed directories out of /tmp/n and checking no files remained there. + # The correct directory is derived from $GERRIT_PROJECT. + # TODO: Verify all deployed artifacts are snapshots. + # Arguments: + # gerrit-project: Project name as nexus URI part. Typically '$GERRIT_PROJECT'. + builders: + - shell: | + mkdir -p /tmp/t/org/opendaylight/{gerrit-project} + mv /tmp/n/org/opendaylight/{gerrit-project}/* /tmp/t/org/opendaylight/{gerrit-project}/ + test -z "`find /tmp/n/ -type f`" || ( echo "ERROR: Mismatched groupId detected (see above)." && false ) + rm -rf /tmp/n + mv /tmp/t /tmp/n + +- builder: + name: distribution-check-download-deps + # Step three: Online build of integration distribution. + # This step is mainly used for downloading other project artifacts. + # Running SingleFeaturesTest here does not seem to be required, so -Pq is used again. + # Arguments: + # dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended. + builders: + - maven-target: + maven-version: 'mvn33' + pom: '{dist-pom}' + goals: | + clean install dependency:tree + -DoutputFile=dependency_tree.txt + -Pq + {mvn-opts} + java-opts: + - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true' + settings: 'integration-settings' + settings-type: cfp + global-settings: 'global-settings' + global-settings-type: cfp + +- builder: + name: distribution-check-delete-snapshots + # Step four: Delete snapshot artifacts from the local repository. + # This is critical to detect orphaned artifacts or missing project-internal dependency declarations. + # Also other files related to maven repository resolution are removed, + # and then empty directories are removed, in order to simplify debugging. + builders: + - shell: !include-raw-escape: integration-distribution-delete-snaphot-artifacts.sh + +- builder: + name: distribution-check-configure-remotes + # Now the ugly part. It seems that the only way to tell Maven 2+ + # which remote repositories to use is via settings.xml file. + # So we create such a file here, but it needs most of odlparent:settings.xml + builders: + - shell: | + echo ' + + + + opendaylight-release + + + opendaylight-mirror + opendaylight + https://nexus.opendaylight.org/content/repositories/public/ + never + false + + + + + opendaylight-plugin-mirror + opendaylight-plugin + https://nexus.opendaylight.org/content/repositories/public/ + never + false + + + + + file-snapshots + + + file-snapshots + file + file:///tmp/n/ + false + + + + + file-plugin-snapshots + file-plugin + file:///tmp/n/ + false + + + + + + file-snapshots + opendaylight-release + + + ' > fake_remotes.xml + # Notes: The settings are minimal in order to detect breakage scenarios, + # while allowing for the following quirks: + # * Some plugins seem to have hardcoded repos, for example check-license looks at repository.apache.org + # * Some plugin artifacts (related to surefire) are not downloaded when tests are skipped. + # * populate-local-repo looks at oss.sonatype.org and does not store things (like guava) to /tmp/r + +- builder: + name: distribution-check-repeat-build + # Step five: Repeat the distribution build but with the new settings. + # Here, only the project snapshot artifacts deployed to /tmp/n are available, + # which faithfully reproduces conditions in later verify-like job runs. + # We cannot use --offline, because: "Cannot access file (file:///tmp/n) in offline mode" + # This is where SingleFeatureTest is not skipped. + # Arguments: + # dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended. builders: - - shell: !include-raw: include-raw-verify-gpg-signatures.sh + - maven-target: + maven-version: 'mvn33' + pom: '{dist-pom}' + goals: | + clean install dependency:tree + -DoutputFile=dependency_tree.txt -s fake_remotes.xml + -Pq + -Dsft.heap.max=4g + -DskipTests=false + {mvn-opts} + java-opts: + - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true'