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

131 lines
5.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️⃣ Prepare a unique screen session name
// ---------------------------------------------------------------
stage('Prepare Screen Name') {
steps {
script {
// epoch seconds truncated to the last 6 digits
def epochSec = System.currentTimeMillis() / 1000
env.SCREEN_SESSION = "ble_test_${String.format('%06d', epochSec % 1_000_000)}"
}
}
}
// ---------------------------------------------------------------
// 2️⃣ Verify / install screen (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 screen is missing, install it
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 in a detached screen session
// ---------------------------------------------------------------
stage('Run BLE Test') {
steps {
retry(3) {
timeout(time: 8, unit: 'HOURS') {
sshagent([env.SSH_CREDENTIALS_ID]) {
sh """
ssh -o StrictHostKeyChecking=no \\
-o ServerAliveInterval=60 \\
-o ServerAliveCountMax=120 \\
root@${params.host_ip} <<'EOF'
# 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
"""
}
// Verify that the test finished
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
"""
}
}
}
}