一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

命令行上用 curl 操作 hudson/Jenkins 简明教程

时间:2015-03-08 编辑:简简单单 来源:一聚教程网

最近项目组想基于hudson(现在改名jenkins了,但是我还是喜欢hudson这个名字)开发一套Auto UT的工具,可以通过命令行指令来对hudson上的UT jobs进行操作。本想借鉴一下UK那边项目组开发的hudson的perl包,但是其内部实现太过复杂,很多功能我们都用不上,于是只能自己琢磨了。后来在https://wiki.jenkins-ci.org/display/JENKINS/Bash+Job+Clone+script里发现这个基于curl开发的bash能很方便的实现了我的想法。

curl是利用URL语法在命令行方式下工作的开源文件传输工具。它被广泛应用在Unix、多种Linux发行版中,并且有DOS和Win32、Win64下的移植版本。我就以Bash Job Clone script的内容结合自己的实践来讲下。

 代码如下 复制代码

CURL="curl --user $USERNAME:$PASSWORD -s " 



-u/--user

设置用户名和密码

-s/--silent

安静模式。不显示进度表或错误信息。

 代码如下 复制代码
# check for existing job 
`$CURL -f -o /dev/null $TO_CONFIG_URL` 
if [ $? -eq 0 ]; then 
        echo "WARN: $TO_PROJECT already exists on the hudson server. No action taken." 
        continue 
fi 



-f/--fail

( HTTP )服务器出错时屏蔽错误信息(无任何输出)。这样做以便更好的支持脚本等能更好的处理失败的尝试。在正常情况下当一个HTTP服务器无法提供文档时,它将返回一个解释其原因的HTML文件 。此标志将防止curl输出此文档,并返回错误22 。

 代码如下 复制代码

# download the config.xml for the job, continue if it doesn't exist 
`$CURL -o $FROM_CONFIG_XML $FROM_CONFIG_URL` 
grep "Error 404" "$FROM_CONFIG_XML" > /dev/null 
if [ $? -eq 0 ]; then 
        echo "FAIL: $FROM_CONFIG_URL is not a valid project url" 
        continue 
fi 


-o/--output<文件>

将获取的远程文件输出到文件中,而不是输出到屏幕上(stdout)。如果您使用{}或[]定义了批量获取文件,则您可以在<文件>选项中用#后跟随数字的格式来定义文件名。这样实际文件名中的#将被多个URL中的当前字符串代替。如:

curl  http://{one,two}.site.com -o "file_#1.txt"        则输出file_one和file_two文件

或使用多个变量如:

curl  http://{site,host}.host[1-5].com -o "#1_#2"             #1将被"site"或"host"代替,#2将被1-5之间的数字代替

您处理多少条URL就可以使用多少次该选项。

 代码如下 复制代码

# create a new job based on the existing job 
`$CURL -o /dev/null --data " " "$HUDSON_URL/createItem?name=${TO_PROJECT}&mode=copy&from=${FROM_PROJECT}"` 
  
# upload new job data 
`$CURL -o /dev/null --data "@$TO_CONFIG_XML" "$HUDSON_URL/job/$TO_PROJECT/config.xml"` 
  
# enable the job, there seems to be a bug where we need to first disable and then enable 
`$CURL -o /dev/null --data disable "$HUDSON_URL/job/$TO_PROJECT/disable"` 
`$CURL -o /dev/null --data enable "$HUDSON_URL/job/$TO_PROJECT/enable"` 



-d/--data <数据>

( HTTP )将特定数据POST到服务器,与在浏览器中用户填写表单并按提交按钮的效果一样。

如果您的数据以字符@开头,其余的部分应当是一个用来读取数据的文件名,或者您想要cURL从标准输入(stdin)读取数据。该文件的内容必须是经过URL编码的。也可指定多个文件。比如要post文件foobar,那么格式是--data@foobar 。


好了,curl的用法,以上这么多对我的需求来说够用了。这时候应该有人要问了,像$HUDSON_URL/job/$TO_PROJECT/disable这串网址是如何获取?这里我们需要借助firebug来获取。

我以create new job这个操作来讲下,怎么获取表单项。

首先,我们在hudson上手动创建一个job, New Job  --> 输入Job name --> 选择Copy existing job,点击OK后,观察firebug

 

命令行上用 curl 操作 hudson/Jenkins 简明教程

命令行上用 curl 操作 hudson/Jenkins 简明教程

根据以上信息,我们可以看到浏览器是如何提交表单的,那么curl就该这么写

 代码如下 复制代码
curl -u username:passwd -s  -o /dev/null -d createItem -d name=ACEFEI -d mode=copy -d from=CloneJob "http://135.251.123.221:8080/view/All/createItem" 



其中

-d createItem 是根据firebug中URL里POST createItem所得。

-d name=ACEFEI -d mode=copy -d from=CloneJob根据Post选项里json{“name”: “ACEFEI”, "mode": "copy", "from": "CloneJob"}所得。

最后的网址是根据响应选项里Reload the page to get source for:http://135.251.123.221:8080/view/All/createItem所得(或者把鼠标移到POST createItem也可以显示网址)。

以此类推,我们也可以写出delete job等操作。

 代码如下 复制代码
curl -u user:passwd -s  -o /dev/null -d doDelete "http://135.86.206.146:8080/job/acefei/doDelete" 

 

命令行上用 curl 操作 hudson/Jenkins 简明教程

热门栏目