对应百度效率云的这个文档:https://cloud.baidu.com/doc/XLY/s/Fjwvy8aq6#jenkins-%E6%8F%92%E4%BB%B6%E7%94%A8%E6%88%B7%E6%8C%87%E5%8D%97
由于官方的文档用起来很多误解,这里做一下简单的说明,方便大家使用。
首先是jenkins的安装。由于百度效率云目前的jenkins插件比较老,用最新版的jenkins无法配置成功,所有需要为百度效率云部署一个专用的jenkins,这里我称之为中继jenkins。最初,我是按百度的文档所提到的方式,下载jenkis.war,并使用
nohup java -Dfile.encoding=utf-8 -Dhudson.model.ParametersAction.keepUndefinedParameters=true -jar jenkins.war –httpPort=8888 &
这个命令来部署,同时我的业务jenkins是用docker的方式部署。后来,我将业务jenkins改为yum install jenkins直接安装在宿主机了,于是需要把这个效率云jenkins改为docker,避免冲突。
部署中继jenkins,我使用的是以下命令:
docker run -d -u root –restart=always -p 8888:8080 -v /jenkins_xly:/var/jenkins_home –name jenkins_xly -idt jenkins:2.19.1
运行后打开IP:8888,即是通常的账户密码初始化过程,接下来是插件,我取消了所有插件的安装,因为这个jenkins实例只用来转发百度效率云的构建推送。
下载百度效率云的jenkins插件
ipipe-agent.hpi,地址在文章开头那个链接中,通过百度网盘下载。在系统管理-插件管理-高级那里上传这个插件。
回到系统管理,找到iPipe agent management,按照提示填写几个字段。
- ipipe Url:效率云:https://xly.bce.baidu.com/${企业名}/${项目名}/ipipe,可以打开效率云的ipipe页面,复制上面的url,将多余的参数去掉即可。其中企业名好理解,但项目名不好理解,因为效率云上实际上可能已经有多个项目,这里选择你要用的主要的项目,一般也是英文字母。
- enterprise:就是上面这个url中的企业名,实际上是英文字母。
- Jenkins Name:给当前的jenkins取个名字,如果是重复设置(像我是之前部署过重新部署的),最好跟之前的不同,否则在效率云看到的是一样的job,无法区分。在效率云的流水线设置时,下拉框显示为:Jenkins Name+ Jenkins Job Name(这个JobName就是当前这个jenkins中配置的job的项目名称。)
- Username:是当前的jenkins实例的用户,比如用你登录jenkins的这个用户名。
点击Save,正常的情况下就直接跳转了,没有报错,如果有问题,会有报错,比如用最新版的jenkins,可以装上这个插件,但在这里提交时会报错,问题出在有一个JenkinsUUID的参数,在最新版的jenkins上是空的,我跟百度效率云团队提过这个问题,但至今尚未修复。所以只好多此一举,继续用jenkins2.19.1来中继。
创建jenkins的job
item name即项目名称,尽量用英文字母写清楚,前面提到了,这个名字会出现在效率云中作为选择job的依据。
因为我前面部署这个中继时没有安装其他插件,所以我这里只需要选择构建一个自由风格的软件项目即可。而实际上,这个job需要做的也只是转发一下请求。
在job的General配置中,找到iPipe配置,只需要填写项目标识,这个项目标识跟ipipeUrl中那个项目名是一回事儿,但实际上效率云在相应的项目中显示相关job时应该是以这个job中配置的项目名为准,而前面ipipeUrl中那个项目名应该是插件的历史遗留问题,早期只考虑到一个项目的注册方式。
然后在构建Build中添加一个执行shell,只添加一行命令:
curl {你的业务jenkins的某个job的webhook地址}
job的配置到此结束。
接下来,我们先去效率云验证下这个job能否被触发。
按照百度效率云的文档配置流水线即可,需要注意的是我开始有一个误区,就是代码触发时要选merge,而不是change。否则提交代码到代码库时不会触发流水线。
最后,简单提一下我们的业务jenkins需要做什么配置来响应中继jenkins的curl请求,这个未必是最好的方式,因为不能传递参数了,也许应该用触发远程构建之类的实现,我对jenkins还不够了解。
假定按curl的话,我们需要在业务jenkins安装一个generic-webhook-trigger插件,然后在业务jenkins的job中启用这个插件的配置,填写token这个参数,这个token只要在当前的jenkins的jobs中不重复即可,但为了方便识别,我一般会加上项目标识,比如itemname-rR74nddfdsfs23mm
然后上面curl后面的网址就有了,格式是
http://JENKINS_URL/generic-webhook-trigger/invoke?token={token}