--- - job-template: # Template used for running CLM scans # Arguements: # {name} - Project Shortname # {project} - Fully qualified project name # {mvn-settings} - Project maven settings file # {stream} # {jdk} name: '{project-name}-clm-{stream}' project-type: freestyle node: '{build-node}' jdk: '{jdk}' properties: - opendaylight-infra-properties: build-days-to-keep: '{build-days-to-keep}' parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' scm: - git-scm: refspec: '' branch: '{branch}' wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - timed: 'H H * * 6' builders: - provide-maven-settings: global-settings-file: 'odl-global-settings' settings-file: '{mvn-settings}' - maven-target: maven-version: 'mvn33' pom: 'pom.xml' goals: > clean install dependency:tree com.sonatype.clm:clm-maven-plugin:index -V -B -Pq -Djenkins -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx4096m -XX:MaxPermSize=512m' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp - shell: 'find . -regex ".*karaf/target" | xargs rm -rf' - check-clm: application-name: '{project-name}' publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '[{project-name}]' - opendaylight-infra-shiplogs: maven-version: 'mvn33' - job-template: # Template: {project-name}-distribution-check-{stream} # Goal: Build a patch and make sure the distribution can deploy with this change. # Operation: This job template builds a patch, creates a distribution containing # the patch (making sure dependencies are specified), # and performs the distribution deploy test. name: '{project-name}-distribution-check-{stream}' disabled: false project-type: freestyle node: '{build-node}' concurrent: true jdk: '{jdk}' properties: - opendaylight-infra-properties: build-days-to-keep: '{build-days-to-keep}' parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts} **/dependency_tree.txt **/target/surefire-reports/*-output.txt' - integration-distribution-git-url: git-url: '{git-url}' scm: - integration-gerrit-scm: basedir: '$GERRIT_PROJECT' refspec: '$GERRIT_REFSPEC' branch: '{branch}' - integration-distribution-scm: branch: '{distribution_branch}' wrappers: - opendaylight-infra-wrappers: # Distro-check jobs typically run within 10 - 30 minutes # with 45 minutes being the occassional edge case. # enforce a 60 minute limit to ensure stuck jobs get # cleared up sooner. build-timeout: '60' triggers: - gerrit-trigger-patch-submitted: server: '{server-name}' project: '{project}' branch: '{branch}' files: '**' builders: # Step zero: Wipe file repositories up front. - 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 # 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. - maven-target: maven-version: 'mvn33' pom: '$GERRIT_PROJECT/pom.xml' goals: > clean deploy dependency:tree -DoutputFile=dependency_tree.txt -V -B -Pq -Djenkins -Dstream={stream} -DaltDeploymentRepository=fake-nexus::default::file:///tmp/n/ -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx4096m -XX:MaxPermSize=1024m -Dmaven.compile.fork=true' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp # 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. - 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 # 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. - maven-target: maven-version: 'mvn33' pom: 'distribution/pom.xml' goals: > clean install dependency:tree -DoutputFile=dependency_tree.txt -V -B -Pq -Djenkins -Dstream={stream} -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp # 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. - shell: !include-raw-escape: integration-distribution-delete-snaphot-artifacts.sh # 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 - 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 # 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. - maven-target: maven-version: 'mvn33' pom: 'distribution/pom.xml' goals: > clean install dependency:tree -DoutputFile=dependency_tree.txt -s fake_remotes.xml -V -B -Pq -DskipTests=false -Djenkins -Dstream={stream} -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx1024m -XX:MaxPermSize=256m -Dmaven.compile.fork=true' # Step six: Run Karaf and verify no critical failures are present. - integration-distribution-check publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '[{project-name}]' - postbuildscript: builders: - shell: | #!/bin/bash mkdir -p $WORKSPACE/archives cp karaf*.log $WORKSPACE/archives script-only-if-succeeded: false script-only-if-failed: false mark-unstable-if-failed: true - archive: artifacts: '*.zip' - opendaylight-infra-shiplogs: maven-version: 'mvn33' - job-template: name: '{project-name}-integration-{stream}' # Job template for ODL integration verify jobs # # This is similar to a normal verify job, but it runs # when a project that's a dependency of your project # is successfully built. # # Required Variables: # stream: release stream (eg. boron or carbon) # branch: git branch (eg. stable/boron or master) project-type: freestyle node: '{build-node}' jdk: '{jdk}' properties: - opendaylight-infra-properties: build-days-to-keep: '{build-days-to-keep}' parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' scm: - git-scm: refspec: '' branch: '{branch}' wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - reverse: jobs: '{dependencies}' result: 'success' builders: - jacoco-nojava-workaround - provide-maven-settings: global-settings-file: 'odl-global-settings' settings-file: '{mvn-settings}' - maven-target: maven-version: 'mvn33' goals: '{mvn-goals} -V -B -Djenkins -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r' java-opts: - '{mvn-opts}' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '{email-upstream}' - findbugs - jacoco-report - opendaylight-infra-shiplogs: maven-version: 'mvn33' - job-template: name: '{project-name}-merge-{stream}' # Job template for ODL merge jobs # # The purpose of this job template is to setup a ODL merge job # and deploy artifacts to Nexus. # # Required Variables: # stream: release stream (eg. boron or carbon) # branch: git branch (eg. stable/boron or master) # Need to keep jobs that deploy to Nexus at end of build as Maven # projects. Maybe reconsider this once upstream moves deploy to a # separate lifecycle: # https://issues.apache.org/jira/browse/MNG-5666 project-type: maven node: '{build-node}' jdk: '{jdk}' properties: - opendaylight-infra-properties: build-days-to-keep: 14 parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' scm: - gerrit-trigger-scm: refspec: '' choosing-strategy: 'default' wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - timed: 'H H * * 0' - gerrit-trigger-patch-merged: server-name: '{server-name}' name: '{project}' branch: '{branch}' prebuilders: - jacoco-nojava-workaround - provide-maven-settings: global-settings-file: 'odl-global-settings' settings-file: '{mvn-settings}' # TODO: Do we want to apply sophisticated checks as in *-distribution-check-*? maven: maven-name: 'mvn33' goals: > {mvn-goals} -V -B -Djenkins -Dmerge -Dstream={stream} -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r maven-opts: '{mvn-opts}' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp post-step-run-condition: UNSTABLE postbuilders: - conditional-step: condition-kind: file-exists condition-filename: deploy-site.xml condition-basedir: workspace # The strategy here is intentional to run Maven site:deploy twice # once using regular pom.xml to produce a staged-site which is # then used by deploy-site.xml to push to Nexus. This is a # workaround to Maven Site's default linking code which creates # incorrect URLs for sites due to auto-detection assuming your # project is configured in a certain way which ODL is not. steps: - maven-target: maven-version: 'mvn33' pom: pom.xml goals: 'site:deploy -V -B -Dstream={stream}' java-opts: - '-Xmx2g' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp - maven-target: maven-version: 'mvn33' pom: deploy-site.xml goals: 'site:deploy -V -B -Dstream={stream}' java-opts: - '-Xmx2g' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp reporters: - findbugs publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '[{project-name}]' - maven-deploy: id: '' unique-version: true deploy-unstable: false - jacoco-report - opendaylight-infra-shiplogs: maven-version: 'mvn33' - trigger: project: 'distribution-merge-{stream}' threshold: SUCCESS - job-template: name: '{project-name}-sonar' disabled: false project-type: freestyle node: '{build-node}' jdk: 'openjdk8' properties: - opendaylight-infra-properties: build-days-to-keep: 7 parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' scm: - git-scm: refspec: '' branch: 'master' wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - timed: 'H H * * 6' - gerrit-trigger-patch-sonar: server-name: '{server-name}' name: '{project}' # FIXME: Make sure this does not alter Gerrit votes, then update docs. builders: - jacoco-nojava-workaround - provide-maven-settings: global-settings-file: 'odl-global-settings' settings-file: '{mvn-settings}' - maven-target: maven-version: 'mvn33' goals: > {mvn-goals} -V -B -Djenkins -Dsonar -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r maven-opts: - '{mvn-opts}' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp - maven-target: maven-version: 'mvn33' # We should switch to the recommended configuration of sonar once # JJB adds support for configurating the Sonar wrapper: # http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+Jenkins goals: > sonar:sonar -V -B -Djenkins -Dsonar -Dsonar.host.url=https://sonar.opendaylight.org -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r maven-opts: - '{mvn-opts}' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '[{project-name}]' - jacoco-report - findbugs - opendaylight-infra-shiplogs: maven-version: 'mvn33' - job-template: name: '{project-name}-validate-autorelease-{stream}' disabled: false project-type: freestyle node: '{build-node}' concurrent: true jdk: '{jdk}' properties: - opendaylight-infra-properties: build-days-to-keep: 7 parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' - autorelease-release-tag: release-tag: 'validate' - autorelease-release-branch: release-branch: '{branch}' - string: name: CLONE_URL default: '{git-url}/releng/autorelease' description: "Autorelease clone URL" scm: - git: url: '$CLONE_URL' credentials-id: 'opendaylight-jenkins-ssh' refspec: '' branches: - 'origin/{branch}' skip-tag: true submodule: recursive: true timeout: 60 wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - gerrit-trigger-patch-submitted: server: '{server-name}' project: '{project}' branch: '{branch}' files: '**/*.xml' builders: - jacoco-nojava-workaround - autorelease-checkout-gerrit-patch - autorelease-generate-release-patches # In a perfect world projects should be releasing separately and we consume them # via a project that pulls the release bits from each project from Nexus. # Keep the patches compatible with that ideal, but apply an edit # to enable building in a single maven reactor afterwards. - autorelease-fix-relative-paths - maven-target: maven-version: 'mvn33' pom: validate-pom.xml goals: > clean install dependency:tree -V -B -T1.5C -Pq -Djenkins -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx8g' settings: 'autorelease-settings' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp - maven-target: maven-version: 'mvn33' pom: 'pom.xml' goals: > clean validate -V -B -Pq -Djenkins -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '-Xmx8g -XX:MaxPermSize=1024m -Dmaven.compile.fork=true' settings: 'autorelease-settings' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp - autorelease-sys-stats publishers: - email-notification: email-recipients: '{email-recipients}' email-prefix: '[autorelease] [{project-name}]' - opendaylight-infra-shiplogs: maven-version: 'mvn33' - job-template: name: '{project-name}-verify-{stream}-{maven}-{jdks}' # Job template for ODL verify jobs # # The purpose of this job template is to setup a ODL verify job # # Required Variables: # stream: release stream (eg. boron or carbon) # branch: git branch (eg. stable/boron or master) project-type: freestyle node: '{build-node}' concurrent: true jdk: '{jdks}' properties: - opendaylight-infra-properties: build-days-to-keep: 7 parameters: - opendaylight-infra-parameters: project: '{project}' branch: '{branch}' refspec: 'refs/heads/{branch}' artifacts: '{archive-artifacts}' scm: - gerrit-trigger-scm: refspec: '$GERRIT_REFSPEC' choosing-strategy: 'gerrit' wrappers: - opendaylight-infra-wrappers: build-timeout: '{build-timeout}' triggers: - gerrit-trigger-patch-submitted: server: '{server-name}' project: '{project}' branch: '{branch}' files: '**' builders: - jacoco-nojava-workaround - provide-maven-settings: global-settings-file: 'odl-global-settings' settings-file: '{mvn-settings}' - maven-target: maven-version: '{mvn-version}' goals: > {mvn-goals} -V -B -Djenkins -Dstream={stream} -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r java-opts: - '{mvn-opts}' settings: '{mvn-settings}' settings-type: cfp global-settings: 'odl-global-settings' global-settings-type: cfp publishers: - findbugs - email-notification: email-recipients: '{email-recipients}' email-prefix: '[{project-name}]' - jacoco-report - opendaylight-infra-shiplogs: maven-version: '{mvn-version}'