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

使用这个技术的原因

我目前每天有一个小时要给业务创建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 myhubot
npm install hubot-script-shellcmd
cp -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 jenkins
import sys


class 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:
            # 多分支构建
            pass


if __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流水线的多样性,原来还能这样?点击下图,即可购买????


长按识别二维码关注我们

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

DevOps流水线实践课程

????戳阅读原文,立即购买

你可能感兴趣的:(git,vnc,devops,svn,docker)