自動化部署-svn hook觸發構建

目的

  之前是通過輪詢的形式,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任務名

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章