Jenkins 定时触发策略

每天晚上 11 点执行一次,可以按照以下步骤进行。

python 复制代码
复制代码
import jenkins
import datetime
import base64

USERNAME = b'UFNXssaaX0NU\n'
PASSWORD = b'UFNXXssdds0Nd'

class JenkinsMonitor:
    def __init__(self, jobs_to_monitor):
        self.jenkins_url = "http://pe-ddddf.ddssfgfd.com:00011"
        self.username = base64.decodebytes(USERNAME).decode()
        self.password = base64.decodebytes(PASSWORD).decode()
        self.server = jenkins.Jenkins(self.jenkins_url, username=self.username, password=self.password)
        self.jobs_to_monitor = jobs_to_monitor
        self.job_status_dict = {}

    def monitor_jobs(self):
        # 获取当天的日期
        today_date = datetime.datetime.now().date()

        # 检查每个 Job 是否在当天触发并成功
        for ci_job, ct_job in self.jobs_to_monitor.items():
            job_info = self.server.get_job_info(ci_job)
            ct_job_info = self.server.get_job_info(ct_job)

            if ct_job_info.get('disabled'):
                print(f"Job {ct_job} 已经被禁用,跳过执行冒烟!!!")
                self.job_status_dict[ct_job] = False
                continue
            
            last_build_number = job_info['lastCompletedBuild']['number']
            last_build_info = self.server.get_build_info(ci_job, last_build_number)

            # 获取最后一次构建的时间和状态
            build_timestamp = datetime.datetime.fromtimestamp(last_build_info['timestamp'] / 1000).date()
            build_result = last_build_info['result']

            # 如果是今天的构建并且成功
            if build_timestamp == today_date and build_result == 'SUCCESS':
                self.job_status_dict[ct_job] = True
            else:
                self.job_status_dict[ct_job] = False

    def trigger_ct_jobs(self):
        # 触发已成功完成 CI 的 Job 的 CT 任务
        for job_name, status in self.job_status_dict.items():
            if status:
                print(f"触发CT任务: {job_name}")
                self.server.build_job(job_name, {"delay": "0sec"})

    def run(self):
        self.monitor_jobs()
        self.trigger_ct_jobs()

if __name__ == "__main__":
    jobs_to_monitor = {
        "TMwssa8.1.1/CI_CA_3sdfdsfdssds_1_Merge_Trigger": "TMwssa8.1.1/SMOKE_CA_3sdfdsfdssds_1",
    }  # 替换为你的Job名称
    
    monitor = JenkinsMonitor(jobs_to_monitor)
    print("Jenkins Job Monitor running ...")
    monitor.run()
  1. 创建 .bat 文件
    创建一个 .bat 文件,例如 run_jenkins_monitor.bat,并在其中编写以下内容:
batch 复制代码
@echo off
REM 记录当前时间
echo Starting Jenkins Monitor at %time% on %date%

REM 切换到 Python 脚本所在的目录
cd /d "C:\path\to\your\script"

REM 启动 Python 脚本
python "C:\path\to\your\script\monitor_script.py"

REM 记录脚本完成的时间
echo Jenkins Monitor finished at %time% on %date%
确保将 "C:\path\to\your\script" 替换为实际的 Python 脚本路径。
  1. 设置任务计划在晚上 11 点运行
    使用 Windows 任务计划程序每天晚上 11 点执行 .bat 文件。

打开任务计划程序:按 Win + S,搜索"任务计划程序",并打开它。

创建基本任务:

在右侧点击"创建基本任务"。

给任务命名,例如 JenkinsMonitorTask,然后点击"下一步"。

设置触发器:

选择"每日",然后点击"下一步"。

设置任务开始的日期和时间,确保时间为 23:00,然后点击"下一步"。

设置操作:

选择"启动程序",然后点击"下一步"。

在"程序/脚本"字段中,选择你创建的 .bat 文件的路径。

点击"下一步",然后点击"完成"以创建任务。

  1. 测试任务计划

您可以在任务计划程序中手动运行任务,确保它按预期在指定时间执行 Python 脚本。如果设置正确,任务计划程序将每天晚上 11 点自动运行 .bat 文件,从而触发 Python 脚本。

相关推荐
Y001112364 小时前
JavaWeb-end
java·servlet·web
万少5 小时前
Vibe Coding不停歇,移动端 TRAE SOLO 让你用手机也能编程啦
前端·javascript·后端
kyriewen115 小时前
WebAssembly:前端界的“外挂”,让C++代码在浏览器里跑起来
开发语言·前端·javascript·c++·单元测试·ecmascript
烛衔溟6 小时前
TypeScript 接口的基本使用 —— 定义对象形状
前端·javascript·typescript
铁皮饭盒6 小时前
成为AI全栈 - 第3课:路由 RESTful Elysia 状态码 设计规范
前端·后端·全栈
顾昂_7 小时前
Web 性能优化完全指南
前端·面试·性能优化
前端程序媛-Tian7 小时前
前端 AI 提效实战:从 0 到 1 打造团队专属 AI 代码评审工具
前端·人工智能·ai
支付宝体验科技7 小时前
Ant Design Pro v6.0.0 发布
前端
T畅N8 小时前
审批流设计器(前端)
前端·elementui·vue·html·流程图·js
AlunYegeer8 小时前
JAVA,以后端的视角理解前端。在全栈的路上迈出第一步。
java·开发语言·前端