zoukankan      html  css  js  c++  java
  • 运维机器人 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)
    
  • 相关阅读:
    HDU 4472 Count DP题
    HDU 1878 欧拉回路 图论
    CSUST 1503 ZZ买衣服
    HDU 2085 核反应堆
    HDU 1029 Ignatius and the Princess IV
    UVa 11462 Age Sort
    UVa 11384
    UVa 11210
    LA 3401
    解决学一会儿累了的问题
  • 原文地址:https://www.cnblogs.com/fsckzy/p/13600408.html
Copyright © 2011-2022 走看看