Linux下Jenkins與GitHub自動構建NetCore與部署
今天我們來談談NetCore在Linux底下的持續整合與部署。NetCore我就不多介紹了,持續整合用的是Jenkins,原始碼管理器用的是GitHub。我們就跟著博文往下走吧。
-
-
-
- 1.Linux環境
- 2.Jenkins自動構建
- 定時構建
- 觸發構建
- 3.NetCore部署
- 4.總結一下
-
-
1.Linux環境
在進行自動構建之前,我們需要一個可以執行的Linux環境,並保證環境安裝了NetCoreSDK
,Git
,Jenkins
等環境,那在這邊就不多說環境的安裝,提供相對應的安裝教程,大家按照安裝就可以,不過對Jenkins
環境 | 地址 |
---|---|
NetCore | https://dotnet.microsoft.com/download/linux-package-manager/centos/sdk-current |
Git | https://www.cnblogs.com/imyalost/p/8715688.html |
Jenkins | https://www.cnblogs.com/loveyouyou616/p/8714544.html |
Supervisor | https://www.cnblogs.com/miskis/p/6026452.html |
囉嗦的那一句:
我在安裝Jenkins
Jenkins等待
- 進入到
Jenkins
的工作目錄/var/lib/jenkins/
修改hudson.model.UpdateCenter.xml
檔案 - 將
http://updates.jenkins-ci.org/update-center.json
修改為http://mirror.xmission.com/jenkins/updates/update-center.json
- 重啟下
Jenkins
2.Jenkins自動構建
-
定時構建
-
建立Jenkins專案
-
配置好自定義工作目錄
-
填寫原始碼路徑
-
配置定時任務
欄位 * * * * * 含義 分鐘 小時 日期 月份 星期 取值範圍 0-59 0-23 1-31 1-12 0-7 示例 每隔15分鐘執行一次 H/15 * * * * 每隔2個小時執行一次 H H/2 * * * 每隔3天執行一次 H H H/3 * * 每隔3天執行一次(每月的1-15號) H H 1-15/3 * * 每週1,3,5執行一次 H H * * 1,3,5 規則 指定時間範圍 a-b 指定時間間隔 / 指定變數取值 a,b,c -
配置構建命令
- dotnet restore
- dotnet build
- dotnet publish
- dotnet restore
-
檢視構建,並執行NetCore
注意:
因為你建立的自定義工作目錄,對於"jenkins"沒有讀寫許可權,所以可能就會導致構建失敗,執行下面命令,給Jenkins賦予讀寫許可權。- chown jenkins /ftpfile -R
- chmod 777 /ftpfile -R
- chown jenkins /ftpfile -R
-
-
觸發構建
-
配置GitHub
針對我們的專案,我們要在自己的專案內新增webhook
,並配置好webhook
的地址。-
在專案設定中找到
webhook
-
設定Jenkins的hook地址到剛才新增的
webhook
中,Jenkins的hook地址為:
http://你的地址(埠)/github-webhook
,當然這個地址應該是外網可以訪問的
-
-
Personal access tokens
對於任何第三方訪問GitHub的專案,是需要授權的,Jenkins也是一樣的,所以我們需要先獲取一個accessToken
- 進入
Settings
頁面,找到左邊列表的Developer settings
,點選進入,可以看到如下:
- 點選生成,然後勾選
,
,儲存即可,就可以獲得token,順便說下,token要記下來,不然關閉頁面就看不到了。
- 進入
-
Jenkins配置
上面的配置完成之後,我們需要返回Jenkins,進行再次設定。為Jenkins新增GitHub伺服器。- 新增GitHub伺服器
2.新增GitHub的憑據,也就我們剛才拿到得accessToken
- 新增GitHub伺服器
-
Jenkins任務配置
因為我們已經將觸發構建的前置步驟都做完了,那接著我們就要去修改之前的定時構建的配置了- 切換成觸發構建
- 使用密文模式,並新增繫結,選擇剛才新增的憑據
- 切換成觸發構建
-
修改程式碼,上傳GitHub
終於我們將之前的定時構建改成了觸發構建,也就是我們每次Push程式碼都會觸發構建,接下來我們試下。- 提交程式碼
- 檢視Jenkins
- 提交程式碼
-
3.NetCore部署
終於的終於,我們把構建這個步驟做好了,那麼接下來當然就是要部署我們網站咯。
-
執行NetCore
執行NetCore最簡單了,我們只需要在釋出後的目錄執行dotnet ***.dll
就可以了,當然,前提,你要裝CoreSDK。
-
nginx託管
雖然說上面那樣已經執行起來,但是由於我們的環境在騰旭雲上,要訪問可以用nginx進行方向代理下,下面就簡單貼下配置就可以了。- server {
- listen 80;
- location / {
- proxy_pass http://localhost:5000;
- proxy_http_version 1.1;
- proxy_set_header Upgrade $http_upgrade;
- proxy_set_header Connection keep-alive;
- proxy_set_header Host $host;
- proxy_cache_bypass $http_upgrade;
- }
- }
- server {
-
守護程序
我們已經知道要執行Core,需要使用命令在控制檯執行,但是一旦退出了,Core自然就退出了,所以我們在Linux底下需要一個類似IIS的,來託管我們執行Core的程序,守護程序,讓其在後臺執行,自動重啟等等功能,這個就是supervisorsupervisors是C/S架構的程序控制系統,可使使用者在類UNIX系統中監控、管理程序。常用於管理與某個使用者或專案相關的程序。
安裝教程可以參考開始表格supervisor的連結,同樣怎麼對於怎麼對Core進行守護程序,文章內也有講,一步一步按照教程來就可以了。不過我這邊還是會講下我在使用supervisor中遇到的坑。
-
一開始,我百度了挺多的,發現百度中的文章,對於supervisor的日誌檔案,很多都說在
/etc/log/supervisor/supervisord.log
這個檔案內,但其實我去找的時候,發現並沒有,檢視配置文件,發現預設是在tmp
中,我不知道是centeros 的版本問題,還是supervisor版本問題。 -
還有一個就是,在根據教程走完,配置後,要進行啟動時,可能會出現
Unlinking stale socket /tmp/supervisor.sock
這個錯誤,我們只需要解鎖下就可以了unlink /tmp/supervisor.sock
-
4.總結一下
該篇文章簡單介紹了下Linux下Jenkins與GitHub自動構建NetCore與部署
,很多細點我可能沒講出來,我把大大的教程貼出來,按照教程走起,就可以了,這也是我實踐過了的,肯定可以用的,非常感謝大大們,然後呢,我也想拋磚引玉下,在我Jenkins構建時有兩個問題,不知道誰可以幫我解答下。
-
比如我們的解決方案檔案
.sln
並沒有在git專案的根目錄下,我們要指定需要構建的解決方案呢? -
還有一個就是,在命令
dotnet publish
我們怎麼指定釋出到另一個資料夾內呢,我知道有個引數-o|--output <OUTPUT_DIRECTORY>
,我試了下,發現不行dotnet publish -o /ftpfile/netCore/netCoreJenkins/JenkinsNetCore
,會有以下的錯誤。
最後的最後,我的下一篇文章是《Linux下Jenkins與GitHub自動構建Node專案(Vue)》,期待0.5下吧。