gitlab 获取到期后,提醒通知

📅 2026/7/24 21:12:43
gitlab 获取到期后,提醒通知
python3 sendGitlabExpUserNotice.py soon_to_expire.txt脚本步骤1.获取到期用户信息soon_to_expire.txtpython3 getGitlabExpireActiveUserMsg.py2.执行提醒通知 (到期前15天可配置时间限制time.sleep(1)sendGitlabExpUserNotice.py#!/usr/bin/python3 #coding:utf-8 import sys import os import json import time import datetime import subprocess # 日志配置 logday time.strftime(%Y-%m-%d, time.localtime()) logfile qywx_api_ logday .log def umi_log_file(filename, msg): log_time str(datetime.datetime.now()) with open(filename, a) as f: f.write(log_time msg \n) # 企业微信消息发送 def umi_send_msg_by_qywx(user_info): msg_content f【GitLab权限到期提醒】 项目名称{user_info[project_name]} 项目地址{user_info[project_url]} 用户姓名{user_info[name]} 到期时间{user_info[expire_time]} 请及时处理权限续期事宜 umi_log_file(logfile, f准备发送消息给 {user_info[name]}) cmd_url https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyX cmd_head Content-Type:application/json params { msgtype: text, text: { content: msg_content, mentioned_mobile_list: [all] } } params_json json.dumps(params, ensure_asciiFalse) cmd fcurl -s -X POST {cmd_url} -H \{cmd_head}\ -d {params_json} result subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue) if result.returncode 0: json_data json.loads(result.stdout) print(f消息发送给 {user_info[name]} 结果: {json_data[errmsg]}) umi_log_file(logfile, f发送结果: {json_data[errmsg]}) else: print(f命令执行失败{result.stderr}) umi_log_file(logfile, f命令执行失败{result.stderr}) # 解析文件内容 def parse_user_data(file_path): users [] current_user {} try: with open(file_path, r, encodingutf-8) as f: for line in f: line line.strip() if not line: if current_user: users.append(current_user) current_user {} continue if : in line: key, value line.split(:, 1) key key.strip() value value.strip() if key 项目名称: current_user[project_name] value elif key 项目地址: current_user[project_url] value elif key 用户名: current_user[username] value elif key 姓名: current_user[name] value elif key 到期时间: current_user[expire_time] value # 添加最后一个用户 if current_user: users.append(current_user) except FileNotFoundError: print(f错误文件 {file_path} 不存在) umi_log_file(logfile, f文件 {file_path} 不存在) sys.exit(1) except Exception as e: print(f解析文件时出错: {str(e)}) umi_log_file(logfile, f解析文件时出错: {str(e)}) sys.exit(1) return users # 主逻辑 if __name__ __main__: if len(sys.argv) ! 2: print(用法: python script.py 数据文件路径) sys.exit(1) data_file sys.argv[1] users parse_user_data(data_file) today datetime.datetime.now().date() for user in users: try: expire_date datetime.datetime.strptime(user[expire_time], %Y-%m-%d).date() days_left (expire_date - today).days if 0 days_left 15: print(f发送到期提醒给 {user[name]}剩余{days_left}天) umi_send_msg_by_qywx(user) else: print(f{user[name]} 的权限还有{days_left}天到期暂不提醒) except ValueError as e: print(f日期格式错误: {user[expire_time]} - {str(e)}) umi_log_file(logfile, f日期格式错误: {user[expire_time]} - {str(e)}) except KeyError as e: print(f用户数据缺少必要字段: {str(e)}) umi_log_file(logfile, f用户数据缺少必要字段: {str(e)})