feat(DingTalkBot.py): 新增钉钉机器人调度脚本
This commit is contained in:
commit
bfa43135dd
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.history/
|
||||||
103
python/DingTalkBot.py
Normal file
103
python/DingTalkBot.py
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
import time
|
||||||
|
import hmac
|
||||||
|
import hashlib
|
||||||
|
import base64
|
||||||
|
import urllib.parse
|
||||||
|
import requests
|
||||||
|
import json
|
||||||
|
import git
|
||||||
|
import pathlib
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
from configparser import ConfigParser
|
||||||
|
|
||||||
|
|
||||||
|
def generate_url(secret, webhook):
|
||||||
|
timestamp = str(round(time.time() * 1000))
|
||||||
|
secret_enc = secret.encode("utf-8")
|
||||||
|
string_to_sign = "{}\n{}".format(timestamp, secret)
|
||||||
|
string_to_sign_enc = string_to_sign.encode("utf-8")
|
||||||
|
hmac_code = hmac.new(
|
||||||
|
secret_enc, string_to_sign_enc, digestmod=hashlib.sha256
|
||||||
|
).digest()
|
||||||
|
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
|
||||||
|
return webhook + "×tamp=" + timestamp + "&sign=" + sign
|
||||||
|
|
||||||
|
def get_last_commit_info(repoPath):
|
||||||
|
commitInfo = dict()
|
||||||
|
repo = git.Repo(repoPath)
|
||||||
|
commitInfo['id'] = repo.commit().hexsha
|
||||||
|
commitInfo['author'] = repo.commit().author.name
|
||||||
|
commitInfo['email'] = repo.commit().author.email
|
||||||
|
commitInfo['time'] = repo.commit().authored_datetime.strftime("%Y-%m-%d %H:%M:%S")
|
||||||
|
commitInfo['message'] = repo.commit().message.strip()
|
||||||
|
return commitInfo
|
||||||
|
|
||||||
|
def push_message(url, projectName, commitInfo):
|
||||||
|
|
||||||
|
header = {"Content-Type": "application/json;charset=UTF-8"}
|
||||||
|
data = {
|
||||||
|
"msgtype": "markdown",
|
||||||
|
"markdown": {
|
||||||
|
"title": "仓库变更通知",
|
||||||
|
"text": "**项目名称**: %s \n\n" % projectName
|
||||||
|
+ "**提交Id**: %s \n\n" % commitInfo['id']
|
||||||
|
+ "**提交人**: %s \\<%s\\> \n\n" % (commitInfo['author'], commitInfo['email'])
|
||||||
|
+ "**提交时间**: %s \n\n" % commitInfo['time']
|
||||||
|
+ "**提交信息**: %s \n\n" % commitInfo['message'],
|
||||||
|
},
|
||||||
|
"at": {"atMobiles": ["18368802918"], "isAtAll": False},
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.post(url=url, headers=header, data=json.dumps(data))
|
||||||
|
print(response.text)
|
||||||
|
|
||||||
|
def get_ini_config(botConfigPath, projectName):
|
||||||
|
config = ConfigParser()
|
||||||
|
if not (pathlib.Path(botConfigPath).exists()):
|
||||||
|
print("配置文件不存在!")
|
||||||
|
sys.exit(2)
|
||||||
|
config.read(botConfigPath, encoding="UTF-8")
|
||||||
|
return config[projectName]
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
repoPath = ""
|
||||||
|
projectName = ""
|
||||||
|
botConfigPath = ""
|
||||||
|
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(argv, "hp:n:c:", ["help", "path=", "name=", "config="])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
print("Error: DingTalkBot.py -p <repoPath> -n <projectName> -c <botConfigPath>")
|
||||||
|
print(" or: DingTalkBot.py --path=<repoPath> --name=<projectName> --config=<botConfigPath>")
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
for opt, arg in opts:
|
||||||
|
if opt in ("-h", "--help"):
|
||||||
|
print("DingTalkBot.py -p <repoPath> -n <projectName> -c <botConfigPath>")
|
||||||
|
print("or: DingTalkBot.py --path=<repoPath> --name=<projectName> --config=<botConfigPath>")
|
||||||
|
sys.exit()
|
||||||
|
elif opt in ("-p", "--path"):
|
||||||
|
repoPath = arg
|
||||||
|
elif opt in ("-n", "--name"):
|
||||||
|
projectName = arg
|
||||||
|
elif opt in ("-c", "--config"):
|
||||||
|
botConfigPath = arg
|
||||||
|
|
||||||
|
if len(repoPath) == 0:
|
||||||
|
repoPath = pathlib.Path.cwd()
|
||||||
|
if len(projectName) == 0:
|
||||||
|
projectName = "default"
|
||||||
|
if len(botConfigPath) == 0:
|
||||||
|
botConfigPath = pathlib.Path(repoPath)
|
||||||
|
botConfigFilePath = pathlib.Path(botConfigPath).joinpath("DingTalkBot.ini")
|
||||||
|
print("项目路径:%s\n" %repoPath)
|
||||||
|
print("项目名称:%s\n" %projectName)
|
||||||
|
print("机器人配置文件路径:%s\n" %botConfigFilePath)
|
||||||
|
configInfo = get_ini_config(botConfigFilePath, projectName)
|
||||||
|
url = generate_url(configInfo['secret'], configInfo['webhook'])
|
||||||
|
commitInfo = get_last_commit_info(repoPath)
|
||||||
|
push_message(url, projectName, commitInfo)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv[1:])
|
||||||
7
sh/system-init.sh
Normal file
7
sh/system-init.sh
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
echo "欢迎使用系统初始化脚本,当前系统检测为:"
|
||||||
|
uname -a
|
||||||
|
|
||||||
|
echo "该脚本将进行系统初始化,安装一些常用开发环境依赖。具体见下:"
|
||||||
|
echo "git neovim zsh oh-my-zsh java maven mysql node redis docker"
|
||||||
|
|
||||||
|
install_git()
|
||||||
Loading…
x
Reference in New Issue
Block a user