背景
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)