Linux下Jenkins與GitHub自動構建NetCore與部署


今天我們來談談NetCore在Linux底下的持續集成與部署。NetCore我就不多介紹了,持續集成用的是Jenkins,源代碼管理器用的是GitHub。我們就跟着博文往下走吧。

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等待

  1. 進入到Jenkins的工作目錄/var/lib/jenkins/修改hudson.model.UpdateCenter.xml文件
  2. http://updates.jenkins-ci.org/update-center.json修改為http://mirror.xmission.com/jenkins/updates/update-center.json
  3. 重啟下Jenkins

2.Jenkins自動構建

  • 定時構建
    1. 創建Jenkins項目
      創建Jenkins項目

    2. 配置好自定義工作目錄
      自定義工作目錄

    3. 填寫源代碼路徑
      填寫源代碼路徑

    4. 配置定時任務
      配置定時任務

      字段 * * * * *
      含義 分鍾 小時 日期 月份 星期
      取值范圍 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
    5. 配置構建命令
      配置構建命令

      1. dotnet restore 
      2. dotnet build 
      3. dotnet publish 
    6. 查看構建,並運行NetCore
      注意:
      因為你建立的自定義工作目錄,對於"jenkins"沒有讀寫權限,所以可能就會導致構建失敗,執行下面命令,給Jenkins賦予讀寫權限。

      1. chown jenkins /ftpfile -R  
      2. chmod 777 /ftpfile -R 

      查看構建,並運行NetCore1

      查看構建,並運行NetCore2

      查看構建,並運行NetCore4

  • 觸發構建
    1. 配置GitHub
      針對我們的項目,我們要在自己的項目內添加webhook,並配置好webhook的地址。

      1. 在項目設置中找到webhook
        webhook位置

      2. 設置Jenkins的hook地址到剛才添加的webhook中,

        Jenkins的hook地址為:http://你的地址(端口)/github-webhook當然這個地址應該是外網可以訪問的

        設置hook地址中

    2. Personal access tokens
      對於任何第三方訪問GitHub的項目,是需要授權的,Jenkins也是一樣的,所以我們需要先獲取一個accessToken

      1. 進入Settings頁面,找到左邊列表的Developer settings,點擊進入,可以看到如下:
        Personal access tokens頁面
      2. 點擊生成,然后勾選,,保存即可,就可以獲得token,順便說下,token要記下來,不然關閉頁面就看不到了。
        生成token
    3. Jenkins配置
      上面的配置完成之后,我們需要返回Jenkins,進行再次設置。為Jenkins添加GitHub服務器。

      1. 添加GitHub服務器
        添加GitHub服務器
        2.添加GitHub的憑據,也就我們剛才拿到得accessToken
        添加憑據1

        添加憑據2
    4. Jenkins任務配置
      因為我們已經將觸發構建的前置步驟都做完了,那接着我們就要去修改之前的定時構建的配置了

      1. 切換成觸發構建
        切換成觸發構建
      2. 使用密文模式,並添加綁定,選擇剛才添加的憑據
        使用密文模式,並添加綁定,選擇剛才添加的憑據
    5. 修改代碼,上傳GitHub
      終於我們將之前的定時構建改成了觸發構建,也就是我們每次Push代碼都會觸發構建,接下來我們試下。

      1. 提交代碼
        提交代碼
      2. 查看Jenkins
        查看Jenkins

3.NetCore部署

終於的終於,我們把構建這個步驟做好了,那么接下來當然就是要部署我們網站咯。

  • 運行NetCore
    運行NetCore最簡單了,我們只需要在發布后的目錄運行dotnet ***.dll就可以了,當然,前提,你要裝CoreSDK。
    運行NetCore

  • nginx托管
    雖然說上面那樣已經運行起來,但是由於我們的環境在騰旭雲上,要訪問可以用nginx進行方向代理下,下面就簡單貼下配置就可以了。

    1. server { 
    2. listen 80; 
    3. location / { 
    4. proxy_pass http://localhost:5000; 
    5. proxy_http_version 1.1; 
    6. proxy_set_header Upgrade $http_upgrade; 
    7. proxy_set_header Connection keep-alive; 
    8. proxy_set_header Host $host; 
    9. proxy_cache_bypass $http_upgrade; 
    10. } 
    11. } 
  • 守護進程
    我們已經知道要運行Core,需要使用命令在控制台運行,但是一旦退出了,Core自然就退出了,所以我們在Linux底下需要一個類似IIS的,來托管我們運行Core的進程,守護進程,讓其在后台運行,自動重啟等等功能,這個就是supervisor

    supervisors是C/S架構的進程控制系統,可使用戶在類UNIX系統中監控、管理進程。常用於管理與某個用戶或項目相關的進程。

    安裝教程可以參考開始表格supervisor的鏈接,同樣怎么對於怎么對Core進行守護進程,文章內也有講,一步一步按照教程來就可以了。不過我這邊還是會講下我在使用supervisor中遇到的坑。

    1. 一開始,我百度了挺多的,發現百度中的文章,對於supervisor的日志文件,很多都說在/etc/log/supervisor/supervisord.log這個文件內,但其實我去找的時候,發現並沒有,查看配置文檔,發現默認是在tmp中,我不知道是centeros 的版本問題,還是supervisor版本問題。

    2. 還有一個就是,在根據教程走完,配置后,要進行啟動時,可能會出現Unlinking stale socket /tmp/supervisor.sock 這個錯誤,我們只需要解鎖下就可以了unlink /tmp/supervisor.sock

4.總結一下

該篇文章簡單介紹了下Linux下Jenkins與GitHub自動構建NetCore與部署,很多細點我可能沒講出來,我把大大的教程貼出來,按照教程走起,就可以了,這也是我實踐過了的,肯定可以用的,非常感謝大大們,然后呢,我也想拋磚引玉下,在我Jenkins構建時有兩個問題,不知道誰可以幫我解答下。

  1. 比如我們的解決方案文件.sln並沒有在git項目的根目錄下,我們要指定需要構建的解決方案呢?

  2. 還有一個就是,在命令dotnet publish我們怎么指定發布到另一個文件夾內呢,我知道有個參數-o|--output <OUTPUT_DIRECTORY>,我試了下,發現不行 dotnet publish -o /ftpfile/netCore/netCoreJenkins/JenkinsNetCore,會有以下的錯誤。

最后的最后,我的下一篇文章是《Linux下Jenkins與GitHub自動構建Node項目(Vue)》,期待0.5下吧。


免責聲明!

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



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