網上更多的是 Jenkins+git 的組合形式
而 svn 相關的 post-commit 很多是通過執行 python 腳本或者java程序的。
至於用 Jenkins 部署 asp.net 應用 的,更是少之又少
這裏分享下自己的實現方式,基本都是參考前人的各項經驗
1.首先 要有 Jenkins ,還沒有的需要先下載了
Jenkins 安裝好 Subversion (svn) 插件
新建 一個 任務:
選擇 subversion 並配置相關信息:
構建觸發器選擇遠程觸發,根據情況設置一個 token,下面有提示,注意看提示
上面框框裏填的 token 值就是 在 url 參數中token 的值
構建配置
(因爲是asp.net應用,環境配置我們直接手動配置iis了)
這裏的構建比較簡單,直接將同步的文件複製到 應用託管的目錄下
%WORKSPACE% 是Jenkins 提供的變量,點擊“可用環境變量列表” 可以看看有哪些可以用
最後點擊保存
Jenkins 部分就到這了。
2. svn 部分(這裏svn是window環境下)
首先 在svn server 管理工具上選擇要同步發佈的倉庫,進入 屬性 ,選擇 hook ,編輯 post-commit
svn hook 相關內容 參考 https://www.cnblogs.com/jianxuanbing/p/6835765.html
需要說明下,各個 commit 觸發的內容 是 可執行文件,在 window 平臺表現爲 cmd 後綴,所以上面直接些 docs 命令
我們需要的效果是:在提交後,根據提交內容判斷是否包含 “publish” ,包含則執行發佈
源碼中的 %1 %2 是傳入的參數,分別對應 命令執行時傳遞參數的順序,
源碼:
for /f "tokens=1,2 delims=:" %%a in ('svnlook log -r %2 %1') do (
if not defined MESSAGE set MESSAGE=%%a
)
echo %MESSAGE%|findstr "publish" >nul
if %errorlevel% equ 0 (
d:
cd D:\Program Files\curl-7.69.1-win64-mingw\bin
curl -G http://localhost:8080/job/test/build?token=token
)
注意源碼中:
curl 的使用參考 : https://www.cnblogs.com/xing901022/p/4652624.html
如何匹配內容參考:https://blog.csdn.net/xiaoding133/article/details/39253213
curl的地址爲 前面 Jenkins 配置的遠程構建 觸發地址
在配置好了之後,我們嘗試提交數據,並備註 publish
但可能會失敗,原因或者解決方案參考:https://www.jianshu.com/p/aa0dc1157599
還可能會失敗,可能執行沒有權限,參考:https://blog.csdn.net/leeyongit/article/details/28874133
如果是 Linux 平臺,要注意 post-commit 要賦予 執行權限,參考:https://blog.csdn.net/dahuzix/article/details/49053947
over