热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

钉钉OA流程审批,Jenkins自动授权通知用户密码

目录一、目的:二、钉钉表单设计:三、Jenkins设置(插件Role-based):四、服务器部署&#

目录

一、目的:

二、钉钉表单设计:

三、Jenkins设置(插件Role-based ):        

四、服务器部署: 

五、Python3定时检测脚本: 




一、目的:

        公司目前的软件版本发布是通过Jenkins来执行的,生产环境发布版本需要通过相关的OA流程,审批通过后由运维管理员操作。该流程审批过程通知不及时,运维管理员工作量大。

        为了简化jenkins版本发布流程,使开发人员能更灵活的控制版本的更新迭代,现准备将Jenkins的版本发布流程,从OA系统转到钉钉软件。在钉钉的OA工作台上提交版本发布流程,审批通过过,钉钉将自动发送Jenkins登陆帐号密码给申请人,帐号密码有一定的有效期,到期后帐号权限自动收回。

        本方案涉及技术点:钉钉表单设计、钉钉二次开发、Jenkins二次开发、Python脚本等。

        本文干货较多,另有完整代码付费下载,感谢大家打赏支持。也可根据本文介绍,自行研究调试程序。该系统目前已正式运行多月,实测有效!!!


二、钉钉表单设计:

        1、登陆钉钉后台管理界面(钉钉管理员或授权),工作台 -- OA审批 -- 创建新表单

 

请注意,表单的名称(PROJECT、SERVER_1等)在后面的脚本中会使用到,如需改名,则脚本中也需要同步修改。另外,PROJECT的项目名称,需和脚本中调用的数据库的项目名称一至。

发布服务名称,可设置多个,如SERVER_2、SERVER_3等

流程审批:根据公司各部门具体情况,可添加主管审批、测试审批。注意,最后再增加1个发起人的审批流程,这样,在主管、测试审批通过后,在申请人准备发布版本时,再点确认后,5分钟内钉钉就会发送帐号密码(由于密码有时效性,这样可以避免过早接收密码)

 2、创建1个H5应用,用于钉钉发送消息通知

 需填写钉钉的应用凭证:AgentId、AppKey、AppSecret

审批流程通过后,系统将会发送通知,告知流程发起人Jenkins平台的帐号、密码。钉钉将通过工作通知发送,见下图。


三、Jenkins设置(插件Role-based ):        

    1、Jenkins版本需大于V2.204,否则无法安装相关插件

    2、关闭跨站请求伪造保护:

        系统设置—全局安全设置 –关闭跨站请求伪造保护

        注意,最新版本的Jenkins,无法在控制台关闭跨站请求,修改方法如下:

        vi /usr/local/bin/jenkins.sh

        找到exec java那行(大概是在第37行),添加


-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true


        最终的效果如下


exec java -Duser.home="$JENKINS_HOME" -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true "${java_opts_array[@]}" -jar ${JENKINS_WAR} "${jenkins_opts_array[@]}" "$@"


        然后重启jenkins,登陆Jenkins,系统设置—全局安全设置,如显示以下内容,则跨站请求已关闭

    3、权限设置:

       a、安装插件:Role-based Authorization Strategy

       b、系统设置—全局安全配置--授权策略 将 安全矩阵换成:Role-based

        c、配置Roles:

                重新进入系统管理界面,可看的Manage and Assign Roles,点击进入

        Manage Roles管理角色 中新建角色 ding (设置 全部read及视图read权限)-- 角色名称对应脚本中的交互命令

          新建 Item roles:Role=DingDing;Pattern=prod.* ; 权限(无 Create、Delete、Configure、Move)

        说明:Role名称必须为DingDing(该名称和后面的脚本对应),Pattern的名称,”prod.*” 则表示,所有prod开头的jenkins任务,将会分配给指定用户


四、服务器部署: 

1、操作系统:Centos 7.6

2、Python安装:

        脚本需python3执行,python3安装可参考:centos下安装python3详细教程_大蛇王的博客-CSDN博客_centos如何安装python

        安装相关组件:


pip3 install PyMySQL==0.10.1

pip3 install DBUtils==1.3

pip3 install requests


3、Mysql安装:

        脚本中将记录及Jenkins信息储存在Mysql数据库中,请部署mysql,创建数据库oa_data,表结构见下图:(建表SQL可在最后的链接下载资源,付费下载,介意的可自行手动创建)

 

 4、API接口:

        脚本共用到钉钉API及Jenkins cli接口。钉钉API可到钉钉开发者后台下载,Jenkins接口可登陆jenkins后,系统管理 -- Jenkins命令行 下载,下载后的文件可copy到脚本所在目录(/data/dingding-python)

 4、Jenkins授权测试:

        Jenkins配置完成后,可手动发送相关命令,测试授权、取消授权是否有效。

        相关变量:根据情况调整修改(Jenkins地址、用户名、密码)


jenkins_url=http://user:password@jenkins.test.com:9880/
user=zhouch@sao.so         
passwd=xxxxxx



重置密码:(需jenkins-cli支持,可在Jenkins控制台下载)
echo 'jenkins.model.Jenkins.instance.securityRealm.createAccount("'$user'", "'$passwd'")' | java -jar jenkins-cli.jar -s $jenkins_url groovy =



授权:共3条命令
curl -X POST "${jenkins_url}role-strategy/strategy/assignRole" --data "type=projectRoles&roleName=DingDing&sid=$user"
curl -X POST "${jenkins_url}role-strategy/strategy/assignRole" --data "type=globalRoles&roleName=ding&sid=$user"
curl -X POST "${jenkins_url}reload"

授权后,重置该用户密码,即可以此用户、密码登陆该Jenkins



