• 运维机器人 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)
    
  • 相关阅读:
    快速排序的分析与优化
    矩阵原地转置
    变位词问题
    一维向量旋转算法
    位图排序
    Linux网络编程:UDP实现可靠的文件传输
    Linux网络编程:UDP Socket编程范例
    es6+最佳入门实践(6)
    es6+最佳入门实践(5)
    es6+最佳入门实践(4)
  • 原文地址:https://www.cnblogs.com/fsckzy/p/13600408.html
Copyright © 2020-2023  润新知