求可定时检查Jira状态、审批通过后执行terraform apply的Python脚本
实现思路
- 按固定间隔调用Jira REST API拉取指定工单的状态
- 检测到状态变为已审批时终止轮询,执行terraform apply命令
- 内置基础异常捕获逻辑,避免网络波动、接口报错导致脚本直接退出
前置依赖
执行脚本前需要先安装requests依赖库:pip install requests
完整实现代码
import time import requests import subprocess # -------------------------- 配置项 请根据实际场景修改 -------------------------- JIRA_SERVER = "https://server-url" # 你的Jira服务地址 JIRA_ISSUE_ID = "JRA-1" # 需要监控的工单号 JIRA_USER = "username" # Jira登录账号 JIRA_PWD = "password" # Jira登录密码/API Token(SSO登录需用API Token) APPROVED_STATUS_NAME = "已审批" # Jira里配置的审批通过状态名称,需完全匹配 CHECK_INTERVAL = 60 # 轮询间隔,单位秒,默认1分钟 AFTER_APPROVE_CMD = "terraform apply" # 审批通过后要执行的命令 # ----------------------------------------------------------------------------- def query_jira_status(): api_url = f"{JIRA_SERVER}/rest/api/2/issue/{JIRA_ISSUE_ID}?fields=status" headers = {"Content-Type": "application/json"} try: response = requests.get( url=api_url, auth=(JIRA_USER, JIRA_PWD), headers=headers, timeout=15 ) response.raise_for_status() return response.json()["fields"]["status"]["name"].strip() except Exception as err: print(f"Jira查询失败,错误:{str(err)},等待下次重试") return None if __name__ == "__main__": print(f"开始监控工单 {JIRA_ISSUE_ID} 状态,轮询间隔{CHECK_INTERVAL}秒") while True: current_status = query_jira_status() if current_status == APPROVED_STATUS_NAME: print("检测到工单已审批,开始执行后续命令") subprocess.run(AFTER_APPROVE_CMD, shell=True, check=True) break if current_status: print(f"当前工单状态:{current_status},继续等待审批") time.sleep(CHECK_INTERVAL)
使用注意事项
- 请确认
APPROVED_STATUS_NAME的值和Jira后台配置的审批通过状态完全一致,大小写、特殊符号、空格都不能有差异 - 如果需要terraform自动确认执行,可将
AFTER_APPROVE_CMD修改为terraform apply -auto-approve - Jira如果开启了二次校验或SSO登录,不要填账号密码,需替换为Jira个人设置里生成的API Token
内容的提问来源于stack exchange,提问作者prakasun
相关产品推荐
相关产品推荐

