Added vagrant setup for a Jenkins system for ONAP

Add a set of vagrant scripts that will set up a
local Jenkins environment with pre-defined jobs
to build all the ONAP java code and docker images.

Change-Id: I67ed254bcb38a7be989b7c2861fd3ea4ec9c66f2
Signed-off-by: Gary Wu <gary.i.wu@huawei.com>
diff --git a/bootstrap/jenkins/vagrant/Vagrantfile b/bootstrap/jenkins/vagrant/Vagrantfile
new file mode 100644
index 0000000..02b3ec1
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/Vagrantfile
@@ -0,0 +1,75 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# All Vagrant configuration is done below. The "2" in Vagrant.configure
+# configures the configuration version (we support older styles for
+# backwards compatibility). Please don't change it unless you know what
+# you're doing.
+Vagrant.configure(2) do |config|
+  # The most common configuration options are documented and commented below.
+  # For a complete reference, please see the online documentation at
+  # https://docs.vagrantup.com.
+
+  # Every Vagrant development environment requires a box. You can search for
+  # boxes at https://atlas.hashicorp.com/search.
+  config.vm.box = "ubuntu/xenial64"
+
+  # Disable automatic box update checking. If you disable this, then
+  # boxes will only be checked for updates when the user runs
+  # `vagrant box outdated`. This is not recommended.
+  # config.vm.box_check_update = false
+
+  # Create a forwarded port mapping which allows access to a specific port
+  # within the machine from a port on the host machine. In the example below,
+  # accessing "localhost:8080" will access port 80 on the guest machine.
+  config.vm.network "forwarded_port", guest: 8080, host: 8080
+
+  # Create a private network, which allows host-only access to the machine
+  # using a specific IP.
+  config.vm.network "private_network", ip: "192.168.33.10"
+
+  # Create a public network, which generally matched to bridged network.
+  # Bridged networks make the machine appear as another physical device on
+  # your network.
+  # config.vm.network "public_network"
+
+  # Share an additional folder to the guest VM. The first argument is
+  # the path on the host to the actual folder. The second argument is
+  # the path on the guest to mount the folder. And the optional third
+  # argument is a set of non-required options.
+  # config.vm.synced_folder "../data", "/vagrant_data"
+
+  # Provider-specific configuration so you can fine-tune various
+  # backing providers for Vagrant. These expose provider-specific options.
+  # Example for VirtualBox:
+  #
+  config.vm.provider "virtualbox" do |vb|
+  #   # Display the VirtualBox GUI when booting the machine
+  #   vb.gui = true
+  #
+  #   # Customize the amount of memory on the VM:
+    vb.memory = "8192"
+  end
+  #
+  # View the documentation for the provider you are using for more
+  # information on available options.
+
+  # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies
+  # such as FTP and Heroku are also available. See the documentation at
+  # https://docs.vagrantup.com/v2/push/atlas.html for more information.
+  # config.push.define "atlas" do |push|
+  #   push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME"
+  # end
+
+  # Enable provisioning with a shell script. Additional provisioners such as
+  # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
+  # documentation for more information about their specific syntax and use.
+  # config.vm.provision "shell", inline: <<-SHELL
+  #   sudo apt-get update
+  #   sudo apt-get install -y apache2
+  # SHELL
+  config.vm.provision :shell, path: "bootstrap.sh"
+
+  # requires vagrant plugin install vagrant-disksize
+  config.disksize.size = '80GB'
+end
diff --git a/bootstrap/jenkins/vagrant/bootstrap.sh b/bootstrap/jenkins/vagrant/bootstrap.sh
new file mode 100755
index 0000000..ab5c45f
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/bootstrap.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+
+sed -i 's|archive\.ubuntu\.com|mirrors.ocf.berkeley.edu|g' /etc/apt/sources.list
+
+echo "192.168.33.1 nexus-proxy" >> /etc/hosts
+
+
+cat >> /etc/inputrc <<EOF
+set show-all-if-ambiguous on
+set show-all-if-unmodified on
+set match-hidden-files off
+set mark-symlinked-directories on
+EOF
+
+
+apt-get update
+apt-get -y install git
+git config --global user.email "gary.i.wu@huawei.com"
+git config --global user.name "Gary Wu"
+apt-get -y install curl openjdk-8-jdk maven unzip
+
+# install Jenkins
+wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
+sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
+apt-get update
+apt-get -y install jenkins jenkins-job-builder python-pip
+
+apt-get -y install docker.io
+sudo usermod -aG docker ubuntu
+sudo usermod -aG docker jenkins
+
+su -l jenkins -c "/vagrant/jenkins-init-1.sh"
+
+sudo systemctl restart jenkins
+sleep 5
+
+su -l jenkins -c "/vagrant/jenkins-init-2.sh"
+
+sudo systemctl restart jenkins
+sleep 5
+
+su -l jenkins -c "/vagrant/jjb-init.sh"
+
diff --git a/bootstrap/jenkins/vagrant/build-all-docker.sh b/bootstrap/jenkins/vagrant/build-all-docker.sh
new file mode 100755
index 0000000..081bb12
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/build-all-docker.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# build all jobs
+cd ~jenkins
+for d in jobs/docker*; do
+    JOB=$(basename "$d")
+    echo build "$JOB"
+    java -jar jenkins-cli.jar -s http://localhost:8080/ -auth jenkins:jenkins build "$JOB"
+done
diff --git a/bootstrap/jenkins/vagrant/build-all-java.sh b/bootstrap/jenkins/vagrant/build-all-java.sh
new file mode 100755
index 0000000..67333b7
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/build-all-java.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+
+# build all jobs
+cd ~jenkins
+for d in jobs/java*; do
+    JOB=$(basename "$d")
+    echo build "$JOB"
+    java -jar jenkins-cli.jar -s http://localhost:8080/ -auth jenkins:jenkins build "$JOB"
+done
diff --git a/bootstrap/jenkins/vagrant/jenkins-init-1.sh b/bootstrap/jenkins/vagrant/jenkins-init-1.sh
new file mode 100755
index 0000000..a5599a7
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jenkins-init-1.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+git config --global user.email "jenkins@localhost"
+git config --global user.name "jenkins"
+
+cd ~/jenkins
+
+cp /etc/skel/.profile .
+cat > .bashrc <<EOF
+alias ls='ls --color -F'
+EOF
+
+git init
+
+git add -A
+git commit -m 'Initial installation config'
+
+mkdir -p ~/.m2
+cp /vagrant/settings.xml ~/.m2
+rm -f secrets/initialAdminPassword
+rm -rf users/admin
+rsync -avP /vagrant/jenkins/ .
+
+git add -A
+git commit -m 'Set up jenkins user'
+
diff --git a/bootstrap/jenkins/vagrant/jenkins-init-2.sh b/bootstrap/jenkins/vagrant/jenkins-init-2.sh
new file mode 100755
index 0000000..eb0efe6
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jenkins-init-2.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+
+cd ~jenkins
+ln -s /var/cache/jenkins/war/WEB-INF/jenkins-cli.jar
+
+# Get the update center ourself
+curl -L http://updates.jenkins-ci.org/update-center.json | sed '1d;$d' | curl -X POST -H 'Accept: application/json' -d @- http://localhost:8080/updateCenter/byId/default/postBack
+
+java -jar jenkins-cli.jar -s http://localhost:8080/ -auth jenkins:jenkins install-plugin git
+java -jar jenkins-cli.jar -s http://localhost:8080/ -auth jenkins:jenkins install-plugin ws-cleanup
+java -jar jenkins-cli.jar -s http://localhost:8080/ -auth jenkins:jenkins install-plugin envinject
+
+git add -A
+git commit -m 'Install initial plugins'
+
diff --git a/bootstrap/jenkins/vagrant/jenkins/jenkins.install.InstallUtil.lastExecVersion b/bootstrap/jenkins/vagrant/jenkins/jenkins.install.InstallUtil.lastExecVersion
new file mode 100644
index 0000000..00030ea
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jenkins/jenkins.install.InstallUtil.lastExecVersion
@@ -0,0 +1 @@
+2.46.3
diff --git a/bootstrap/jenkins/vagrant/jenkins/users/jenkins/config.xml b/bootstrap/jenkins/vagrant/jenkins/users/jenkins/config.xml
new file mode 100644
index 0000000..be836f2
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jenkins/users/jenkins/config.xml
@@ -0,0 +1,38 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<user>
+  <fullName>jenkins</fullName>
+  <properties>
+    <jenkins.security.ApiTokenProperty>
+      <apiToken>{AQAAABAAAAAwQAGpldGajxw//dhxd53gZGv4w0JnZYDETTLBQdpotQXt02s0lq13YrhyaytbLFMflb98hzWY9YBlDIThZt7u+Q==}</apiToken>
+    </jenkins.security.ApiTokenProperty>
+    <com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty plugin="credentials@2.1.13">
+      <domainCredentialsMap class="hudson.util.CopyOnWriteMap$Hash"/>
+    </com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty>
+    <hudson.model.MyViewsProperty>
+      <views>
+        <hudson.model.AllView>
+          <owner class="hudson.model.MyViewsProperty" reference="../../.."/>
+          <name>all</name>
+          <filterExecutors>false</filterExecutors>
+          <filterQueue>false</filterQueue>
+          <properties class="hudson.model.View$PropertyList"/>
+        </hudson.model.AllView>
+      </views>
+    </hudson.model.MyViewsProperty>
+    <org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty plugin="display-url-api@2.0">
+      <providerId>default</providerId>
+    </org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty>
+    <hudson.model.PaneStatusProperties>
+      <collapsed/>
+    </hudson.model.PaneStatusProperties>
+    <hudson.search.UserSearchProperty>
+      <insensitiveSearch>false</insensitiveSearch>
+    </hudson.search.UserSearchProperty>
+    <hudson.security.HudsonPrivateSecurityRealm_-Details>
+      <passwordHash>#jbcrypt:$2a$10$Esc9z/mnK/CQ8crgFbE3/eP1EI6pvzIHRBe3SSik7rrNt.DDftON2</passwordHash>
+    </hudson.security.HudsonPrivateSecurityRealm_-Details>
+    <hudson.tasks.Mailer_-UserProperty plugin="mailer@1.20">
+      <emailAddress>jenkins@localhost</emailAddress>
+    </hudson.tasks.Mailer_-UserProperty>
+  </properties>
+</user>
diff --git a/bootstrap/jenkins/vagrant/jenkins_jobs.ini b/bootstrap/jenkins/vagrant/jenkins_jobs.ini
new file mode 100644
index 0000000..5cc6dc9
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jenkins_jobs.ini
@@ -0,0 +1,13 @@
+[job_builder]
+ignore_cache=True
+keep_descriptions=False
+include_path=.:scripts:~/git/
+recursive=False
+exclude=.*:manual:./development
+allow_duplicates=False
+
+[jenkins]
+user=jenkins
+password=jenkins
+url=http://localhost:8080
+query_plugins_info=False
diff --git a/bootstrap/jenkins/vagrant/jjb-init.sh b/bootstrap/jenkins/vagrant/jjb-init.sh
new file mode 100755
index 0000000..01cfcfa
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jjb-init.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+git add -A
+git commit -m 'Installed plugins, restarted Jenkins'
+
+
+mkdir -p ~/.config/jenkins_jobs
+cp /vagrant/jenkins_jobs.ini ~/.config/jenkins_jobs
+
+pip install --user jenkins-job-builder
+
+jenkins-job-builder update -r /vagrant/jjb
+
+cat > .gitignore <<EOF
+jobs/*/builds
+jobs/*/last*
+workspace/
+.m2/repository/
+logs/
+EOF
+
+git add -A
+git commit -m 'Set up initial jobs'
+
+
+# pull 3rd party docker images
+docker pull ubuntu:14.04
+docker pull ubuntu:16.04
+docker pull openjdk:8-jre
+docker pull tomcat:8.0-jre8
+docker pull jetty:9.3-jre8
+docker pull frolvlad/alpine-oraclejdk8:slim
+docker pull java:openjdk-8-jre
+docker pull node:4.6.0
diff --git a/bootstrap/jenkins/vagrant/jjb/docker-jobs.yaml b/bootstrap/jenkins/vagrant/jjb/docker-jobs.yaml
new file mode 100644
index 0000000..5925b5d
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jjb/docker-jobs.yaml
@@ -0,0 +1,76 @@
+- project:
+    name: onap-docker-with-pom
+    jobs:
+     - 'docker-with-pom'
+    project:
+     - 'aai_aai-service_ajsc-aai':
+         repo: 'aai/aai-service'
+         pom: 'ajsc-aai/pom.xml'
+         mvn-options: 'docker:build'
+     - 'aai_data-router':
+         repo: 'aai/data-router'
+         pom: 'pom.xml'
+         mvn-options: 'docker:build'
+     - 'aai_model-loader':
+         repo: 'aai/model-loader'
+         pom: 'pom.xml'
+         mvn-options: 'docker:build'
+     - 'aai_resources_aai-resources':
+         repo: 'aai/resources'
+         pom: 'aai-resources/pom.xml'
+         mvn-options: 'docker:build'
+     - 'aai_search-data-service':
+         repo: 'aai/search-data-service'
+         mvn-options: 'docker:build'
+     - 'aai_sparky-be':
+         repo: 'aai/sparky-be'
+         mvn-options: 'docker:build'
+     - 'aai_traversal_aai-traversal':
+         repo: 'aai/traversal'
+         pom: 'aai-traversal/pom.xml'
+         mvn-options: 'docker:build'
+     - 'appc':
+         repo: 'appc/deployment'
+         mvn-options: '-P docker'
+     - 'dcae_dcae-controller':
+         repo: 'dcae/demo'
+         shell-cmd: 'bash dcae-demo-controller/src/main/docker-build/build.sh'
+     - 'dcae_dcae-dmaapbc':
+         repo: 'dcae/dmaapbc'
+         shell-cmd: 'docker build -f ./Dockerfile .'
+     - 'dcae_dcae-inventory':
+         repo: 'dcae/dcae-inventory'
+         mvn-options: 'docker:build'
+     - 'mso':
+         repo: 'mso'
+         pom: 'packages/docker/pom.xml'
+         mvn-options: '-P docker'
+     - 'policy':
+         repo: 'policy/docker'
+         shell-cmd: './docker_build.sh'
+     - 'portal_ecomp-portal-widget-ms':
+         repo: 'portal'
+         pom: 'ecomp-portal-widget-ms/pom.xml'
+         mvn-options: 'docker:build'
+     - 'sdc':
+         repo: 'sdc'
+         pom: 'pom.xml'
+         mvn-options: '-P docker'
+     - 'sdnc':
+         repo: 'sdnc/oam'
+         mvn-options: '-P docker'
+     - 'vid':
+         repo: 'vid'
+         mvn-options: '-P docker'
+
+- project:
+    name: onap-docker-without-pom
+    jobs:
+     - 'docker-without-pom'
+    project:
+     - 'dcae_dcae-orch-dispatcher':
+         repo: 'dcae/orch-dispatcher'
+         shell-cmd: 'docker build -f ./Dockerfile .'
+     - 'portal':
+         repo: 'portal'
+         shell-cmd: 'git -C ecompsdkos pull || git clone $GIT_NO_PROJECT/ecompsdkos; git -C dmaapbc pull || git clone $GIT_NO_PROJECT/ui/dmaapbc dmaapbc; cd deliveries; chmod +x *.sh; ./run.sh'
diff --git a/bootstrap/jenkins/vagrant/jjb/include-docker-login.sh b/bootstrap/jenkins/vagrant/jjb/include-docker-login.sh
new file mode 100644
index 0000000..561a91f
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jjb/include-docker-login.sh
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# vim: ts=4 sw=4 sts=4 et :
+
+DOCKER_REPOSITORIES="nexus3.onap.org:10001 \
+                   nexus3.onap.org:10002 \
+                   nexus3.onap.org:10003 \
+                   nexus3.onap.org:10004"
+
+for DOCKER_REPOSITORY in $DOCKER_REPOSITORIES;
+do
+    echo $DOCKER_REPOSITORY
+    docker login $DOCKER_REPOSITORY -u "anonymous" -p "anonymous"
+done
diff --git a/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml b/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml
new file mode 100644
index 0000000..570802e
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jjb/java-jobs.yaml
@@ -0,0 +1,167 @@
+- project:
+    name: onap-java
+    jobs:
+     - 'java-{project}'
+    project:
+     - 'aai_aai-common':
+         repo: 'aai/aai-common'
+         pom: 'pom.xml'
+     - 'aai_aai-service':
+         repo: 'aai/aai-service'
+         pom: 'pom.xml'
+     - 'aai_data-router':
+         repo: 'aai/data-router'
+         pom: 'pom.xml'
+     - 'aai_logging-service':
+         repo: 'aai/logging-service'
+         pom: 'pom.xml'
+     - 'aai_model-loader':
+         repo: 'aai/model-loader'
+         pom: 'pom.xml'
+     - 'aai_resources':
+         repo: 'aai/resources'
+         pom: 'pom.xml'
+     - 'aai_rest-client':
+         repo: 'aai/rest-client'
+         pom: 'pom.xml'
+     - 'aai_router-core':
+         repo: 'aai/router-core'
+         pom: 'pom.xml'
+     - 'aai_search-data-service':
+         repo: 'aai/search-data-service'
+         pom: 'pom.xml'
+     - 'aai_sparky-fe':
+         repo: 'aai/sparky-fe'
+         pom: 'pom.xml'
+     - 'aai_traversal':
+         repo: 'aai/traversal'
+         pom: 'pom.xml'
+     - 'appc':
+         repo: 'appc'
+         pom: 'pom.xml'
+     - 'appc_deployment':
+         repo: 'appc/deployment'
+         pom: 'pom.xml'
+     - 'dcae_apod_analytics':
+         repo: 'dcae/apod/analytics'
+         pom: 'pom.xml'
+     - 'dcae_collectors_ves':
+         repo: 'dcae/collectors/ves'
+         pom: 'pom.xml'
+     - 'dcae_controller':
+         repo: 'dcae/controller'
+         pom: 'pom.xml'
+     - 'dcae_controller_analytics':
+         repo: 'dcae/controller/analytics'
+         pom: 'pom.xml'
+     - 'dcae_dcae-inventory':
+         repo: 'dcae/dcae-inventory'
+         pom: 'pom.xml'
+     - 'dcae_demo':
+         repo: 'dcae/demo'
+         pom: 'pom.xml'
+     - 'dcae_dmaapbc':
+         repo: 'dcae/dmaapbc'
+         pom: 'pom.xml'
+     - 'dcae_operation_utils':
+         repo: 'dcae/operation/utils'
+         pom: 'pom.xml'
+     - 'dcae_pgaas_cdf_src_cdf-prop-value_cdf-prop-value':
+         repo: 'dcae/pgaas'
+         pom: 'cdf/src/cdf-prop-value/cdf-prop-value/pom.xml'
+     - 'dcae_pgaas_cdf_src_cdf-prop-value_cdf-util':
+         repo: 'dcae/pgaas'
+         pom: 'cdf/src/cdf-prop-value/cdf-util/pom.xml'
+     - 'demo':
+         repo: 'demo'
+         pom: 'pom.xml'
+     - 'ecompsdkos_ecomp-sdk':
+         repo: 'ecompsdkos'
+         pom: 'ecomp-sdk/pom.xml'
+     - 'mso':
+         repo: 'mso'
+         pom: 'pom.xml'
+     - 'mso_libs':
+         repo: 'mso/libs'
+         pom: 'pom.xml'
+     - 'ncomp_cdap':
+         repo: 'ncomp/cdap'
+         pom: 'pom.xml'
+     - 'ncomp_core':
+         repo: 'ncomp/core'
+         pom: 'pom.xml'
+     - 'ncomp_docker':
+         repo: 'ncomp/docker'
+         pom: 'pom.xml'
+     - 'ncomp_maven':
+         repo: 'ncomp/maven'
+         pom: 'pom.xml'
+     - 'ncomp_openstack':
+         repo: 'ncomp/openstack'
+         pom: 'pom.xml'
+     - 'ncomp_sirius_manager':
+         repo: 'ncomp/sirius/manager'
+         pom: 'pom.xml'
+     - 'ncomp_utils':
+         repo: 'ncomp/utils'
+         pom: 'pom.xml'
+     - 'policy_common':
+         repo: 'policy/common'
+         pom: 'pom.xml'
+     - 'policy_docker':
+         repo: 'policy/docker'
+         pom: 'pom.xml'
+     - 'policy_drools-applications':
+         repo: 'policy/drools-applications'
+         pom: 'pom.xml'
+     - 'policy_drools-pdp':
+         repo: 'policy/drools-pdp'
+         pom: 'pom.xml'
+     - 'policy_engine':
+         repo: 'policy/engine'
+         pom: 'pom.xml'
+     - 'portal':
+         repo: 'portal'
+         pom: 'pom.xml'
+     - 'sdc':
+         repo: 'sdc'
+         pom: 'pom.xml'
+     - 'sdc_jtosca':
+         repo: 'sdc/jtosca'
+         pom: 'pom.xml'
+     - 'sdc_sdc-distribution-client':
+         repo: 'sdc/sdc-distribution-client'
+         pom: 'pom.xml'
+     - 'sdc_sdc-titan-cassandra':
+         repo: 'sdc/sdc-titan-cassandra'
+         pom: 'pom.xml'
+     - 'sdc_sdc-tosca':
+         repo: 'sdc/sdc-tosca'
+         pom: 'pom.xml'
+     - 'sdc_sdc_common':
+         repo: 'sdc/sdc_common'
+         pom: 'pom.xml'
+     - 'sdnc_adaptors':
+         repo: 'sdnc/adaptors'
+         pom: 'pom.xml'
+     - 'sdnc_core':
+         repo: 'sdnc/core'
+         pom: 'pom.xml'
+     - 'sdnc_northbound':
+         repo: 'sdnc/northbound'
+         pom: 'pom.xml'
+     - 'sdnc_oam':
+         repo: 'sdnc/oam'
+         pom: 'pom.xml'
+     - 'sdnc_plugins':
+         repo: 'sdnc/plugins'
+         pom: 'pom.xml'
+     - 'ui_dmaapbc':
+         repo: 'ui/dmaapbc'
+         pom: 'pom.xml'
+     - 'vid':
+         repo: 'vid'
+         pom: 'pom.xml'
+     - 'vid_asdcclient':
+         repo: 'vid/asdcclient'
+         pom: 'pom.xml'
diff --git a/bootstrap/jenkins/vagrant/jjb/template.yaml b/bootstrap/jenkins/vagrant/jjb/template.yaml
new file mode 100644
index 0000000..e035583
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/jjb/template.yaml
@@ -0,0 +1,76 @@
+- builder:
+    name: docker-login
+    builders:
+      - shell: !include-raw: include-docker-login.sh
+
+- job-template:
+    name: 'java-{project}'
+    project-type: freestyle
+    scm:
+      - git:
+          url: 'http://gerrit.onap.org/r/{repo}'
+          branches:
+            - '*/master'
+          wipe-workspace: false
+          skip-tag: true
+          timeout: 30
+    builders:
+      - maven-target:
+          goals: '-B clean install'
+          pom: '{pom}'
+          properties:
+            - skipTests=true
+
+- job-template:
+    id: docker-with-pom
+    name: 'docker-{project}'
+    project-type: freestyle
+    pom: 'pom.xml'
+    mvn-options: ''
+    shell-cmd: ''
+    scm:
+      - git:
+          url: 'http://gerrit.onap.org/r/{repo}'
+          branches:
+            - '*/master'
+          wipe-workspace: false
+          skip-tag: true
+          timeout: 30
+    properties:
+      - inject:
+          properties-content: |
+            GIT_NO_PROJECT=http://gerrit.onap.org/r
+    builders:
+      - docker-login
+      - maven-target:
+          goals: '-B clean package {mvn-options}'
+          pom: '{pom}'
+          properties:
+            - skipTests=true
+            - docker.pull.registry=nexus3.onap.org:10001
+            - docker.push.registry=nexus3.onap.org:10003
+      - shell: "{shell-cmd}"
+
+- job-template:
+    id: docker-without-pom
+    name: 'docker-{project}'
+    project-type: freestyle
+    shell-cmd: ''
+    scm:
+      - git:
+          url: 'http://gerrit.onap.org/r/{repo}'
+          branches:
+            - '*/master'
+          wipe-workspace: false
+          skip-tag: true
+          timeout: 30
+    properties:
+      - inject:
+          properties-content: |
+            GIT_NO_PROJECT=http://gerrit.onap.org/r
+            GLOBAL_SETTINGS_FILE=/var/lib/jenkins/.m2/settings.xml
+            SETTINGS_FILE=/var/lib/jenkins/.m2/settings.xml
+            MVN=mvn
+    builders:
+      - docker-login
+      - shell: "{shell-cmd}"
diff --git a/bootstrap/jenkins/vagrant/settings.xml b/bootstrap/jenkins/vagrant/settings.xml
new file mode 100644
index 0000000..41da9be
--- /dev/null
+++ b/bootstrap/jenkins/vagrant/settings.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright (c) 2016 Huawei Technologies Co., Ltd. and others.  All rights reserved.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+-->
+<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
+
+  <profiles>
+    <profile>
+      <id>onap-snapshots</id>
+      <repositories>
+        <repository>
+          <id>onap-snapshots</id>
+          <name>onap-snapshots</name>
+          <url>https://nexus.onap.org/content/repositories/snapshots/</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>onap-snapshots</id>
+          <name>onap-snapshots</name>
+          <url>https://nexus.onap.org/content/repositories/snapshots/</url>
+          <releases>
+            <enabled>false</enabled>
+          </releases>
+          <snapshots>
+            <enabled>true</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+    <profile>
+      <id>onap-staging</id>
+      <repositories>
+        <repository>
+          <id>onap-staging</id>
+          <name>onap-staging</name>
+          <url>https://nexus.onap.org/content/repositories/staging/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>onap-staging</id>
+          <name>onap-staging</name>
+          <url>https://nexus.onap.org/content/repositories/staging/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+    <profile>
+      <id>onap-releases</id>
+      <repositories>
+        <repository>
+          <id>onap-releases</id>
+          <name>onap-releases</name>
+          <url>https://nexus.onap.org/content/repositories/releases/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>onap-releases</id>
+          <name>onap-releases</name>
+          <url>https://nexus.onap.org/content/repositories/releases/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+    <profile>
+      <id>onap-public</id>
+      <repositories>
+        <repository>
+          <id>onap-public</id>
+          <name>onap-public</name>
+          <url>https://nexus.onap.org/content/repositories/public/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>onap-public</id>
+          <name>onap-public</name>
+          <url>https://nexus.onap.org/content/repositories/public/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+    <profile>
+      <id>local-public</id>
+      <repositories>
+        <repository>
+          <id>local-public</id>
+          <name>local-public</name>
+          <url>http://nexus-proxy:8081/nexus/content/repositories/public/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </repository>
+      </repositories>
+      <pluginRepositories>
+        <pluginRepository>
+          <id>local-public</id>
+          <name>local-public</name>
+          <url>http://nexus-proxy:8081/nexus/content/repositories/public/</url>
+          <releases>
+            <enabled>true</enabled>
+          </releases>
+          <snapshots>
+            <enabled>false</enabled>
+          </snapshots>
+        </pluginRepository>
+      </pluginRepositories>
+    </profile>
+  </profiles>
+
+  <activeProfiles>
+    <activeProfile>onap-snapshots</activeProfile>
+    <activeProfile>onap-staging</activeProfile>
+    <activeProfile>onap-releases</activeProfile>
+    <!-- <activeProfile>onap-public</activeProfile> -->
+    <activeProfile>local-public</activeProfile>
+  </activeProfiles>
+
+</settings>