Jenkins使用FTP進行一鍵部署及回滾(Windows)


前提條件:

1、必須有兩台服務器,一個是生產環境,另一個是測試環境。

2、兩台服務器上都必須安裝了Jenkins。

3、其中,生產環境上的Jenkins已經開通的CLI的權限(Windows參考:http://www.cnblogs.com/EasonJim/p/6086018.html)。

4、jenkins-cli.jar文件放在"Jenkins\war\WEB-INF\jenkins-cli.jar"。

5、思路參考:http://www.cnblogs.com/EasonJim/p/6086168.html

實現思路:

1、生產環境的Jenkins有兩個工程解壓和還原

2、測試環境的Jenkins有兩個工程部署和回滾

3、測試環境部署工程時先壓縮現有測試站點的包,通過FTP上傳,完成后通過CLI調用生產環境的Jenkins解壓工程進行解壓(解壓之前先備份)

4、測試環境回滾工程時,通過CLI通知生產環境的Jenkins還原工程進行解壓(得到上一次部署時的備份包,還是解壓之前先備份,最后解壓)

具體實現步驟:

1、在生產環境的Jenkins配置一個解壓操作的工程用於部署和一個還原工程用於回滾

解壓:

命令行:

echo [INFO] 備份壓縮操作
call C:\"Program Files"\WinRAR\Rar.exe a -x*\Upload* -x*\ueditor* -x*\UploadFolder* %FilePath%.bak.rar %UnzipPath%
echo [INFO] 解壓操作
call c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %FilePath% %UnzipPath%

說明:

先備份再解壓,也就是說每一次操作之前都要備份。

1)部署時,比如上傳的文件名為1.rar,那么備份文件為1.rar.bak.rar。

還原:

命令行:

echo [INFO] 備份壓縮操作
call C:\"Program Files"\WinRAR\Rar.exe  a -k -r -s -m1 -x*\Upload* -x*\ueditor* -x*\UploadFolder* -x*\Web.config -x*\DownloadFile* -x*\ErrorLog* -x*\LogFiles* %FilePath%-%BUILD_ID%.restorebak.rar %UnzipPath%
echo [INFO] 解壓操作
set "url=%UnzipPath%"
call c:\"Program Files"\winrar\rar.exe x -ep2 -o+- %FilePath% %url:~0,3%

說明:

先備份再解壓,也就是說每一次操作之前都要備份。

0)壓縮時我加入了buildid作為參數,避免還原同一個時會重復的問題。

1)回滾時,比如上傳備份的文件名為1.rar.bak.rar,那么回滾操作備份文件為1.rar.bak.rar.restorebak.rar。

2)這里由於上面備份的壓縮包是全路徑的,所以我用字符串切割提取到盤符直接解壓。

2、在測試環境的Jenkins上配置兩個工程,一個是部署,另一個是回滾

部署:

1)先在測試環境上備份要上傳的包

2)使用FTP插件進行上傳到生產環境

3)用CLI調用生產環境的解壓Job進行解壓

命令行:

echo [INFO] 壓縮要上傳的文件,這里已經排除了一些文件
cd D:\wwwroot\
call C:\"Program Files"\WinRAR\Rar.exe a -k -r -s -m1 -x*\Upload* -x*\ueditor* -x*\UploadFolder* -x*\Web.config -x*\DownloadFile* -x*\ErrorLog* -x*\LogFiles* -ag{%BUILD_ID%.push} D:\wwwroot\
move %BUILD_ID%.push.rar %workspace%

說明:由於rar壓縮的時候會帶上全路徑,所以我先cd進入到要備份的文件夾,然后a進行備份,這里要使用-ag參數備份時才是相對路徑,由於ftp插件只能上傳workspade的文件,所以最后把它移動到workspace。

特別說明,我這里的備份都是有規律的,比如:buildid.push.rar

然后是通過CLI遠程命令進行遠程調用生產環境的解壓工程Unzip:

命令行:

echo [INFO] 通過CLI調用公網Jenkins進行解包
java -jar "C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar" -s http://192.168.1.10:8888/ build Unzip -p FilePath=d:\%BUILD_ID%.push.rar -p UnzipPath=d:\wwwroot --username test --password test

 

說明:這個就是上面生產環境的解壓Unzip工程,參數是工程約定的

完成!

回滾:

在測試環境上新建還原工程,並增加ProjectName的參數,這個參數指定上面的部署工程,功能為獲得BuildID

命令行:

echo [INFO] 通過CLI調用公網Jenkins進行解包
Setlocal enabledelayedexpansion
set url="%ProjectName%"
set "buildID="
set url=%url::=/%
set url=%url:///=/%
set url=%url://=/%
for /f "tokens=1,2,3,4,5,6* delims=/" %%a in (%url%) do (
 set "buildID=%%f"
)
java -jar "C:\Program Files (x86)\Jenkins\war\WEB-INF\jenkins-cli.jar" -s http://192.168.1.10:8888/ build Restore -p FilePath=E:\%buildID%.push.rar.bak.rar -p UnzipPath=E:\wwwroot --username test --password test

 

說明:上面通過ProjectName的參數獲取BuildID,然后通過CLI遠程調用生產環境的Restore工程,其中%buildID%.push.rar.bak.rar就是部署工程備份的壓縮包,有規律的。

全部完成。

 

總結:

其實基於FTP上傳的方案也是有回滾操作的!只不過這些接口來回調用通過CLI的形式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM