如何实现Jenkins Pipeline阶段在requestState为PENDING时每2分钟重复执行?
Jenkins Pipeline 实现基于requestState的阶段重复执行
需求:当requestState处于PENDING状态时,每隔2分钟重复执行指定任务阶段;当状态非PENDING时,停止重复并执行清理操作。以下是修改后的完整Pipeline脚本:
pipeline { agent { label "$label" } environment { TEMPWORKSPACE = '/data/home/sbeops/tempstats/' } parameters { string(name: 'CORELATIONID', defaultValue: '', description: '关联ID') string(name: 'JARPATH', defaultValue: '', description: 'JAR文件路径') string(name: 'JAR_FILE_NAME', defaultValue: '', description: 'JAR文件名(*.jar)') } stages { stage('循环执行目标任务') { steps { script { def requestState = '' while (true) { // 替换为真实的requestState获取逻辑,比如调用接口、查询数据库或执行特定命令 requestState = sh( script: 'echo PENDING', // 示例模拟,实际替换为真实获取命令 returnStdout: true ).trim() if (requestState != 'PENDING') { echo "当前requestState为${requestState},终止循环执行" break } echo "当前requestState为PENDING,执行目标任务..." // 执行原任务逻辑 sh ''' gcloud config set project ${PROJECT} gcloud compute ssh comm-sbe-mds-1 --zone us-east1-b --internal-ip \\ --command="sudo su - sbeops bash -c ' mkdir -p ${TEMPWORKSPACE} cd ${TEMPWORKSPACE} wget ${JARPATH} if [ $? -ne 0 ]; then exit 1; fi gsutil cp gs://dprep-preppedzone-cat-int-ga/${CORELATIONID}/COMMERCIAL_MARKETING/stats/aggregated-stats.avro . /usr/lib/jvm/jdk-17.0.2/jdk-17/bin/java -jar ${JAR_FILE_NAME} aggregated-stats.avro aggregated-stats.xlsx ${CORELATIONID} if [ $? -ne 0 ]; then exit 1; fi gsutil cp aggregated-stats.xlsx gs://usis-mds-dev-dataflow-npe/${SUPPLIER}/${CORELATIONID}/ mutt -s \\\"统计报告汇总 - ${SUPPLIER} - 关联ID - ${CORELATIONID}\\\" -a aggregated-stats.xlsx -- \\\"$EMAIL\\\" < /dev/null if [ $? -ne 0 ]; then exit 1; fi ' ''' echo "等待2分钟后再次检查状态..." sleep 120 // 等待120秒(2分钟) } } } } stage('清理VM工作目录') { steps { script { sh """ gcloud config set project ${PROJECT} gcloud compute ssh comm-sbe-mds-1 --zone us-east1-b --internal-ip \\ --command="sudo -u sbeops rm -rf ${TEMPWORKSPACE}" """ } } } } }
关键修改说明
- 状态获取逻辑:脚本中用
echo PENDING模拟状态获取,需替换为真实的状态查询方式(如调用REST接口、查询数据库)。 - 循环控制:通过
while(true)构建循环,每次迭代先检查状态,非PENDING则直接跳出循环。 - 间隔等待:任务执行完成后,用
sleep 120实现2分钟的等待间隔,避免频繁执行。 - 清理保障:无论循环因状态变更终止还是任务执行异常,后续的清理阶段都会执行,确保资源被回收。
内容的提问来源于stack exchange,提问作者Manohar.Robot
相关产品推荐
相关产品推荐

