返回

如何在 Rundeck 中查找将在未来运行的作业?

python

使用 API 调用查找 Rundeck 中未来作业

问题:

如何使用 API 调用查找将在未来特定时间段内运行的 Rundeck 作业?

解决方案:

1. 调整脚本以获取未来作业

修改脚本以获取当前时间后指定时间范围内的作业:

import requests
from datetime import datetime, timedelta

api_token = 'YOUR_API_TOKEN'
project_name = 'YOUR_PROJECT_NAME'
hours_in_advance = 3  # 可根据需要调整

api_url = "https://infosys:4443/api/19/project/{}/jobs".format(project_name)

headers = {
    "Accept": "application/json",
    "X-Rundeck-Auth-Token": api_token,
    "Content-Type": "application/json"
}

response = requests.get(api_url, headers=headers, verify=False)

if response.status_code == 200:
    scheduled_jobs = response.json()
    current_time = datetime.now()
    future_time = current_time + timedelta(hours=hours_in_advance)
    upcoming_jobs = []
    for job in scheduled_jobs:
        if 'schedule' in job and 'nextRunAt' in job['schedule']:
            next_run_at = datetime.strptime(job['schedule']['nextRunAt'], "%Y-%m-%dT%H:%M:%S%z")
            if current_time <= next_run_at <= future_time:
                upcoming_jobs.append((job['name'], next_run_at))
    if upcoming_jobs:
        print("Upcoming jobs in the next {} hours:".format(hours_in_advance))
        for job_name, next_run_at in upcoming_jobs:
            print("Job Name: {}, Next Scheduled: {}".format(job_name, next_run_at))
    else:
        print("No jobs scheduled in the next {} hours.".format(hours_in_advance))
else:
    print("Error fetching scheduled jobs:", response.text)

2. 配置 ADO 管道

在 ADO 管道中,更新任务以调用修改后的脚本:

- task: Bash@3
  inputs:
    targetType: 'inline'
    script: |
      pip install requests
      pip install --upgrade requests
      pip3 install simplejson
      python devcheck.py

考虑时区

确保 Rundeck 中作业的时区与脚本中的时区匹配。如果作业的时区为 UTC,则脚本也应该使用 UTC 时区。

结论

本指南提供了使用 API 调用查找 Rundeck 中将在未来特定时间段内运行的作业的方法。这种方法可以在 DevOps 管道中自动执行,以帮助监视和管理作业调度。了解时区的重要性也很关键,以确保结果准确无误。

常见问题解答

  1. 如何在 Rundeck 中安排作业?

    • 通过 Rundeck UI 或使用 API 创建或导入调度作业。
  2. 可以指定作业的时区吗?

    • 是的,可以在作业的调度配置中指定时区。
  3. 为什么我的脚本无法检测到未来作业?

    • 检查脚本中时区是否与作业时区匹配。
  4. 我可以在多个项目中搜索作业吗?

    • 此脚本一次只能搜索一个项目。要搜索多个项目,需要修改脚本或创建一个循环来遍历项目。
  5. 我可以通过 API 调用获取作业的详细状态吗?

    • 是的,使用 job/JOB_ID/executions 端点可以获取作业执行的详细信息。