@@ -2,47 +2,83 @@ name: Jenkins CI Regression
22
33on :
44 push :
5- branches : [ main ]
65 pull_request :
76
87jobs :
98 trigger-jenkins :
109 runs-on : ubuntu-latest
10+
1111 steps :
12- - name : Trigger Jenkins Build
12+ - name : Trigger Jenkins Job
1313 id : trigger
1414 run : |
15- echo "Triggering Jenkins job..."
16- RESPONSE=$(curl -s -X POST \
15+ echo "🚀 Triggering Jenkins job..."
16+ # Send trigger and extract the queue URL from the Location header
17+ QUEUE_URL=$(curl -s -X POST -D - \
1718 -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" \
18- "${{ secrets.JENKINS_URL }}/job/${{ secrets.JENKINS_JOB }}/buildWithParameters?token=${{ secrets.JENKINS_TRIGGER }}" -i)
19- echo "$RESPONSE"
19+ "${{ secrets.JENKINS_URL }}/job/${{ secrets.JENKINS_JOB }}/build?token=${{ secrets.JENKINS_TRIGGER }}" \
20+ | grep -i Location | awk '{print $2}' | tr -d '\r\n')
21+
22+ echo "Queue URL: $QUEUE_URL"
23+ echo "queue_url=${QUEUE_URL}" >> $GITHUB_OUTPUT
24+
25+ - name : Wait for Jenkins to Start (Get Build Number)
26+ id : wait_for_start
27+ run : |
28+ echo "⏳ Waiting for Jenkins to assign build number..."
29+ ATTEMPTS=0
30+ BUILD_NUMBER=""
31+ QUEUE_URL="${{ steps.trigger.outputs.queue_url }}api/json"
32+
33+ until [ -n "$BUILD_NUMBER" ] && [ "$BUILD_NUMBER" != "null" ]; do
34+ sleep 10
35+ ATTEMPTS=$((ATTEMPTS + 1))
36+ BUILD_NUMBER=$(curl -s -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" "$QUEUE_URL" | jq -r '.executable.number')
37+ echo "[$ATTEMPTS] Build number: $BUILD_NUMBER"
38+ if [ $ATTEMPTS -gt 30 ]; then
39+ echo "❌ Timed out waiting for Jenkins to start."
40+ exit 1
41+ fi
42+ done
43+
44+ BUILD_URL="${{ secrets.JENKINS_URL }}/job/${{ secrets.JENKINS_JOB }}/${BUILD_NUMBER}/"
45+ echo "✅ Jenkins build started: #$BUILD_NUMBER"
46+ echo "🔗 Jenkins console: ${BUILD_URL}console"
47+ echo "build_number=$BUILD_NUMBER" >> $GITHUB_OUTPUT
48+ echo "build_url=$BUILD_URL" >> $GITHUB_OUTPUT
2049
21- - name : Wait for Jenkins Build to Complete
22- id : wait
50+ - name : Wait for Jenkins Build to Finish
51+ id : wait_for_finish
2352 run : |
24- echo "Polling Jenkins for completion..."
53+ echo "⏳ Polling Jenkins for build completion..."
2554 ATTEMPTS=0
2655 BUILD_STATUS="PENDING"
56+ BUILD_NUMBER="${{ steps.wait_for_start.outputs.build_number }}"
57+ BUILD_URL="${{ steps.wait_for_start.outputs.build_url }}"
58+
2759 until [ "$BUILD_STATUS" = "SUCCESS" ] || [ "$BUILD_STATUS" = "FAILURE" ]; do
2860 sleep 30
29- BUILD_STATUS=$(curl -s -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" \
30- "${{ secrets.JENKINS_URL }}/job/${{ secrets.JENKINS_JOB }}/lastBuild/api/json" \
31- | jq -r '.result')
32- echo "[$ATTEMPTS] Current status: $BUILD_STATUS"
3361 ATTEMPTS=$((ATTEMPTS + 1))
62+ BUILD_STATUS=$(curl -s -u "${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }}" \
63+ "${BUILD_URL}api/json" | jq -r '.result')
64+ echo "[$ATTEMPTS] Jenkins build status: $BUILD_STATUS"
3465 if [ $ATTEMPTS -gt 60 ]; then
35- echo "Timed out after 30 minutes. "
66+ echo "❌ Timed out after 30 minutes waiting for Jenkins build #$BUILD_NUMBER "
3667 exit 1
3768 fi
3869 done
39- echo "Final Jenkins status: $BUILD_STATUS"
40- echo "status=${BUILD_STATUS}" >> $GITHUB_OUTPUT
4170
42- - name : Mark PR Failed if Jenkins Failed
43- if : steps.wait.outputs.status == 'FAILURE'
44- run : exit 1
71+ echo "🏁 Final Jenkins status for build #$BUILD_NUMBER: $BUILD_STATUS"
72+ echo "status=$BUILD_STATUS" >> $GITHUB_OUTPUT
73+
74+ - name : Mark Failed if Jenkins Failed
75+ if : steps.wait_for_finish.outputs.status == 'FAILURE'
76+ run : |
77+ echo "❌ Jenkins build failed."
78+ exit 1
4579
46- - name : Jenkins Build Succeeded
47- if : steps.wait.outputs.status == 'SUCCESS'
48- run : echo "✅ Jenkins Regression Passed Successfully"
80+ - name : Jenkins Build Successful
81+ if : steps.wait_for_finish.outputs.status == 'SUCCESS'
82+ run : |
83+ echo "✅ Jenkins Regression Passed Successfully"
84+ echo "🔗 Build link: ${{ steps.wait_for_start.outputs.build_url }}"
0 commit comments