Chatops实践之Hubot +钉钉实现自动创建Jenkins Job

Stella981
• 阅读 992

使用这个技术的原因

我目前每天有一个小时要给业务创建Jenkins 的Job,他的流程其实很简单,研发把Git仓库的地址发给我,我把Git仓库写到Jenkins里,然后Jenkins_job的命名规则为Git库地址+项目名称(用jenkins插件做权限管理用的规则),在把jenkins的Trigger地址在Gialb 的webhook中添加,之后在手动执行一些build 读取一下Jenkinsfile的参数化构建。所以整理一下必须的参数

  • Jenkins Job Name

  • Gitlab Url

  • Jenkinsfile Name

  • Gitlab WebHook

其中Gitlab WebHook 是Jenkins Job Name +固定字符串组成的,所以需要传的参数就剩三个了

Hubot需要使用的插件

hubot-script-shellcmd

让hubot 可以运行shell命令

安装hubot-script-shellcmd

cd myhubotnpm install hubot-script-shellcmdcp -R node_modules/hubot-script-shellcmd/bash .# 在配置文件 external-scripts.json中添加hubot-script-shellcmd# 启动hubot./bin/hobut

先来一版不加任何异常的脚本

hubot 的shell脚本

#!/bin/bash# 声明解释器开头python3  handlers/createjenkins.py $1 $2 $3# echo 就是机器人向群组发送的消息echo "Jenkins Job 已经创建完毕请访问https://jenkins.xxx.com 进行访问"exit 0# 加一个返回值

通过shell去创建Jenkins有一些不够优雅(写curl 太麻烦),所以我这边选择用python-jenkins这个库去创建Jenkins Job

创建jenkins job 的python脚本

先安装依赖(我用的python3.6)

pip3 install python-jenkins

import jenkinsimport sysclass JenkinsMethod(object):    '''    jenkins_server_url      jenkins 路径    jenkins_username        jenkins 用户名    jenkins_password        jenkins 密码    pipeline_name           Jenkins Job 的名字    git_url                 git的地址    jenkinsfile_path        Jenkinsfile的名字    '''    def __init__(self,jenkins_server_url,jenkins_username,jenkins_password):        self.server = jenkins.Jenkins(jenkins_server_url,username=jenkins_username,password=jenkins_password)    def jenkins_create_job(self, git_url, jenkinsfile_path, pipeline_name,multi_pipeline=None):        if multi_pipeline is None:            conf_mxl = self.server.get_job_config("pipeline-template")            conf_mxl = conf_mxl.replace("GITURL", git_url)            conf_mxl = conf_mxl.replace("Jenkinsfile",jenkinsfile_path)            self.server.create_job(pipeline_name, conf_mxl)        else:            # 多分支构建            passif __name__ == '__main__':    jenkins_server_url = "http://jenkins.xxx.com:8080"    jenkins_username = "xxx"    jenkins_password = "xxx"    argv = sys.argv    pipeline_name = argv[1]    git_url = argv[2]    jenkins_file_path = argv[3]    client = JenkinsMethod(jenkins_server_url, jenkins_username, jenkins_password)    client.jenkins_create_job(pipeline_name, git_url, jenkins_file_path)

在机器人上设置一个帮助选项

 robot.hear /jenkinshelp/i, (res) ->    res.send "想要创建Jenkins请输入命令请输入:\t\n \"run createjenkins argv1 argv2 argv3\"\nargv1:需要创建Job的名字\nargv2:git的url\nargv3:Jenkinsfile的名字"

之后就可以使用机器人去创建Jenkins的Job 了,后面需要优化一下脚本

添加一下异常通知,例如Job 名字重复,创建失败等问题

还有增加一下Gitlab的webhook的添加等。


好课推荐

  • 系统的教你实施流水线

  • 掌握DevOps流水线的多样性,原来还能这样?点击下图,即可购买👇

Chatops实践之Hubot +钉钉实现自动创建Jenkins Job

Chatops实践之Hubot +钉钉实现自动创建Jenkins Job


长按识别二维码关注我们

欢迎把我们推荐给您的朋友们

Chatops实践之Hubot +钉钉实现自动创建Jenkins Job

DevOps流水线实践课程

👇戳阅读原文,立即购买

本文分享自微信公众号 - DevOps云学堂(idevopsvip)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
3种创建Jenkins流水线的方法
Jenkins是一个DevOps工具,可以用来自动构建、测试和交付软件代码。如果你是Jenkins的新手,本教程将帮助你理解如何使用以下方法之一创建Jenkins流水线(Pipeline):经典的Jenkins用户界面JenkinsBlueOcean用户界面,减少杂波并增加清晰度Git仓库Jenkins
Stella981 Stella981
3年前
Jenkins + Gogs 搭建DevOps环境
Gogs:1\.安装过程中,对外访问URL可配置公网IP地址:端口号,因为这个选项会影响未来git仓库的地址。2\.新建好仓库后,如果想实现提交代码后自动触发编译,则需要配置对应代码仓库的Webhook:仓库设置管理Web钩子AddanewWebhookGogs推送地址:http://Jenkins服务器地址/gogswe
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
Jenkins触发远程Job的几种方式
本文叙述基于以下假设前提,将介绍三种在不同的jenkins服务器之间触发Job的方法:本地JenkinsServerlocal.jenkins.com远程JenkinsServerremote.jenkins.com本地JenkinsJob名local\_job远程JenkinsJob名remote\_job需求
Stella981 Stella981
3年前
Jenkins插件下载镜像加速
转:https://www.cnblogs.com/zhuochong/p/10082498.html可供选择的jenkins2插件镜像列表:Jenkins所有镜像列表:http://mirrors.jenkinsci.org/status.html比如日本的镜像:http://mirror.esuni.jp/jenkins/,ht
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这