运维机器人 hubot 集成 jenkins

背景

Jenkins 现在不允许放在互联网上,只能通过内网去访问。有时候你在外面,有时候你在连别的机房的 VPN,这时候开发叫你发布咋办呢?答案就是发指令给 hubot,它去执行。先上个图看看:

集成 Jenkins

安装配置插件
npm install hubot-jenkins-optimised --save

然后把 hubot-jenkins-optimised 添加到 external-scripts.json :

[
  "hubot-jenkins-optimised"
]
Jenkins 配置

访问 $JENKINS_URL/me/configure,新建一个 API Token,记录下来

在 .bashrc 增加环境变量:

export HUBOT_JENKINS_URL=http://1192.168.1.1:15678/jenkins/
export HUBOT_JENKINS_AUTH=jenkins:11exxxxxxxxxxx

重启 hubot,开始操作。

  • jenkins list :列出所有任务
  • jenkins b :执行第几个任务
  • jenkins d :查看这个任务的描述。

几个例子:

jenkins 新建任务

这个才是重头戏。当你发布比如 Vue 的项目,除了 JOB_NAME、 gitlab 地址 ,其他都不变,如果是人工操作是这样的,打开 jenkins,新建任务,输入任务名 xx,拉到最下方有一个复制,输入已有的 yy 任务,复制好以后,更改 gitlab 地址,点击构建发布。如果是 hubot,怎么做呢?

使用 python-jenkins ,创建任务,替换JOB_NAME、gitlab 地址,即可,

例子:

现在要创建一个 web-contact 的任务,gitlab地址未 xx-contact,怎么做

run jenkins/jenkins_create.sh web-contact xx-contact

由于 hubot 不能直接和 Python 交互,所以需要通过一个 shell 脚本去执行 Python

#!/bin/bash

set -x 

/usr/local/python3/bin/python3 /data/hubot/bash/handlers/python3/create_job.py $1 $2

reate_job.py 脚本如下,基于 Python3:

# 使用方法 run jenkins/jenkins_create.sh web-contact xian-contact


import jenkins
import sys


server = jenkins.Jenkins('http://1192.168.1.1::15678/jenkins/', username='jenkins', password='xx')
# 复制 web-certificate 这个任务为 web-contact
defProjectName = "web-certificate"

def create_job(job_name, git_url):
    newProjectName = job_name
    if server.job_exists(newProjectName) != True:
        print("The project does not exist, start a new project")

        config_xml = server.get_job_config(defProjectName)
        # git 地址替换为 xx-certificate
        newconfig_xml = config_xml.replace("xx-certificate", git_url)
        server.create_job(newProjectName, newconfig_xml)
    else:
        print("Project already exists")

if __name__ == '__main__':
    try:
        job_name, git_url = sys.argv[1:3]
        create_job(job_name, git_url)
    except Exception as e:
        print(e)
posted @ 2020-09-02 10:30  海口-熟练工  阅读(637)  评论(0编辑  收藏  举报