diff --git a/contrib/ci/Jenkinsfile b/contrib/ci/Jenkinsfile
index 0deb5fcdb31c90e376b0eef9504da8819a0bb571..e4c3b4441959a195505975bbf0a7733e65eed2ca 100644
--- a/contrib/ci/Jenkinsfile
+++ b/contrib/ci/Jenkinsfile
@@ -37,7 +37,9 @@ pipeline {
 				sh label: 'Identify runner', script: 'echo $SLAVE_NAME'
 				sh 'make update'
 				sh 'test -d /dl_cache && ln -s /dl_cache openwrt/dl || true'
-				sh 'make -j$(nproc) V=s'
+				timeout(time: 2, unit: "HOURS") {
+					sh 'make -j$(nproc) V=s'
+				}
 				stash includes: '**/output/images/factory/*-x86-64.img.gz', name: 'gluon-x86-64-factory'
 			}
 		}
@@ -53,7 +55,9 @@ pipeline {
 				sh label: 'Print python environment', script: 'python3 -m pip freeze'
 				script {
 					for (f in findFiles(glob: 'tests/*.py')) {
-						sh label: "Test ${f.name}", script: "python3 tests/${f.name} --use-tmp-workdir"
+						timeout(time: 10, unit: "MINUTES") {
+							sh label: "Test ${f.name}", script: "python3 tests/${f.name} --use-tmp-workdir"
+						}
 					}
 				}
 			}