Jenkins构建结果自定义内容推送企业微信

这篇具有很好参考价值的文章主要介绍了Jenkins构建结果自定义内容推送企业微信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境:gitlab、jenkins(2.400,windows环境下)、企业微信

功能:推送构建人、构建时长、构建结果、git提交信息到企业微信并@相应提交人

一、企业微信添加群聊机器人

Jenkins构建结果自定义内容推送企业微信

在弹出的页面添加一个新的机器人,创建完成后会有一个webhook地址,复制该地址,如下图

Jenkins构建结果自定义内容推送企业微信

二、编写python脚本

安装emoji模块,pip install emoji

以下脚本中需要替换自己的jenkins的url,d

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
    jenkins构建结果发送企业微信
    @Time 2023/4/12 12:10
    @File JenkinsWeComNotice.py
"""
import random
import sys
import requests
import json
import emoji

# 这个字典存放gitlab上用户名称name(注意不是用户名username)和企业微信userId,username作为key,userId作为value,一般企业微信的userId为工号,问管理员就行
gitlab_wecom = {}

# 这个字典存放jenkins上用户名称name(注意不是用户名username)和企业微信userId,username作为key,userId作为value,一般企业微信的userId为工号,问管理员就行
jenkins_wecom = {}


def TimeConverter(ms):
    if ms <= 60000:
        return str(round(ms / 1000)) + '秒'
    else:
        return str(ms // 1000 // 60) + '分' + str(round(ms // 1000 % 60)) + '秒'

def request_url(project_name):
    # 获取jenkins构建结果,job_url改为自己的即可
    job_url = "http://xxx.xxx.xxx.xxx:8080/job/"
    jenkins_url = job_url + project_name + "/lastBuild/api/json"
    # 管理员登录账号和密码,改为自己的即可
    auth = ("username", "password")
    jenkins_response = requests.get(url=jenkins_url, auth=auth)
    jenkins_data = json.loads(jenkins_response.text)

    job_name = project_name
    # print("任务名称:", job_name)

    build_id = jenkins_data['number']
    # print("构建序号:", build_id)

    build_result = jenkins_data['result']
    emoji_lst = {'success': [':winking_face:', ':beaming_face_with_smiling_eyes:', ':smiling_face:', ':victory_hand:',
                             ':OK_hand:', ':thumbs_up:', ':smiling_face_with_sunglasses:', ':nerd_face:'],
                 'failure': [':loudly_crying_face:', ':weary_face:', ':downcast_face_with_sweat:', ':thinking_face:',
                             ':neutral_face:', ':frowning_face:', ':slightly_frowning_face:', ':pleading_face:',
                             ':face_with_steam_from_nose:'],
                 'other': [':confounded_face:', ':pensive_face:', ':confused_face:', ':unamused_face:']}
    success_emoji = emoji.emojize(random.choice(emoji_lst['success']))
    failure_emoji = emoji.emojize(random.choice(emoji_lst['failure']))
    other_emoji = emoji.emojize(random.choice(emoji_lst['other']))

    if build_result == 'SUCCESS':
        result = {'成功': ['info', success_emoji]}
    elif build_result == 'ABORTED':
        result = {'被中断': ['warning', other_emoji]}
    else:
        result = {'失败': ['warning', failure_emoji]}
    # print("构建结果:", result)

    # 获取提交人
    commit_author = jenkins_data['actions'][0]['causes'][0]['shortDescription']
    # print("提交人:", commit_author)

    # 获取git提交更改记录
    if jenkins_data['changeSet']['items']:
        git_commit_message = jenkins_data['changeSet']['items'][0]['msg']
    else:
        git_commit_message = 'No changes'
    # print("提交信息:", git_commit_message)

    # 获取执行时长,这里是预估时长,实际时长是duration
    duration = jenkins_data['estimatedDuration']
    execution_duration = TimeConverter(duration)
    # print("执行时间:", execution_duration)

    console_url = job_url + job_name + '/' + str(build_id) + '/console'
    # print("控制台url:", console_url)

    user = ''
    if 'GitLab' in commit_author:
        key = commit_author.split(' ')[-1]
        if key in gitlab_wecom.keys():
            user = gitlab_wecom[key]
    else:
        key = jenkins_data['actions'][0]['causes'][0]['userName']
        if key in jenkins_wecom.keys():
            user = jenkins_wecom[key]

    return job_name, build_id, result, commit_author, git_commit_message, execution_duration, console_url, user


def post_wecom(project_name):
    # 发送到企业微信
    job_name = request_url(project_name)[0]
    build_id = request_url(project_name)[1]
    result = next(iter(request_url(project_name)[2]))
    result_color = request_url(project_name)[2][result][0]
    result_emoji = request_url(project_name)[2][result][1]
    commit_author = request_url(project_name)[3]
    git_commit_message = request_url(project_name)[4]
    duration = request_url(project_name)[5]
    console_url = request_url(project_name)[6]
    user_id = request_url(project_name)[7]
    # 上面创建的机器人的webhook地址,改为自己的即可
    wechat_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx"
    wechat_data = {
        "markdown": {
            "content": f"<font color=\"info\">【{job_name}】</font>构建<font color=\"{result_color}\">{result}~</font>{result_emoji}\n "
                       f">构建用时:<font color=\"comment\">{duration}</font>\n "
                       f">构建序号:<font color=\"comment\">{build_id}</font>\n"
                       f">构建人:<font color=\"comment\">{commit_author}</font>\n"
                       f">提交信息:<font color=\"comment\">{git_commit_message}</font>\n"
                       f">[查看控制台]({console_url})"},
        "msgtype": "markdown"
    }
    requests.post(wechat_url, json=wechat_data)
    aite = {
        "msgtype": "text",
        "text": {
            "mentioned_list": [user_id],
        }
    }
    requests.post(wechat_url, json=aite)


post_wecom(sys.argv[1])

 三、jenkins执行python脚本

在jenkins项目上进行配置,在最后一步【构建后操作】中增加post build task,执行上述python脚本,如下图所示:

Jenkins构建结果自定义内容推送企业微信

 如果没有该选项就需要安装相应的插件(我已安装,没安装的话在Available plugins里面搜索安装),如下图:

Jenkins构建结果自定义内容推送企业微信

 四、推送结果显示

Jenkins构建结果自定义内容推送企业微信

五、企业微信推送消息颜色字体

        企业微信中的字体颜色目前只支持3种内置颜色。info是绿色,comment是灰色,warning是橙红色,如下图所示:

        见第二节中字体颜色的设置,构建结果为成功时显示绿色,失败为橙红色,其他构建显示信息为灰色。

Jenkins构建结果自定义内容推送企业微信

        emoji表情官网:🎁 Emoji cheat sheet for GitHub, Basecamp, Slack & more文章来源地址https://www.toymoban.com/news/detail-424288.html

到了这里,关于Jenkins构建结果自定义内容推送企业微信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jenkins配置钉钉机器人推送job构建信息

    系统设置—插件管理—可选插件—搜索DingTalk 点击新增 最后,先应用,再保存 最后,应用-保存 如果构建了job没有推送钉钉信息,重启下jenkins试试 http://ip:9000/restart

    2023年04月08日
    浏览(45)
  • Jenkins 重新定义 pom 内容,打包

    添加仓库地址,拉取凭证,选择需要的分支 勾选 构建环境 下删除原始 build 配置,防止文件错误 Pre Steps 构建前处理 pom.xml ,例如我是需要删除该模块的所有子模块配置,我这里使用 shell 命令匹配所有 moudle 进行删除,就完成了修改

    2024年02月08日
    浏览(36)
  • Jenkins实现自作自定义镜像并推送Harbor并编写目标服务器准备脚本

    部署项目需要通过Publish Over SSH插件,让目标服务器执行命令。为了方便一次性实现拉取镜像和启动的命令,推荐采用脚本文件的方式。 添加脚本文件到目标服务器,再通过Publish Over SSH插件让目标服务器执行脚本即可。 deploy.sh

    2024年01月18日
    浏览(77)
  • 基于企业微信应用消息的每日早安推送

    第一步:注册企业微信 企业微信注册地址:https://work.weixin.qq.com/wework_admin/register_wx 按照正常流程填写信息即可,个人也可以注册企业微信,不需要公司 注册完成后,登录 企业微信登录地址:https://work.weixin.qq.com/wework_admin/loginpage_wx 登录后,邀请用户关注 切换到我的企业-微

    2024年02月15日
    浏览(46)
  • 【企业微信-消息推送】模板卡片消息-Python代码

    浏览消息推送的时候,在模板卡片部分停滞很久;其中主要涉及url的回调工作,不太熟悉。 官网链接-模板卡片 官方特殊说明: 特殊说明 仅有 按钮交互型、投票选择型、多项选择型 以及填写了action_menu字段的文本通知型、图文展示型的卡片支持回调更新或通过接口更新卡片

    2024年02月10日
    浏览(38)
  • PowerShell 实现企业微信机器人推送消息

    在ARMS告警管理中创建企业微信机器人后,您可以在通知策略中指定对应的企业微信群用于接收告警。当通知策略的匹配规则被触发时,系统会自动向您指定的企业微信群发送告警通知。企业微信群收到通知后,您可以在企业微信群中对告警进行管理。 通过接口实现在群里发

    2024年02月06日
    浏览(103)
  • SQL企业微信群机器人消息推送

     --参考资料地址         --微软官方地址: https://learn.microsoft.com/zh-cn/sql/relational-databases/system-stored-procedures/ole-automation-stored-procedures-transact-sql?view=sql-server-ver16         --腾讯官方地址:https://developer.work.weixin.qq.com/         --使用教程:         --1.开启数据库的功能, \\\"只

    2024年02月08日
    浏览(40)
  • 企业微信消息推送(一)接收消息服务器URL

    1.点击左上角头像,打开微信管理平台 2.创建应用 3.获取五个参数 3.1获取应用的AgentId、Secret 3.2获取企业ID 配置接收消息服务器URL 企业微信限制过多,公司域名所有权检验不通过。采用接收消息服务器URL的方式。 3.3 获取token、EncodingAESKey 4.1 内网穿透、本地开发 先将请求打到

    2024年02月04日
    浏览(45)
  • 运用python实现企业微信群机器人消息推送

    使用场景 :将BI报表精准推送入(群),精准触达用户 目的 :提高管理层对数据的感知度 工具:python+企业微信 步骤: 1、创建企业微信群机器人,提取Webhook地址(群机器人地址) 2、编写代码填充推送内容信息实现推送 3、其他需求自定义代码编写 实现方法1–优化后 实现

    2024年02月16日
    浏览(39)
  • C#使用企业微信群机器人推送生产数据

        在日常的工作生产中,经常会有将将生产数据或者一些信息主动推送给相关的管理人员,我们公司在开发WMS系统时,为了仓库的储存安全,需要在危废品库存达到一定的储量时,自动通知仓管员去处理危废品,所以就需要程序自动的通过企业微信告知仓管员,这个时候就

    2024年02月10日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包