使用这个技术的原因
我目前每天有一个小时要给业务创建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流水线的多样性,原来还能这样?点击下图,即可购买👇
长按识别二维码关注我们
欢迎把我们推荐给您的朋友们
DevOps流水线实践课程
👇戳阅读原文,立即购买
本文分享自微信公众号 - DevOps云学堂(idevopsvip)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。