diff --git a/.ci/Jenkinsfile-hardware b/.ci/Jenkinsfile-hardware
index 237f9547ee127a8ab741856430206ee51256e515..1f2c2cc03dac6f35e8dbb50f8062515902f1afbe 100644
--- a/.ci/Jenkinsfile-hardware
+++ b/.ci/Jenkinsfile-hardware
@@ -1,3 +1,5 @@
+#!/usr/bin/env groovy
+
 pipeline {
   agent none
   stages {
@@ -6,6 +8,30 @@ pipeline {
 
       parallel {
 
+        stage('px4_fmu-v3_default') {
+          agent {
+            docker {
+              image 'px4io/px4-dev-nuttx:2019-02-09'
+              args '-e CCACHE_BASEDIR=$WORKSPACE -v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+            }
+          }
+          steps {
+            sh 'export'
+            sh 'make distclean'
+            sh 'ccache -z'
+            sh 'git fetch --tags'
+            sh 'make px4_fmu-v3_default'
+            sh 'make sizes'
+            sh 'ccache -s'
+            stash includes: 'build/px4_fmu-v3_default/px4_fmu-v3_default.elf', name: 'px4_fmu-v3_default'
+          }
+          post {
+            always {
+                sh 'make distclean'
+            }
+          }
+        }
+
         stage('px4_fmu-v4_default') {
           agent {
             docker {
@@ -22,7 +48,30 @@ pipeline {
             sh 'make sizes'
             sh 'ccache -s'
             stash includes: 'build/px4_fmu-v4_default/px4_fmu-v4_default.elf', name: 'px4_fmu-v4_default'
-            stash includes: 'Tools/HIL/monitor_firmware_upload.py, Tools/HIL/run_tests.py', name: 'scripts-px4_fmu-v4_default'
+          }
+          post {
+            always {
+                sh 'make distclean'
+            }
+          }
+        }
+
+        stage('px4_fmu-v4pro_default') {
+          agent {
+            docker {
+              image 'px4io/px4-dev-nuttx:2019-02-09'
+              args '-e CCACHE_BASEDIR=$WORKSPACE -v ${CCACHE_DIR}:${CCACHE_DIR}:rw'
+            }
+          }
+          steps {
+            sh 'export'
+            sh 'make distclean'
+            sh 'ccache -z'
+            sh 'git fetch --tags'
+            sh 'make px4_fmu-v4pro_default'
+            sh 'make sizes'
+            sh 'ccache -s'
+            stash includes: 'build/px4_fmu-v4pro_default/px4_fmu-v4pro_default.elf', name: 'px4_fmu-v4pro_default'
           }
           post {
             always {
@@ -38,6 +87,74 @@ pipeline {
 
       parallel {
 
+        stage('px4fmu-v3_default') {
+          agent {
+            label 'px4_fmu-v3'
+          }
+          steps {
+            script {
+              try {
+                sh 'export'
+                sh 'find /dev/serial'
+                unstash 'px4_fmu-v3_default'
+                sh '''gdb-multiarch -nx --batch \
+                      -ex "target remote localhost:2331" \
+                      -ex "monitor reset 0" \
+                      -ex "load" \
+                      -ex "compare-sections" \
+                      -ex "monitor reset 0" \
+                      -ex "monitor sleep 1000" \
+                      -ex "monitor go" \
+                      -ex "kill" \
+                      build/px4_fmu-v3_default/px4_fmu-v3_default.elf
+                '''
+                sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
+                sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
+              } catch (Exception err) {
+                  // always report passed for now
+                  currentBuild.result = 'SUCCESS'
+              }
+            } // script
+          }
+          options {
+            timeout(time: 600, unit: 'SECONDS')
+          }
+        }
+
+        stage('px4fmu-v3_default (pixhack-v3)') {
+          agent {
+            label 'pixhack-v3'
+          }
+          steps {
+            script {
+              try {
+                sh 'export'
+                sh 'find /dev/serial'
+                unstash 'px4_fmu-v3_default'
+                sh '''gdb-multiarch -nx --batch \
+                      -ex "target remote localhost:2331" \
+                      -ex "monitor reset 0" \
+                      -ex "load" \
+                      -ex "compare-sections" \
+                      -ex "monitor reset 0" \
+                      -ex "monitor sleep 1000" \
+                      -ex "monitor go" \
+                      -ex "kill" \
+                      build/px4_fmu-v3_default/px4_fmu-v3_default.elf
+                '''
+                sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
+                sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
+              } catch (Exception err) {
+                  // always report passed for now
+                  currentBuild.result = 'SUCCESS'
+              }
+            } // script
+          }
+          options {
+            timeout(time: 600, unit: 'SECONDS')
+          }
+        }
+
         stage('px4fmu-v4_default') {
           agent {
             label 'px4_fmu-v4'
@@ -47,7 +164,6 @@ pipeline {
               try {
                 sh 'export'
                 sh 'find /dev/serial'
-                unstash 'scripts-px4_fmu-v4_default'
                 unstash 'px4_fmu-v4_default'
                 sh ''' gdb-multiarch -nx --batch \
                       -ex "target remote localhost:2331" \
@@ -73,6 +189,40 @@ pipeline {
           }
         }
 
+        stage('px4fmu-v4pro_default') {
+          agent {
+            label 'px4_fmu-v4pro'
+          }
+          steps {
+            script {
+              try {
+                sh 'export'
+                sh 'find /dev/serial'
+                unstash 'px4_fmu-v4pro_default'
+                sh '''gdb-multiarch -nx --batch \
+                      -ex "target remote localhost:2331" \
+                      -ex "monitor reset 0" \
+                      -ex "load" \
+                      -ex "compare-sections" \
+                      -ex "monitor reset 0" \
+                      -ex "monitor sleep 1000" \
+                      -ex "monitor go" \
+                      -ex "kill" \
+                      build/px4_fmu-v4pro_default/px4_fmu-v4pro_default.elf
+                '''
+                sh './Tools/HIL/monitor_firmware_upload.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*` --baudrate 57600'
+                sh './Tools/HIL/run_tests.py --device `find /dev/serial -name *usb-FTDI_TTL232R-3V3_*`'
+              } catch (Exception err) {
+                  // always report passed for now
+                  currentBuild.result = 'SUCCESS'
+              }
+            } // script
+          }
+          options {
+            timeout(time: 600, unit: 'SECONDS')
+          }
+        }
+
       } // parallel
     } // stage Flash