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

134 lines
4.7 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
// ------------------------------------------------------------------
// Global environment variables – change as needed
// ------------------------------------------------------------------
environment {
DEBIAN_IP = 'debian_machine_ip'
SSH_CREDENTIALS_ID = 'jenkins_root_ssh'
REMOTE_SCRIPT = '/opt/ble-test/ble_api/api/ble.py'
}
// ------------------------------------------------------------------
// Build parameters (visible to the user)
// ------------------------------------------------------------------
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
// ------------------------------------------------------------------
stages {
// ---------------------------------------------------------------
// 1️⃣ Generate a unique screen session name
// ---------------------------------------------------------------
stage('Prepare Screen Name') {
steps {
script {
// 1) Get epoch seconds (long)
long epochSec = (System.currentTimeMillis() / 1000L) as long
// 2) Keep only the last 6 digits to avoid collisions
env.SCREEN_SESSION = "ble_test_${String.format('%06d', epochSec % 1_000_000)}"
}
}
}
// ---------------------------------------------------------------
// 2️⃣ Ensure screen is installed (runs only once)
// ---------------------------------------------------------------
stage('Ensure screen is present') {
steps {
sshagent([env.SSH_CREDENTIALS_ID]) {
sh '''\
ssh -o StrictHostKeyChecking=no \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=120 \
root@${params.host_ip} <<'EOF'
if ! command -v screen > /dev/null; then
echo "screen not found – installing"
apt-get update && apt-get install -y screen
fi
EOF
'''
}
}
}
// ---------------------------------------------------------------
// 3️⃣ Run the BLE test inside a detached screen session
// ---------------------------------------------------------------
stage('Run BLE Test') {
steps {
retry(3) { // 3× retry on transient SSH hiccups
timeout(time: 8, unit: 'HOURS') { // 8‑hour hard timeout
sshagent([env.SSH_CREDENTIALS_ID]) {
sh '''\
ssh -o StrictHostKeyChecking=no \
-o ServerAliveInterval=60 \
-o ServerAliveCountMax=120 \
root@${params.host_ip} <<'EOF'
# Start test in detached screen
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
'''
}
// ------------------------------------------------------------------
// 3a. Verify that the test finished successfully
// ------------------------------------------------------------------
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
'''
}
}
}
}
}
// ------------------------------------------------------------------
// Post‑build cleanup – kill the remote screen session
// ------------------------------------------------------------------
post {
always {
sshagent([env.SSH_CREDENTIALS_ID]) {
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
'''
}
}
}
}