Jenkins持續集成學習-Windows環境進行.Net開發4

Jenkins持續集成學習-Windows環境進行.Net開發4


目錄

Jenkins持續集成學習-Windows環境進行.Net開發1
Jenkins持續集成學習-Windows環境進行.Net開發2
Jenkins持續集成學習-Windows環境進行.Net開發3
Jenkins持續集成學習-Windows環境進行.Net開發4
Jenkins持續集成學習-搭建jenkins問題彙總git

前言

前面三篇介紹了使用SVN的持續集成,本篇就來學習如何使用git進行持續集成。github

目標

探究 .net + git + jenkins方案的持續集成。web

前面3篇文章總結的最終流程以下。json

23.PNG

graph LR

    獲取代碼 --> 編碼
    編碼 --> 提交代碼
    提交代碼 --> |自動構建| 編譯程序集
    編譯程序集 --> 編譯單元測試程序集
    編譯單元測試程序集  --> |經過| 執行單元測試
    編譯單元測試程序集  --> |不經過| 失敗
    執行單元測試 --> |經過| 建立nuget包
    建立nuget包 --> 上傳nuget包
    執行單元測試  --> |不經過| 失敗
    上傳nuget包 --> 清理編譯文件夾
    失敗 --> 清理編譯文件夾
    失敗 -.-> 獲取代碼

咱們須要修改3個方面。windows

  1. 代碼提交到Git上
  2. 提交到Git上自動觸發構建
  3. 從Git上更新代碼

Github持續集成

Jenkins須要先須要安裝Github相關插件Github pluginapi

提交代碼到Github

首先新建一個git倉庫
1.png
3.PNG
4.png安全

提交前須要把obj目錄下的project.assets.json排出忽略,obj其餘的文件添加忽略。ruby

關於project.assets.json的做用能夠查看Jenkins持續集成學習-Windows環境進行.Net開發2bash

5.png
同時要把源代碼管理中的插件修改成Git
6.png
最後提交便可。
7.PNG

從Github更新代碼

在jenkins咱們也新添加一個項目,名稱爲gittest,爲了方便,直接從svn的測試項目複製,這樣咱們能夠最大程度的減小重複配置。
9.PNG
將項目設置爲Github項目,Job的菜單就會顯示Github項。
45.PNG
將源代碼管理Subversion改成Git
10.PNG

因爲我以前git的插件都已經安裝好,所以這裏沒有碰到任何問題。

添加git憑據,暫時使用用戶名和密碼
10.PNG
暫時先經過手動構建,測試一下流程是否通暢,暫時先把Build Triggers的鉤都去掉
13.PNG
配置完後Job的左邊的菜單就會出現Github項,點擊就會調轉到配置的Github項目的倉庫中。
14.PNG
點擊構建
11.PNG
構建成功,git日誌以下

10:55:27 由用戶 jake 啓動
10:55:27 構建中 在工做空間 D:\Program Files (x86)\Jenkins\workspace\gittest 中
10:55:27  > git.exe rev-parse --is-inside-work-tree # timeout=10
10:55:27 Fetching changes from the remote Git repository
10:55:27  > git.exe config remote.origin.url https://Github.com/GuojieLin/Jenkins.Core.git # timeout=10
10:55:27 Fetching upstream changes from https://Github.com/GuojieLin/Jenkins.Core.git
10:55:27  > git.exe --version # timeout=10
10:55:27 using GIT_ASKPASS to set credentials git帳號
10:55:27  > git.exe fetch --tags --progress https://Github.com/GuojieLin/Jenkins.Core.git +refs/heads/*:refs/remotes/origin/*
10:55:34  > git.exe rev-parse "refs/remotes/origin/master^{commit}" # timeout=10
10:55:34  > git.exe rev-parse "refs/remotes/origin/origin/master^{commit}" # timeout=10
10:55:34 Checking out Revision 75be92d4a4c131924a4601504cde7ba613f57b9f (refs/remotes/origin/master)
10:55:34  > git.exe config core.sparsecheckout # timeout=10
10:55:34  > git.exe checkout -f 75be92d4a4c131924a4601504cde7ba613f57b9f
10:55:34 Commit message: "同上"
10:55:34  > git.exe rev-list --no-walk da3b7456cf40552cdc66daf2d2db4ed43762c8e4 # timeout=10
10:55:34 Path To MSBuild.exe: D:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe
...

10:55:43 [WS-CLEANUP] Deleting project workspace...
10:55:43 [WS-CLEANUP] done
10:55:43 Finished: SUCCESS

git上顯示構建狀態

Build中添加Set build status to "pending on Github commit",在構建前能夠更新Git的提交的狀態爲pending
36.png

若構建時上面步驟出現異常錯誤爲ERROR: [Github Commit Status Setter] Failed to update commit state on Github. Ignoring exception [Cannot retrieve Git metadata for the build],則檢查Git和GitClient插件的版本,下面的rc版本有bug會致使沒法更新狀態待git,使用後面的版本便可。
39.PNG

Post-build Action添加Set Github commit status(universal)
37.PNG
修改圈中的項,構建成功後就會更新對應的狀態到Git。
40.png

經過上面配置完後就能夠顯示Jenkins的構建狀態了
41.png

自動觸發構建

Jenkins支持2種配置方式

  1. 手工模式
    手工模式須要在git人工配置jenkins的webhook的通知接收地址,地址格式爲$JENKINS_BASE_URL/Github-webhook/,如:http://127.0.0.1:8080/Github-webhook/
  2. 自動模式
    自動模式會經過Github的api自動建立webhook

詳細文檔能夠查看Github Plugin插件文檔

手工模式

