Files
ble_api/api/Jenkinsfile.ble_test
T
2026-10-17 23:36:47 -07:00

100 lines
4.4 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
pipeline {
agent any
environment {
DEBIAN_IP = 'debian_machine_ip'
SSH_CREDENTIALS_ID = 'jenkins_root_ssh'
REMOTE_SCRIPT = '/opt/ble-test/ble_api/api/ble.py'
}
parameters {
string(name: 'host_ip', defaultValue: '172.20.20.51', description: 'IP of the host that runs the BLE test')
string(name: 'test_count', defaultValue: '25', description: 'Number of test iterations')
string(name: 'BT_USB_ID', defaultValue: '0bda:c821', description: 'USB ID of the BLE dongle')
}
stages {
stage('Run BLE Test') {
steps {
// ----- 1. Compute a 6‑digit hash from the epoch seconds
script {
// epoch seconds at the moment the build starts
def epochSec = System.currentTimeMillis() / 1000
// keep only the last 6 decimal digits
def hash = String.format("%06d", epochSec % 1_000_000)
env.SCREEN_SESSION = "ble_test_${hash}"
}
// ----- 2. Retry SSH 3× in case of a transient hiccup
retry(3) {
// ----- 3. Timeout the whole test (adjust as needed)
timeout(time: 5, unit: 'MINUTES') {
sshagent([env.SSH_CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
# Ensure screen is present
if ! command -v screen > /dev/null; then
echo "screen not found - installing"
apt-get update && apt-get install -y screen
fi
# Start the test in a detached screen session
screen -dmS ${env.SCREEN_SESSION} bash -c '
echo "===== BLE test starting: \$(date)" > /tmp/ble_test.log
usbreset ${params.BT_USB_ID}
sleep 5
cd /opt/ble-test/ble_api
git pull
cd /opt/ble-test/ble_api/api
python3 -u ${REMOTE_SCRIPT} ${params.test_count} 2>&1 | tee -a /tmp/ble_test.log
echo "===== BLE test finished: \$(date)" >> /tmp/ble_test.log
'
# Give screen a moment to spin up
sleep 2
EOF
"""
}
// Small pause so the screen session has a chance to start
sh 'sleep 2'
// Verify that the test reported completion
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
if grep -q "BLE test finished" /tmp/ble_test.log; then
echo "Test completed successfully."
else
echo "Test did NOT finish - aborting build."
exit 1
fi
EOF
"""
} // end timeout
} // end retry
} // end steps
} // end stage
} // end stages
// ----- 4. Clean up the screen session on the remote host
post {
always {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
if screen -list | grep -q ${env.SCREEN_SESSION}; then
screen -S ${env.SCREEN_SESSION} -X quit
fi
EOF
"""
}
}
}