目的
之前是通過輪詢的形式,2分鐘更新一次svn,即時性不高,現在想要實作提交代碼時直接觸發構建
方案
使用svn的服務器hook,當有代碼提交時請求jenkins api實作構建
具體實作
1、jenkins的準備
jenkins的用戶管理中添加Token,token需要保存下來,后面無法查看

設定需要觸發的構建任務,構建觸發器勾選觸發遠程構建,設定一個自定義的令牌Token

2、svn hook
這里還是使用python去請求jenkins,創建python檔案PostTouchJenkinsBuild.py
#!/usr/bin/python # -*- coding: UTF-8 -*- import argparse import os import requests # 定義引數 parser = argparse.ArgumentParser() # 倉庫路徑 parser.add_argument('-s', '--repos', type=str, default=None) # 版本號 parser.add_argument('-v', '--rev', type=str, default=None) # 分支 parser.add_argument('-b', '--branch', type=str, default=None) # Jenkins Job Token parser.add_argument('-t', '--job_token', type=str, default=None) # Jenkins Job名 parser.add_argument('-n', '--job_name', type=str, default=None) args = parser.parse_args() # 讀取修改目錄 svndirschanged = os.popen( '"C:\\Program Files (x86)\\VisualSVN Server\\bin\\svnlook.exe" dirs-changed -r {} {}'.format(args.rev, args.repos)).readlines() # 判斷修改是否包含分支 for changed in svndirschanged: if changed.find("{}/".format(args.branch)) >= 0: # 請求jenkins進行構建 jenkinsurl為部署的jenkins地址 response = requests.get('http://root:113ce72325xxxxxxxx@jenkinsurl/job/{}/buildWithParameters?token={}'.format(args.job_name, args.job_token))
break
root為jenkins用戶Id,113ce72325xxxxxxxx為上面添加的api token,其他跟專案有關的引數,呼叫時再傳進來
在提交代碼后觸發,所以使用post-commit,在svn倉庫相應專案的hooks檔案夾中添加批處理檔案post-commit.bat(windows服務器),任務名有中文時需要注意編碼
SET REPOS=%1 SET REV=%2 "D:\Python\Python38-32\python.exe" "D:\Python\Project\SvnHookPython\PostTouchJenkinsBuild.py" -s %REPOS% -v %REV% -b trunk -t 11193a3f81441xxxxxxxxxxxxxxx -n LastOne-測驗區
svn鉤子觸發時會傳入兩個引數,提交時的倉庫路徑和版本號,我們獲取后傳給python獲取修改目錄來判斷修改分支,只有相應分支發生修改才進行構建
-s 倉庫路徑
-v 版本號
-t 任務設定的自定義令牌Token
-b 分支名
-n jenkins任務名
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/3773.html
標籤:其他
上一篇:Docker入門介紹
下一篇:那些年我們改過的規則代碼