取消授权:
curl -X POST "${jenkins_url}role-strategy/strategy/unassignRole" --data "type=projectRoles&roleName=DingDing&sid=$user"
curl -X POST "${jenkins_url}role-strategy/strategy/unassignRole" --data "type=globalRoles&roleName=ding&sid=$user"
curl -X POST "${jenkins_url}reload"

取消授权后,可同时重置1个随机密码,这样,该用户就无法登陆了



五、Python3定时检测脚本: 

        1、每5分钟定时运行脚本,检测是否有新OA申请表单


*/5 * * * * nohup python3 -u /data/dingding-python/check_dingtalk_jenkins.py >/dev/null 2>&1 &


        2、主要参数:


#MYSQL参数
MYSQL_HOST = '127.0.0.1'
MYSQL_PORT = 3306
MYSQL_USER = 'root'
MYSQL_PASS = 'xxxxxxxx'
MYSQL_DATA = 'oa_data'

#钉钉API参数
CORPID = "ding......................."
CORPSECRET = "g-................................."
APPKEY = "xxxxxxxxxxxxxxxxxxxx" 
APPSECRET = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-jE"

# AgentId -- 后台管理H5应用中,Jenkins助手的AgentId,10位数字
AGENTID = 1111111111

#审批表单CODE -- 通过钉钉管理员后台编辑表单获取
PROCESS_CODE = "PROC-F913BB80-xxxx-xxxx-xxxx-xxxxxxxxxxxx"


脚本下载后,需要先修改以上主要参数:

Mysql相关参数,数据库oa_data需提前创建完成,对应创建所需的2个表。

参数 CORPID、CORPSECRET、APPKEY、APPSECRET,可咨询本公司钉钉后台管理员。

参数 AGENTID,为后台管理H5应用中,创建的Jenkins助手的AgentId,10位数字

参数 PROCESS_CODE,可在创建,编辑表单时获取;如链接地址为

​​​​​​https://aflow.dingtalk.com/dingtalk/web/query/oaDesigner?from=oaAdminHomeWeb&processCode=PROC-BD4B519A-531F-47CF-80DD-F27553BF77B&isCopyPublic=true#/z​​​​​​​

则 PROCESS_CODE 为  PROC-BD4B519A-531F-47CF-80DD-F27553BF77B

 后面的脚本,定时检测该表单,有没有新的OA申请流程并处理。

3、主要处理流程:


  • 调用函数getprocessinstance(),检测过去24小时内,有没有新的OA申请表单
  • 根据表单编号procinstid,调用函数get_streaminfo()来获取表单内的具体信息
  • 根据表单内的申请用户ID,originator_userid,调用函数get_user()来获取该用户的具体信息(登记的Email信息将作为Jenkins的登录用户名)
  • 调用函数check_business_id()判断此表单信息是否已在数据库中,新表单可新增记录到数据库,状态stanus=0
  • 如果表单流程已结束,即 task_status == "COMPLETED",这判断此流程状态:通过、拒绝。
  • 如果流程状态通过task_result == "agree",则调用函数get_jenkin_info(),获取表单中需要发布的项目的Jenkins服务器相关信息,然后调用Jenkins API相关命令(见本文第四部分),来授权流程申请人的账号、密码,并直接将账号密码通过钉钉工作通知发送给用户。
  • 授权后,更新数据库中的表单记录,将状态设置为 stanus=1
  • 如果数据库中的表单记录,状态已经为1了,则判断授权是否已超过2小时,超过2小时,则调用Jenkins API相关命令,收回权限,并通知用户。收回权限后,更新数据库中的表单记录,将状态设置为 stanus=2

4、相关API接口

        脚本中的相关API接口,已重新封装为def函数,便于调用。可下载本文最后提供的资源脚本,稍加修改即可使用(脚本中含大量注释,有一定Python编程基础即可)。

        喜欢自行研究的,可查看钉钉API文档 : API总览 - 钉钉开放平台

        附本脚本使用的def函数及对应的API


#先调用API获取到token
def getaccseetoken():  ==> dingtalk.api.OapiGettokenRequest

#获取24小时内的审批表单列表
def getprocessinstance(access_token):  ==> dingtalk.api.OapiProcessinstanceListidsRequest

#获取审批表单具体内容
def get_streaminfo(access_token, procinstid): ==> dingtalk.api.OapiProcessinstanceGetRequest

#根据userid获取用户详情
def get_user(access_token, userid): ==> dingtalk.api.OapiUserGetRequest

#获取Jenkins助手发送消息所需Token
def getAPItoken(): ==> dingtalk.api.OapiGettokenRequest

#通过Jenkins助手发送给指定用户相关信息
def post_message(access_token,userid,msg_str): ==> 


脚本及相关API接口控件,可直接下载使用 ,感谢支持!

钉钉OA流程审批,Jenkins自动授权通知用户密码-Python文档类资源-CSDN下载


推荐阅读
  • Jboss的EJB部署描述符standardjaws.xml配置步骤详解
    本文详细介绍了Jboss的EJB部署描述符standardjaws.xml的配置步骤,包括映射CMP实体EJB、数据源连接池的获取以及数据库配置等内容。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 2022年的风口:你看不起的行业,真的很挣钱!
    本文介绍了2022年的风口,探讨了一份稳定的副业收入对于普通人增加收入的重要性,以及如何抓住风口来实现赚钱的目标。文章指出,拼命工作并不一定能让人有钱,而是需要顺应时代的方向。 ... [详细]
  • 如何利用 Myflash 解析 binlog ?
    本文主要介绍了对Myflash的测试,从准备测试环境到利用Myflash解析binl ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
author-avatar
Joql
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有