Git+Jenkins作自動化佈署

一直以來很想嘗試一下自動化佈署這件事情,剛好今天有點時間,就開始菜鳥練習吧,透過發佈程式碼,經由Jenkins做到自動發佈,至於單元測試、分支那些東西,菜鳥還不太會,沒關係,那就先略過吧~~

Step01:設定好IIS

這部分應該沒什麼好說的,就是把伺服器上面,新開一個站台,然後對應到實體目錄上

Step02:Git Server

改程式碼當然需要有版控囉,先前透過Nas來搞Git我覺得真的是在搞我自己,所以基本上就沒在用了,偶然間從Cheng-Ju Wu那邊獲得資訊,雖然他部落格文章寫得是Gogs,不過現在似乎沒有甚麼人在維護,他也推薦使用Gitea。因為是從原本的Gogs分出來寫的,所以大致上都跟文章介紹得差不多。

有興趣了解的人可以參考一下該系列文章

  1. Using Gogs Git Service - Part.1 - Install on Windows
  2. Using Gogs Git Service - Part.2 - Authentication - SMTP
  3. Using Gogs Git Service - Part.3 - Diff Data Not Available 的解決方式

Step03:上傳程式後觸發Jenkins

這邊實作的方式應該也很多種,但是我就仍然是用最簡單的一種,設定好token然後git push的時候就讓他發出這個request給jenkins

Step04:上傳怎麼可以沒有LFTP

因為windows內建的ftp指令實在是不堪使用,沒有辦法達到同步這件事情,但是LFTP這東西可以做到,很幸運的找到了好心人士的文章,照著實作也的確成功了。

細節就請移步前往該文章:使用lftp指令工具差異備份檔案至FTP吧,當CopyCat也不是很好。

Step05:把Jenkins搞起來

基本上Jenkins沒有大家想的那麼神奇,最主要就是取得最新的程式碼,並且佈署到我希望他佈署的機器上面。

因為剛才要從Git觸發Jenkins,所以這邊Jenkins就也要做一下設定

以前曾經上過保哥的課,有了解了一些,這次把它給實作出來(最基本的而已….)課程中最大的收穫就是,Jenkins其實所有的動作背後都只是幫你轉換成command line指令,透過console去偵錯為何設定不能用是最重要的。也就是因為這樣,其實我對於Git還不熟悉,只會用git clone跟git pull之類的指令,所以我很偷吃步的先在jenkins內的工作目錄當中,直接把他給git clone,之後在Jenkins之內的指令,就只是很單純的把最新的檔案抓下來,然後還原他 (老實說我真的不熟GIT,看了實際上的git的指令,應該是還要去判斷分支,還有一大堆的,不過那就留到以後一步一步學習吧,現在只是為了要能夠抓到最新版本的程式碼而已)

1
2
git pull
git reset --hard

在Jenkins取得程式碼之後,接下來就是要準備佈署到正式機上了,一般來說要做CI、CD,肯定還要補上一堆的單元測試,然後如果Build不過,那還要通知、也不可以佈署,不過我這邊只是要實作一個很簡單的Html網站的佈署(主要是練習自動化佈署的流程),所以這些東西就被我省略了,不過如果真的有要做自動化佈署,當然是要配合測試,才能夠品質有保障阿。

佈署的部分就交給LFTP來做這件事,我也把相關的指令照著LFTP介紹的做出來了,所以在Jenkins裡面就輸入相關指令即可。

1
2
cd E:\lftp
lftp -f 23WebSiteRuleMirror.lftp

之後修改程式,將程式git push出去,jenkins就會依照我們先前設定好的步驟,將檔案抓回來更新,然後透過FTP上傳到正式機囉

這邊當然還有很多缺點沒有做好,像是Git取得檔案的部分,應該要透過認證,不管是ssh還是其他方式。 (其實也有研究過,但是一直失敗)

就等未來學習到了再來加強囉。

參考文章

  1. 使用lftp指令工具差異備份檔案至FTP
  2. Windows Git仓库遇到的坑及使用public key authentication进行认证
  3. Step by Step Setup Git Server on Windows with CopSSH + msysGit and Integrate Git with Visual Studio