Jenkins配置Python自动化

355 阅读1分钟
  1. 安装Jenkins

版本:Jenkins 2.289.2

2.新建任务

image.png

  1. 丢弃旧的构建

image.png

  1. 配置GIT

image.png

在该界面添加Git拉取代码的账号密码

image.png

  1. 构建触发器

image.png

  1. 构建

image.png

  1. 构建后操作

image.png

构建如果失败,执行代码将失败信息发到飞书群 image.png

import time, hmac, base64, hashlib, datetime, requests, json


def createFeiShuSign():
    secret = 'xxxx'
    timestamp = int(time.time())  # 获取当前时间戳,单位秒
    secretBefore = ('%s\n%s' % (timestamp, secret)).encode('utf-8')  # 将值转换为byte类型
    msg = ""
    msgEncode = msg.encode('utf-8')
    hsha256 = hmac.new(secretBefore, msgEncode, digestmod=hashlib.sha256).digest()  # 用hashlib.sha256进行计算,得出HmacSHA256
    sign = base64.b64encode(hsha256).decode()  # 先Base64,再decode去掉byte类型,得到sign值
    return {"timestamp": timestamp, "sign": sign}


# 获取最近一次构建版本号
last_build_url = "http://192.168.1.1:8888/job/sos_api_test/lastBuild/buildNumber"
build_number_rep = requests.get(url=last_build_url, auth=('Admin', 'xxxxxx'))
build_number = 0
if build_number_rep.status_code == 200:
    build_number = int(build_number_rep.text) - 1
    print(build_number)

build_time = (datetime.datetime.now() - datetime.timedelta(minutes=3)).strftime("%Y-%m-%d %H:%M")  # 3分钟前构建的

# 获取指定构建号的构建状态
if build_number != 0:
    build_status_url = "http://192.168.1.1:8888/job/sos_api_test/{}/api/xml".format(build_number)
    build_allure_url = "http://192.168.1.1:8888/job/sos_api_test/{}/allure/".format(build_number)
    build_result = requests.get(url=build_status_url, auth=('Admin', 'xxxxx'))
    is_before_fail = "<result>FAILURE</result>" in build_result.text

    # 上一次构建失败,发送恢复通知
    if is_before_fail:
        # 接口自动化测试群-机器人地址
        robot_url = 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxx'
        text = '项目在{}执行编号{}构建失败'.format(build_time, build_number)
        href = "{}".format(build_allure_url)
        payload_message = {
            "timestamp": createFeiShuSign().get('timestamp'),
            "sign": createFeiShuSign().get('sign'),  # 获取函数的值,并get到具体值
            "msg_type": "post",
            "content": {
                "post": {
                    "zh_cn": {
                        "title": "【sos_api_test自动化】项目运行有失败用例",
                        "content": [
                            [
                                {
                                    "tag": "text",
                                    "text": text
                                },
                                {
                                    "tag": "a",
                                    "text": ":具体接口报错详情可查看报告",
                                    "href": href
                                },
                            ]
                        ]
                    }
                }
            }

        }

        # 发送群通知
        response = requests.request("POST", robot_url, headers={'Content-Type': 'application/json'}, data=json.dumps(payload_message))