diff --git a/api/Jenkinsfile.ble_test b/api/Jenkinsfile.ble_test index fabc9ab..e165e0c 100644 --- a/api/Jenkinsfile.ble_test +++ b/api/Jenkinsfile.ble_test @@ -2,7 +2,7 @@ pipeline { agent any // ------------------------------------------------------------------ - // Global environment variables – change as needed + // Global environment variables - change as needed // ------------------------------------------------------------------ environment { DEBIAN_IP = 'debian_machine_ip' @@ -19,14 +19,14 @@ pipeline { string(name: 'BT_USB_ID', defaultValue: '0bda:c821', description: 'USB ID of the BLE dongle') } - // ───────────────────────────────────────────────────────────────────── + // --------------------------------------------------------------------- // Stages - // ───────────────────────────────────────────────────────────────────── + // --------------------------------------------------------------------- stages { - // ───────────────────────────────────────────────────────────────────── - // 1️⃣ Build a unique screen session name - // ───────────────────────────────────────────────────────────────────── + // --------------------------------------------------------------------- + // 1. Build a unique screen session name + // --------------------------------------------------------------------- stage('Prepare Screen Name') { steps { script { @@ -36,98 +36,69 @@ pipeline { // keep only the last 6 digits → guarantees uniqueness env.SCREEN_SESSION = "ble_test_${String.format('%06d', epochSec % 1_000_000)}" + + sh "echo Screen ID - ${env.SCREEN_SESSION}" } } } - // ───────────────────────────────────────────────────────────────────── - // 2️⃣ Ensure screen is installed (runs only once) - // ───────────────────────────────────────────────────────────────────── + // --------------------------------------------------------------------- + // 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 + ssh -o StrictHostKeyChecking=no root@${params.host_ip} -o ServerAliveInterval=60 -o ServerAliveCountMax=120 << EOF + if ! command -v screen > /dev/null; then + echo "screen not found - installing" + apt-get update && apt-get install -y screen + fi """ } } } - // ───────────────────────────────────────────────────────────────────── - // 3️⃣ Run the BLE test inside a detached screen session - // ───────────────────────────────────────────────────────────────────── + // --------------------------------------------------------------------- + // 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 + ssh -o StrictHostKeyChecking=no root@${params.host_ip} -o ServerAliveInterval=60 -o ServerAliveCountMax=120 << EOF + # Start test in detached screen + screen -dmS ${env.SCREEN_SESSION} bash -c ' + 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} + ' + # Give screen a moment to spin up + sleep 2 """ } - - // ------------------------------------------------------------------ - // 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‑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 + ssh -o StrictHostKeyChecking=no root@${params.host_ip} -o ServerAliveInterval=60 -o ServerAliveCountMax=120 << EOF + if screen -list | grep -q ${env.SCREEN_SESSION}; then + screen -S ${env.SCREEN_SESSION} -X quit + fi """ } }