Build Triggers選擇Github hook trigger for GITScm polling
17.PNG

Github上面須要添加一個鉤子,用於代碼push完成後通知jenkins構建。
在設置中點擊Webhooks
15.png
點擊添加Webhooks
16.png
因爲Github須要通知到我本地的jenkins服務,所以Jenkins的鉤子回調地址必須能被Github訪問到,我用花生殼作了內網穿透。
42.PNG
將Jenkins的鉤子地址配置到Github的webhooks中。只須要push事件便可。
17.png

自動模式

在系統設置中找到Github服務器,添加一個憑證,點擊鏈接測試。若顯示Credentials verified for user XXXX, rate limit: XXXX即表示鏈接成功,因爲Github有訪問限制具體查看Understanding rate limits for Github Apps
而後點擊Advanced後能夠修改hook的url,我在本地默認是127.0.0.1的地址,Github確定是訪問不到的,須要修改成正確的可被外部訪問到的外網地址。
35.PNG

設置完後當修改Job的配置保存時就會觸發建立Github的鉤子。

可是發現經過Github沒法通知到我本地的jenkens,一值顯示超時。
34.png
測試了下通知地址外網是能夠訪問到的,所以懷疑是否是因爲某些緣由致使Github沒法訪問進來。

Gitlab持續集成

因爲在國內Github訪問速度不是很理想,大部分公司都會搭建私有的Git倉庫,好比Gitlab。

爲了方便,我直接將Github的項目導入到了Gitlab中,具體導入方法能夠查看如何從Github遷移到Gitlab?

同時我須要在VS項目中添加Gitlab的遠程庫。
在VS團隊資源管理器-存儲庫中添加一個遠程。
37.PNG

安裝插件

安裝必要的插件Gitlab Authentication pluginGitlab Hook PluginGitlab Plugin

須要注意的是安裝Gitlab Hook Plugin插件的時候,若Jenkins的安裝目錄路徑存在空格,則可能安裝失敗。緣由是由於Gitlab Hook Plugin 依賴於ruby-runtime,而ruby-runtime不支持有空格的路徑。所以解決辦法是將jenkins遷移到無空格的路徑下,如我原本安裝的目錄是D:\Program Files (x86)\Jenkins,將其遷移到D:\Jenkins。具體步驟以下:

  1. 打開任務管理器或到windows服務中找到Jenkins,關閉Jenkins服務。
  2. 將Jenkins整個複製到D:\Jenkins
  3. 去註冊表計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins修改Jenkins服務路徑。爲D:\Jenkins

21.PNG

  1. 啓動Jenkins服務

    Gitlab Hook Plugin插件可能有個安全問題會提示警告。

經過上述步驟Gitlab Hook Plugin插件就能安裝成功了

配置Gitlab帳號

在Jenkins系統設置中找到Gitlab的配置

鉤起Enable authentication for '/project' end-point,這樣在Gitlab通知時須要身份驗證,保證安全性。
24.PNG

添加Token

Gitlab右上角的用戶頭像點擊右鍵找到Setting
23.PNG
而後找到Access Token生成一個Token,只須要勾選api權限便可。
23.PNG

添加憑據

將生成好的Token複製下來,回到Jenkins配置
25.PNG
添加一個憑據,選擇Gitlab API token,使用剛纔生成的token添加便可。
26.PNG
添加完成後測試連通性顯示Success便可。
Gitlab connections咱們須要增長如何鏈接Gitlab,和Github同樣,咱們須要增長一個token,用於受權Jenkins的訪問。

配置Git地址

修改Git路徑。選擇剛纔添加的Gitlab鏈接。
27.PNG

修改源碼管理中的項目路徑
28.PNG

咱們可使用用戶名密碼或者token的方式訪問Gitlab

配置鉤子

Build Triggers中勾選Build when a change is pushed to Gitlab,後面會生成鉤子路徑,若是是本地注意將後面的迴環地址ip改成本地ip。
Secret token點擊生成一個token,這個token是用於受權web hook訪問的。若沒有配置在鉤子觸發是可能會返回403錯誤碼。
29.PNG

到Gitlab添加一個web鉤子,在Setting-Integrations中配置
將剛纔的鉤子通知地址輸入,我本地無需SSL,所以去除了勾選,只有在Push的時候才須要觸發。而後添加鉤子。
30.PNG

添加完成點擊Push events發起一個測試,
31.PNG
返回200則代表觸發成功。
32.PNG

通知Gitlab狀態

在Job的配置中Post-build action添加Publish build status to Gitlab,構建完後就可通知到Gitlab上構建狀態。
44.PNG

43.PNG

結語

本章完成了使用Github和Gitlab進行源代碼管理進行持續集成。可是Github因爲沒法通知到我本地的jenkins因此沒法自動構建。

不管使用SVN仍是GIT進行源碼管理,總體流程不變,自動通知的關鍵都是代碼提交後通知Jenkins觸發構建。
|SVN|Git|
|-|-|
|經過客戶端或SVN服務器鉤子,代碼提交後執行腳本通知Jenkins。|代碼push後,Git經過web hook通知Jenkins|

參考文檔

  1. 手把手教你搭建Jenkins+Github持續集成環境
  2. Webhooks Guide
  3. Understanding rate limits for Github Apps
  4. 使用Github的webhooks進行網站自動化部署
  5. Jenkins詳細實踐:SpringBoot+Jenkins+Gitlab+Docker-Maven插件
  6. Github Commit Status Setter - Cannot retrieve Git metadata

本文地址:http://www.javashuo.com/article/p-zyazqgxa-ko.html 做者博客:傑哥很忙 歡迎轉載,請在明顯位置給出出處及連接

相關文章
相關標籤/搜索