如何配置Forge scheduledTrigger实现每周自动发送Jira工作日志?
配置Forge定时触发器(scheduledTrigger)实现每周一自动推送Jira工作日志
1. 前置检查
- 确认你的Forge应用已在
manifest.yml中声明必要权限,包括Jira数据读取权限和外部请求权限 - 复用你已有的Jira工作日志获取逻辑,无需重新开发数据查询部分
2. 修改manifest.yml添加定时触发器配置
在应用根目录的manifest.yml中,新增scheduledTrigger模块,绑定处理函数并设置每周执行的Cron规则:
modules: # 新增定时触发器配置 scheduledTrigger: - key: weekly-timesheet-sync function: sync-timesheet-to-server # Cron表达式:UTC时间每周一9点执行(若需北京时间,需换算为UTC周一1点,即修改为0 0 1 ? * MON *) schedule: "0 0 9 ? * MON *" description: "每周一自动拉取Jira工作日志并推送到Node.js服务器" # 你的现有函数模块 function: - key: sync-timesheet-to-server handler: index.run permissions: scopes: - read:jira-work # 读取Jira工作日志必需权限 external: fetch: backend: - 'https://你的Node.js服务器域名或IP' # 允许Forge向你的服务器发起请求
3. 编写定时任务处理函数
在src/index.js中实现定时触发的核心逻辑,复用已有数据获取代码,新增推送至Node.js服务器的逻辑:
import api from '@forge/api'; import fetch from '@forge/fetch'; export async function run() { try { // 1. 复用你已有的Jira工作日志获取逻辑 const timesheetData = await fetchJiraTimesheets(); // 2. 推送数据到Node.js服务器 const pushResponse = await fetch('https://你的Node.js服务器地址/api/receive-timesheet', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Auth-Token': '你的服务器鉴权密钥' // 若服务器需要鉴权,添加对应头部 }, body: JSON.stringify(timesheetData) }); if (!pushResponse.ok) { throw new Error(`推送失败:${pushResponse.status} ${pushResponse.statusText}`); } console.log('工作日志已成功推送至服务器'); return { success: true }; } catch (error) { console.error('定时任务执行异常:', error); throw error; } } // 复用你已有的Jira工作日志查询函数 async function fetchJiraTimesheets() { // 示例:调用Jira Worklog API获取数据,可根据你的需求调整参数 const response = await api.asUser().requestJira('/rest/api/3/worklog/search', { method: 'GET', params: { startAt: 0, maxResults: 100, // 动态计算上周时间范围,替换为你需要的时间逻辑 updatedAfter: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString() } }); return await response.json(); }
4. 部署与验证
- 执行
forge deploy部署更新后的应用 - 执行
forge trigger create weekly-timesheet-sync创建并启用触发器(也可在Forge控制台手动启用) - 测试阶段可临时修改Cron表达式为
0 */5 * ? * * *(每5分钟执行一次),验证数据是否正常推送,测试完成后改回每周一的规则 - 通过
forge logs查看定时任务的执行日志,排查可能出现的错误
关键注意事项
- 时区换算:Forge定时任务默认使用UTC时区,需将你的目标本地时间转换为UTC时间后配置Cron表达式
- 外部请求权限:必须在
manifest.yml的external.fetch.backend中添加你的服务器地址,否则Forge应用无法发起跨域请求 - 错误处理:务必添加日志输出和异常捕获,便于排查定时任务执行失败的问题
内容的提问来源于stack exchange,提问作者Sarra Mehrez
相关产品推荐
相关产品推荐

