Jenkins持续集成学习-Windows环境进行.Net开发3 (3)

创建一个vbs脚本用于执行通知。

jenkins = WScript.Arguments.Item(0) Wscript.Echo "jenkins="&jenkins jobName = WScript.Arguments.Item(1) Wscript.Echo "token="&token token = WScript.Arguments.Item(2) Wscript.Echo "token="&token authorization = WScript.Arguments.Item(3) Wscript.Echo "authorization="&authorization url = jenkins + "crumbIssuer/api/xml?xpath=concat(//crumbRequestField,"":"",//crumb)" Wscript.Echo "url="&url Set http = CreateObject("MSXML2.ServerXMLHTTP") http.open "GET", url, False http.setRequestHeader "Content-Type", "text/plain;charset=UTF-8" if not authorization = "" then http.setRequestHeader "Authorization", "Basic " + authorization end if http.send crumb = null if http.status = 200 then crumb = split(http.responseText,":") end if Wscript.Echo crumb(0)&"="&crumb(1) url = jenkins + "job/unittest/build?token=" + token Wscript.Echo url Set http = CreateObject("MSXML2.ServerXMLHTTP") http.open "GET", url, False http.setRequestHeader "Content-Type", "text/plain;charset=UTF-8" if not authorization = "" then http.setRequestHeader "Authorization", "Basic " + authorization end if if not isnull(crumb) then http.setRequestHeader crumb(0),crumb(1) end if http.send Wscript.Echo "Status: " & http.status &"Body: " & http.responseText

不同项目使用不同的post-commit.bat的脚本,脚本中设置JOB_NAME和JOB_TOKEN,不同项目最终都是调用上面的这个脚本进行远程构建。

获取Jenkins-Crumb

我们先获取到Jenkins-Crumb获取到防跨域攻击token。通过向JENKINS_URL/crumbIssuer/api/xml发送一个post请求,获取到crumb。

12.PNG

发送的时候我们需要将Authorization加入到http头部。

提交build请求

将获取到的Jenkins-Crumb:XXXXX加入到http头部,通过发送Get请求调用远程构建,触发成功会响应201的状态码。

13.png


14.png

关于远程调用更详细的文档说明可以查看Remote access API

通过上面的设置SVN客户端钩子远程构建就完成了,在项目中可以看到远程构建的标志。

9.PNG

相比SCM轮询,客户端远程构建实时性更高,由于是主动通知,因此代码提交完立刻可以触发远程构建。

SVN服务器钩子触发

服务端钩子与客户端钩子类似,具体区别如下。

服务端与客户端钩子比较 客户端钩子 服务端钩子
脚本位置   客户端post-commit钩子   服务端post-commit钩子  
配置   需要在Build Triggers配置中勾选Trigger builds remotely,设置Authentication Token   需要在Build Triggers配置中勾选轮询 SCM  
防跨域攻击   支持,需要获取防跨域攻击的token   支持,需要获取防跨域攻击的token  
通知方式   通过Remote access API调用主动构建   通过向Subversion Plugin发送请求主动构建  
其他要求     需要安装Subversion Plugin插件,同时服务端执行脚本需要一些特殊权限  
创建服务端钩子脚本

每个版本库创建后都会自动生成一些文件夹和文件,hooks文件夹内就是存放了服务器端的钩子。我们将我们需要的钩子脚本根据命名规则放入hooks文件夹即可。

24.PNG

windows环境钩子命名规则为钩子名.bat或钩子名.exe,如post-commit.bat或post-commit.exe。

详情可以查看官方文档

创建服务端钩子脚本post-commit.bat。

SET REPOS=%1 SET REV=%2 SET CSCRIPT=%windir%\system32\cscript.exe SET VBSCRIPT=F:\Repositories\JenkinsTest\hooks\post-commit-svn-server.vbs SET SVNLOOK=D:\Program Files\VisualSVN Server\bin\svnlook.exe SET JENKINS=http://127.0.0.1:8080/ REM AUTHORIZATION: Set to "" for anonymous acceess REM AUTHORIZATION: Set to encoded Base64 string, generated from "user_id:api_token" REM found on Jenkins under "user/configure/API token" REM User needs "Job/Read" permission on Jenkins REM AUTHORIZATION=base64(test:1184023ac835f44484f52316235a033db8) SET AUTHORIZATION="dGVzdDoxMTg0MDIzYWM4MzVmNDQ0ODRmNTIzMTYyMzVhMDMzZGI4" "%CSCRIPT%" "%VBSCRIPT%" "%REPOS%" "%2" "%SVNLOOK%" %JENKINS% %AUTHORIZATION%

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygypw.html