Replace `` cmd substitution with $()
[releng/builder.git] / jjb / releng-macros.yaml
1 # OLD Releng macros
2 ---
3 - property:
4     name: opendaylight-infra-properties
5     properties:
6       - build-discarder:
7           days-to-keep: '{build-days-to-keep}'
8           num-to-keep: 40
9           # Need to keep artifacts for at least 1 day as some projects need to
10           # be able to validate their artifacts and only allowing limited
11           # number of artifacts could make fast moving jobs lost their
12           # artifacts before the developers can test it.
13           artifact-days-to-keep: 1
14
15 - parameter:
16     name: opendaylight-infra-parameters
17     parameters:
18       - string:
19           name: PROJECT
20           default: '{project}'
21           description: 'Parameter to identify an ODL Gerrit project'
22       - string:
23           name: ARCHIVE_ARTIFACTS
24           default: >
25               {artifacts}
26               **/target/surefire-reports/*-output.txt
27               **/hs_err_*.log
28               **/target/feature/feature.xml
29               **/*.hprof
30           description: 'Space separated glob patterns for artifacts to archive into logs.opendaylight.org'
31       - string:
32           name: GERRIT_PROJECT
33           default: '{project}'
34           description: "GERRIT_PROJECT parameter if not given by trigger"
35       - string:
36           name: GERRIT_BRANCH
37           default: '{branch}'
38           description: "JJB configured GERRIT_BRANCH parameter"
39       - string:
40           name: GERRIT_REFSPEC
41           default: '{refspec}'
42           description: "GERRIT_REFSPEC parameter if not given by trigger"
43       - string:
44           name: STACK_NAME
45           default: '$SILO-$JOB_NAME-$BUILD_NUMBER'
46           description: "Used by Heat to generate a unique stack & vm name"
47       - string:
48           name: OS_CLOUD
49           default: '{os-cloud}'
50           description: |
51               The name of a cloud configuration in clouds.yaml.
52               https://docs.openstack.org/developer/python-openstackclient/
53
54 - parameter:
55     name: build-tag
56     parameters:
57       - string:
58           name: BUILD_TAG
59           default: ''
60           description: 'Tag in Git to checkout'
61
62 - parameter:
63     name: controller-version-parameter
64     parameters:
65       - string:
66           name: ODL_VERSION
67           default: '{odl_version}'
68           description: 'Controller version (for use with openstacks networking_odl project)'
69
70 - parameter:
71     name: patches-to-build-parameter
72     parameters:
73       - string:
74           name: PATCHES_TO_BUILD
75           default: ''
76           description: 'csv list of patches in project:changeset format to build distribution with'
77
78 - parameter:
79     name: distribution-branch-to-build-parameter
80     parameters:
81       - string:
82           name: DISTRIBUTION_BRANCH_TO_BUILD
83           default: 'master'
84           description: 'distribution repo branch to build with'
85
86 - parameter:
87     name: p2zip-parameter
88     parameters:
89       - string:
90           name: P2ZIP_URL
91           default: ''
92           description: 'Nexus staging profile id'
93
94 - parameter:
95     name: stage-id-parameter
96     parameters:
97       - string:
98           name: STAGING_PROFILE_ID
99           default: '{stage-id}'
100           description: 'Nexus staging profile id'
101
102 - parameter:
103     name: maven-exec
104     parameters:
105       - string:
106           name: MVN
107           default: '/w/tools/hudson.tasks.Maven_MavenInstallation/{maven-version}/bin/mvn'
108           description: 'Maven selector to be used by shell scripts'
109
110 - scm:
111     name: git-scm
112     scm:
113       - git:
114           credentials-id: 'opendaylight-jenkins-ssh'
115           url: '$GIT_BASE'
116           refspec: ''
117           branches:
118             - 'origin/{branch}'
119           skip-tag: true
120           wipe-workspace: true
121
122 - scm:
123     name: git-scm-with-submodules
124     scm:
125       - git:
126           credentials-id: 'opendaylight-jenkins-ssh'
127           url: '$GIT_BASE'
128           refspec: ''
129           branches:
130             - 'refs/heads/{branch}'
131           skip-tag: true
132           wipe-workspace: true
133           submodule:
134             recursive: true
135
136 - scm:
137     name: gerrit-trigger-scm
138     scm:
139       - git:
140           credentials-id: 'opendaylight-jenkins-ssh'
141           url: '$GIT_BASE'
142           refspec: '{refspec}'
143           branches:
144             - 'origin/$GERRIT_BRANCH'
145           skip-tag: true
146           choosing-strategy: '{choosing-strategy}'
147
148 - wrapper:
149     name: build-timeout
150     wrappers:
151       - timeout:
152           type: absolute
153           timeout: 360
154           fail: true
155
156 # This is a single macro to use for all jobs who vote on every (relevant) patch set.
157 # Only 'recheck' trigger word is supported, it always triggers the full set of relevant jobs,
158 # in order to prevent Jenkins from starting only a subset and still voting Verified+1.
159 # Arguments:
160 #     server: name of gerrit server to listen to
161 #     project: pattern to match triggering projects
162 #     branch: triggering branch name
163 #     files: pattern to match triggering filepaths
164 - trigger:
165     name: gerrit-trigger-patch-submitted
166     triggers:
167       - gerrit:
168           server-name: '{server}'
169           trigger-on:
170             - patchset-created-event:
171                 exclude-drafts: true
172                 exclude-trivial-rebase: false
173                 exclude-no-code-change: false
174             - draft-published-event
175             - comment-added-contains-event:
176                 comment-contains-value: recheck
177           projects:
178             - project-compare-type: ANT
179               project-pattern: '{project}'
180               branches:
181                 - branch-compare-type: ANT
182                   branch-pattern: '**/{branch}'
183               file-paths:
184                 - compare-type: ANT
185                   pattern: '{files}'
186
187 # TODO: Unify argument names across gerrit-trigger-* macros.
188 - trigger:
189     name: gerrit-trigger-patch-merged
190     triggers:
191       - gerrit:
192           server-name: '{server-name}'
193           trigger-on:
194             - change-merged-event
195             - comment-added-contains-event:
196                 comment-contains-value: 'remerge'
197           projects:
198             - project-compare-type: 'ANT'
199               project-pattern: '{name}'
200               branches:
201                 - branch-compare-type: 'ANT'
202                   branch-pattern: '**/{branch}'
203           skip-vote:
204             successful: true
205             failed: true
206             unstable: true
207             notbuilt: true
208           # Force Jenkins always vote the values it should already have voted
209           # during the prior verify phase
210           override-votes: true
211           gerrit-build-started-verified-value: 1
212           gerrit-build-successful-verified-value: 1
213           gerrit-build-failed-verified-value: 1
214           gerrit-build-unstable-verified-value: 1
215           gerrit-build-notbuilt-verified-value: 1
216           gerrit-build-started-codereview-value: 0
217           gerrit-build-successful-codereview-value: 0
218           gerrit-build-failed-codereview-value: 0
219           gerrit-build-unstable-codereview-value: 0
220           gerrit-build-notbuilt-codereview-value: 0
221
222 # TODO: Unify argument names across gerrit-trigger-* macros.
223 - trigger:
224     name: gerrit-trigger-patch-sonar
225     triggers:
226       - gerrit:
227           server-name: '{server-name}'
228           trigger-on:
229             - comment-added-contains-event:
230                 comment-contains-value: 'run-sonar'
231           projects:
232             - project-compare-type: 'ANT'
233               project-pattern: '{name}'
234               branches:
235                 - branch-compare-type: 'ANT'
236                   branch-pattern: '**/master'
237           skip-vote:
238             successful: true
239             failed: true
240             unstable: true
241             notbuilt: true
242
243 - publisher:
244     name: archive-artifacts
245     publishers:
246       - archive:
247           artifacts: '{artifacts}'
248           allow-empty: true
249           fingerprint: true
250           latest-only: true
251
252 - publisher:
253     name: email-notification
254     publishers:
255       - email-ext:
256           recipients: '{email-recipients}'
257           reply-to: ''
258           content-type: default
259           subject: '{email-prefix} $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!'
260           body: |
261               $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS:
262
263               Please refer to the logs server URL for console logs when possible
264               and use the Jenkins Build URL as a last resort.
265
266               Console Logs URL:
267               https://logs.opendaylight.org/$SILO/$JENKINS_HOSTNAME/$JOB_NAME/$BUILD_NUMBER
268
269               Jenkins Build URL:
270               $BUILD_URL
271           unstable: true
272           fixed: true
273           send-to:
274             - recipients
275
276 - publisher:
277     name: jacoco-report
278     publishers:
279       - jacoco:
280           exec-pattern: "**/**.exec"
281           class-pattern: "**/classes"
282           source-pattern: "**/src/main/java"
283           exclusion-pattern: "**/gen/**,**/generated-sources/**,**/yang-gen**,**/pax/**"
284           status-update: true
285           targets:
286             - branch:
287                 healthy: 10
288                 unhealthy: 20
289             - method:
290                 healthy: 50
291                 unhealthy: 40
292
293 - publisher:
294     name: opendaylight-infra-shiplogs
295     # To archive things the job will need to create a "archives" directory in
296     # the workspace and this macro will handle copying the contents of the
297     # archives directory.
298     #
299     # Uses the build parameter ARCHIVE_ARTIFACTS if not empty to find files
300     # to archive. You can pass globstar patterns for example "**/*.xml **/*.log"
301     # as the archive pattern. This is a space separated list of files to archive.
302     #
303     # Also ensure that the workspace is cleaned up at the end of the build.
304     publishers:
305       - postbuildscript:
306           builders:
307             - shell: !include-raw: include-raw-stack-delete.sh
308             - shell: !include-raw-escape: include-raw-deploy-archives.sh
309             - maven-target:
310                 maven-version: '{maven-version}'
311                 pom: '.archives/deploy-archives.xml'
312                 goals: 'clean deploy -V -B -q -Dmaven.repo.local=/tmp/r'
313                 settings: 'jenkins-log-archives-settings'
314                 settings-type: cfp
315                 global-settings: 'odl-global-settings'
316                 global-settings-type: cfp
317             - description-setter:
318                 regexp: '^Build logs: .*'
319             # Cleanup after ourselves
320             - wipe-org-opendaylight-repo
321           script-only-if-succeeded: false
322           script-only-if-failed: false
323           mark-unstable-if-failed: true
324       - workspace-cleanup:
325           exclude:
326             # Do not clean up *.jenkins-trigger files for jobs that use a
327             # properties file as input for triggering another build.
328             - '**/*.jenkins-trigger'
329           fail-build: false
330
331 - builder:
332     name: opendaylight-infra-stack
333     # opendaylight-infra-stack.sh has a required variable {stack-template} that
334     # must be passed into this macro.
335     builders:
336       - shell: !include-raw: opendaylight-infra-stack.sh
337       - shell: !include-raw-escape: opendaylight-infra-copy-ssh-keys.sh
338
339 - builder:
340     name: opendaylight-infra-push-gerrit-patch
341     # opendaylight-infra-push-gerrit-patch.sh allows a job to push a patch to
342     # Gerrit in an automated fashion. This is meant for tasks that creates
343     # the same patch regularly and needs the ability to detect if an unreviewed
344     # patch already exists. In which case it will update the existing patch.
345     #
346     # Note: This patch assumes the $WORKSPACE contains the project repo with
347     #       the files changed already "git add" and waiting for a "git commit" call.
348     #
349     # This script requires the following JJB variables to be passed in:
350     #     {project}       Gerrit project-name
351     #     {gerrit-topic}  Gerrit topic, please make a unique topic.
352     #     {gerrit-commit-message} Commit message to assign to commit.
353     # NOTE: Requires git review to be installed on node.
354     builders:
355       - shell: !include-raw: opendaylight-infra-push-gerrit-patch.sh
356
357 - builder:
358     name: distribute-build-url
359     # Place URL of the current run of a build job to a file at given path.
360     builders:
361       - shell: 'echo "$BUILD_URL" > {path}/build.url'
362
363 - builder:
364     name: wipe-org-opendaylight-repo
365     builders:
366       - shell: 'if [ -d /tmp/r/org/opendaylight ]; then rm -rf /tmp/r/org/opendaylight; fi'
367
368 - builder:
369     name: wipe-local-maven-repo
370     builders:
371       - shell: 'if [ -d /tmp/r ]; then rm -rf /tmp/r; fi'
372
373 - builder:
374     name: jacoco-nojava-workaround
375     builders:
376       - shell: 'mkdir -p $WORKSPACE/target/classes $WORKSPACE/jacoco/classes'
377
378 - builder:
379     name: check-clm
380     builders:
381       - sonatype-clm:
382           application-name: '{application-name}'
383
384 - builder:
385     name: releng-check-unicode
386     builders:
387       - shell: |
388           $WORKSPACE/scripts/check-unicode.sh jjb/
389
390 - builder:
391     name: provide-maven-settings
392     builders:
393       - config-file-provider:
394           files:
395             - file-id: '{global-settings-file}'
396               variable: 'GLOBAL_SETTINGS_FILE'
397             - file-id: '{settings-file}'
398               variable: 'SETTINGS_FILE'
399
400 - builder:
401     name: releng-fetch-p2zip-if-necessary
402     builders:
403       - shell: |
404           # Cleanup any existing zips and metadata before we download the new update site
405           rm -f *.zip *.xml
406       - conditional-step:
407           condition-kind: strings-match
408           condition-string1: '$P2ZIP_URL'
409           condition-string2: ''
410           condition-basedir: workspace
411           steps:
412             # TODO: Figure out latest snapshot version number to pull rather than hardcoding 1.1.1-SNAPSHOT
413             - maven-target:
414                 maven-version: '{maven-version}'
415                 goals: >
416                     org.apache.maven.plugins:maven-dependency-plugin:get
417                     org.apache.maven.plugins:maven-dependency-plugin:copy
418                     -V -B
419                     -Dartifact=org.opendaylight.yangide:org.opendaylight.yangide.update-site:1.1.1-SNAPSHOT:zip
420                     -DoutputDirectory=$WORKSPACE
421                 settings: '{settings}'
422                 global-settings: '{global-settings}'
423
424 - builder:
425     name: releng-generate-p2pom
426     builders:
427       - shell: !include-raw: include-raw-generate-p2pom.sh
428
429 - builder:
430     name: releng-update-p2composite-metadata
431     builders:
432       - shell: !include-raw: include-raw-update-p2composite-metadata.sh
433       - conditional-step:
434           condition-kind: file-exists
435           condition-filename: deploy-composite-repo.xml
436           condition-basedir: workspace
437           steps:
438             - maven-target:
439                 maven-version: '{maven-version}'
440                 pom: 'deploy-composite-repo.xml'
441                 goals: 'clean deploy -V -B -Dmaven.repo.local=/tmp/r'
442                 settings: '{settings}'
443                 global-settings: '{global-settings}'
444
445 - builder:
446     name: releng-stage-release
447     builders:
448       - shell: !include-raw: include-raw-stage-release.sh
449
450 - wrapper:
451     # This wrapper is required for all jobs as it configures the wrappers
452     # needed by OpenDaylight infra.
453     name: opendaylight-infra-wrappers
454     wrappers:
455       - mask-passwords
456       - config-file-provider:
457           files:
458             - file-id: rackspace-heat
459               target: '$HOME/.config/openstack/clouds.yaml'
460       - timeout:
461           type: absolute
462           timeout: '{build-timeout}'
463           timeout-var: 'BUILD_TIMEOUT'
464           fail: true
465       - timestamps
466       - ssh-agent-credentials:
467           users:
468             - 'opendaylight-jenkins-ssh'
469       - openstack:
470           single-use: true
471
472 - builder:
473     name: packer-validate
474     builders:
475       - config-file-provider:
476           files:
477             - file-id: 'packer-cloud-env'
478               variable: 'CLOUDENV'
479       - shell: |
480           cd packer
481           varfiles="../packer/vars/*"
482           templates="../packer/templates/*"
483           provision="../packer/provision/*.sh"
484           for v in $varfiles; do
485               [[ "${v##*/}" =~ ^(cloud-env.*)$ ]] && continue
486               for t in $templates; do
487                   export PACKER_LOG="yes" && \
488                   export PACKER_LOG_PATH="packer-validate-${v##*/}-${t##*/}.log" && \
489                               packer.io validate -var-file=$CLOUDENV \
490                               -var-file=$v $t
491                   if [ $? -ne 0 ]; then
492                       break
493                   fi
494               done
495           done
496           for p in $provision; do
497               /bin/bash -n $p > provision-validate-${p##*/}.log 2>&1
498           done
499
500
501 - builder:
502     name: packer-build
503     builders:
504       - config-file-provider:
505           files:
506             - file-id: 'packer-cloud-env'
507               variable: 'CLOUDENV'
508       - shell: |
509           cd packer
510           export PACKER_LOG="yes" && \
511           export PACKER_LOG_PATH="packer-build.log" && \
512                       packer.io build -color=false -var-file=$CLOUDENV \
513                        -var-file=../packer/vars/{platform}.json \
514                        ../packer/templates/{template}.json
515
516 - builder:
517     # TODO: Verify signature after downloading users public key from a locally created
518     # repository instead of the public keymesh. This requires a process in place to get ODL
519     # developers public keys into a local repository without increasing the job thoughput.
520     name: verify-gpg-signature
521     builders:
522       - shell: !include-raw: include-raw-verify-gpg-signatures.sh
523
524 - builder:
525     name: opendaylight-infra-jjbini
526     builders:
527       - config-file-provider:
528           files:
529             - file-id: 'jjbini'
530               target: '$HOME/.config/jenkins_jobs/jenkins_jobs.ini'
531
532 - builder:
533     name: distribution-check-wipe
534     # Step zero: Wipe file repositories up front.
535     builders:
536       - shell: |
537           echo "wipe r: the local Maven repository"
538           rm -rfv /tmp/r
539           echo "wipe n: the fake remote (Nexus) repository"
540           rm -rfv /tmp/n
541           echo "wipe t: the transient repository used in some manipulations"
542           rm -rfv /tmp/t
543
544 - builder:
545     name: distribution-check-build-project
546     # Step one: Online build of the project, using local repository /tmp/r/ and deploying artifacts to /tmp/n/.
547     # Ordinary SingleFeatureTest failures are detected in the verify job, so we can use "q" profile here.
548     # Arguments:
549     #   pom: Relative path to pom file to use. Typically '$GERRIT_PROJECT/pom.xml'.
550     builders:
551       - maven-target:
552           maven-version: 'mvn33'
553           pom: '{pom}'
554           goals: >
555               clean deploy dependency:tree
556               -DoutputFile=dependency_tree.txt
557               -V -B -Pq
558               -Djenkins
559               -DaltDeploymentRepository=fake-nexus::default::file:///tmp/n/
560               -Dmaven.repo.local=/tmp/r
561               -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
562           java-opts:
563             - '-Xmx4096m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true'
564           settings: 'integration-settings'
565           settings-type: cfp
566           global-settings: 'odl-global-settings'
567           global-settings-type: cfp
568
569 - builder:
570     name: distribution-check-verify-groupid
571     # Step two: Verify all deployed artifacts belong to the project's groupId.
572     # This is done by moving the allowed directories out of /tmp/n and checking no files remained there.
573     # The correct directory is derived from $GERRIT_PROJECT.
574     # TODO: Verify all deployed artifacts are snapshots.
575     # Arguments:
576     #   gerrit-project: Project name as nexus URI part. Typically '$GERRIT_PROJECT'.
577     builders:
578       - shell: |
579           mkdir -p /tmp/t/org/opendaylight/{gerrit-project}
580           mv /tmp/n/org/opendaylight/{gerrit-project}/* /tmp/t/org/opendaylight/{gerrit-project}/
581           test -z "`find /tmp/n/ -type f`" || ( echo "ERROR: Mismatched groupId detected (see above)." && false )
582           rm -rf /tmp/n
583           mv /tmp/t /tmp/n
584
585 - builder:
586     name: distribution-check-download-deps
587     # Step three: Online build of integration distribution.
588     # This step is mainly used for downloading other project artifacts.
589     # Running SingleFeaturesTest here does not seem to be required, so -Pq is used again.
590     # Arguments:
591     #   dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended.
592     builders:
593       - maven-target:
594           maven-version: 'mvn33'
595           pom: '{dist-pom}'
596           goals: >
597               clean install dependency:tree
598               -DoutputFile=dependency_tree.txt
599               -V -B -Pq
600               -Djenkins
601               -Dmaven.repo.local=/tmp/r
602               -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
603           java-opts:
604             - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true'
605           settings: 'integration-settings'
606           settings-type: cfp
607           global-settings: 'odl-global-settings'
608           global-settings-type: cfp
609
610 - builder:
611     name: distribution-check-delete-snapshots
612     # Step four: Delete snapshot artifacts from the local repository.
613     # This is critical to detect orphaned artifacts or missing project-internal dependency declarations.
614     # Also other files related to maven repository resolution are removed,
615     # and then empty directories are removed, in order to simplify debugging.
616     builders:
617       - shell: !include-raw-escape: integration-distribution-delete-snaphot-artifacts.sh
618
619 - builder:
620     name: distribution-check-configure-remotes
621     # Now the ugly part. It seems that the only way to tell Maven 2+
622     # which remote repositories to use is via settings.xml file.
623     # So we create such a file here, but it needs most of odlparent:settings.xml
624     builders:
625       - shell: |
626           echo '
627           <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
628             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
629             xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
630             https://maven.apache.org/xsd/settings-1.0.0.xsd">
631             <profiles>
632               <profile>
633                 <id>opendaylight-release</id>
634                 <repositories>
635                   <repository>
636                     <id>opendaylight-mirror</id>
637                     <name>opendaylight</name>
638                     <url>https://nexus.opendaylight.org/content/repositories/public/</url>
639                     <releases><updatePolicy>never</updatePolicy></releases>
640                     <snapshots><enabled>false</enabled></snapshots>
641                   </repository>
642                 </repositories>
643                 <pluginRepositories>
644                   <pluginRepository>
645                     <id>opendaylight-plugin-mirror</id>
646                     <name>opendaylight-plugin</name>
647                     <url>https://nexus.opendaylight.org/content/repositories/public/</url>
648                     <releases><updatePolicy>never</updatePolicy></releases>
649                     <snapshots><enabled>false</enabled></snapshots>
650                   </pluginRepository>
651                 </pluginRepositories>
652               </profile>
653               <profile>
654                 <id>file-snapshots</id>
655                 <repositories>
656                   <repository>
657                     <id>file-snapshots</id>
658                     <name>file</name>
659                     <url>file:///tmp/n/</url>
660                     <releases><enabled>false</enabled></releases>
661                   </repository>
662                 </repositories>
663                 <pluginRepositories>
664                   <pluginRepository>
665                     <id>file-plugin-snapshots</id>
666                     <name>file-plugin</name>
667                     <url>file:///tmp/n/</url>
668                     <releases><enabled>false</enabled></releases>
669                   </pluginRepository>
670                 </pluginRepositories>
671               </profile>
672             </profiles>
673             <activeProfiles>
674               <activeProfile>file-snapshots</activeProfile>
675               <activeProfile>opendaylight-release</activeProfile>
676             </activeProfiles>
677           </settings>
678           ' > fake_remotes.xml
679           # Notes: The settings are minimal in order to detect breakage scenarios,
680           # while allowing for the following quirks:
681           # * Some plugins seem to have hardcoded repos, for example check-license looks at repository.apache.org
682           # * Some plugin artifacts (related to surefire) are not downloaded when tests are skipped.
683           # * populate-local-repo looks at oss.sonatype.org and does not store things (like guava) to /tmp/r
684
685 - builder:
686     name: distribution-check-repeat-build
687     # Step five: Repeat the distribution build but with the new settings.
688     # Here, only the project snapshot artifacts deployed to /tmp/n are available,
689     # which faithfully reproduces conditions in later verify-like job runs.
690     # We cannot use --offline, because: "Cannot access file (file:///tmp/n) in offline mode"
691     # This is where SingleFeatureTest is not skipped.
692     # Arguments:
693     #   dist-pom: Relative path to pom file to use. 'distribution/pom.xml' is recommended.
694     builders:
695       - maven-target:
696           maven-version: 'mvn33'
697           pom: '{dist-pom}'
698           goals: >
699               clean install dependency:tree
700               -DoutputFile=dependency_tree.txt -s fake_remotes.xml
701               -V -B -Pq
702               -DskipTests=false
703               -Djenkins
704               -Dmaven.repo.local=/tmp/r
705               -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
706           java-opts:
707             - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true'