目錄html
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
graph LR 獲取代碼 --> 編碼 編碼 --> 提交代碼 提交代碼 --> |自動構建| 編譯程序集 編譯程序集 --> 編譯單元測試程序集 編譯單元測試程序集 --> |經過| 執行單元測試 編譯單元測試程序集 --> |不經過| 失敗 執行單元測試 --> |經過| 建立nuget包 建立nuget包 --> 上傳nuget包 執行單元測試 --> |不經過| 失敗 上傳nuget包 --> 清理編譯文件夾 失敗 --> 清理編譯文件夾 失敗 -.-> 獲取代碼
咱們須要修改3個方面。windows
Jenkins須要先須要安裝Github相關插件Github plugin
。api
首先新建一個git倉庫
安全
提交前須要把obj目錄下的project.assets.json
排出忽略,obj其餘的文件添加忽略。ruby
關於
project.assets.json
的做用能夠查看Jenkins持續集成學習-Windows環境進行.Net開發2bash
同時要把源代碼管理中的插件修改成Git
最後提交便可。
在jenkins咱們也新添加一個項目,名稱爲gittest,爲了方便,直接從svn的測試項目複製,這樣咱們能夠最大程度的減小重複配置。
將項目設置爲Github項目,Job的菜單就會顯示Github項。
將源代碼管理Subversion
改成Git
因爲我以前git的插件都已經安裝好,所以這裏沒有碰到任何問題。
添加git憑據,暫時使用用戶名和密碼
暫時先經過手動構建,測試一下流程是否通暢,暫時先把Build Triggers
的鉤都去掉
配置完後Job的左邊的菜單就會出現Github項,點擊就會調轉到配置的Github項目的倉庫中。
點擊構建
構建成功,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
在Build
中添加Set build status to "pending on Github commit"
,在構建前能夠更新Git的提交的狀態爲pending
若構建時上面步驟出現異常錯誤爲
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,使用後面的版本便可。
在Post-build Action
添加Set Github commit status(universal)
修改圈中的項,構建成功後就會更新對應的狀態到Git。
經過上面配置完後就能夠顯示Jenkins的構建狀態了
Jenkins支持2種配置方式
$JENKINS_BASE_URL/Github-webhook/
,如:http://127.0.0.1:8080/Github-webhook/
。詳細文檔能夠查看Github Plugin插件文檔。
在Build Triggers
選擇Github hook trigger for GITScm polling
Github上面須要添加一個鉤子,用於代碼push完成後通知jenkins構建。
在設置中點擊Webhooks
點擊添加Webhooks
因爲Github須要通知到我本地的jenkins服務,所以Jenkins的鉤子回調地址必須能被Github訪問到,我用花生殼作了內網穿透。
將Jenkins的鉤子地址配置到Github的webhooks中。只須要push事件便可。
在系統設置中找到Github服務器,添加一個憑證,點擊鏈接測試。若顯示Credentials verified for user XXXX, rate limit: XXXX
即表示鏈接成功,因爲Github有訪問限制具體查看Understanding rate limits for Github Apps。
而後點擊Advanced後能夠修改hook的url,我在本地默認是127.0.0.1
的地址,Github確定是訪問不到的,須要修改成正確的可被外部訪問到的外網地址。
設置完後當修改Job的配置保存時就會觸發建立Github的鉤子。
可是發現經過Github沒法通知到我本地的jenkens,一值顯示超時。
測試了下通知地址外網是能夠訪問到的,所以懷疑是否是因爲某些緣由致使Github沒法訪問進來。
因爲在國內Github訪問速度不是很理想,大部分公司都會搭建私有的Git倉庫,好比Gitlab。
爲了方便,我直接將Github的項目導入到了Gitlab中,具體導入方法能夠查看如何從Github遷移到Gitlab?
同時我須要在VS項目中添加Gitlab的遠程庫。
在VS團隊資源管理器
-存儲庫
中添加一個遠程。
安裝必要的插件Gitlab Authentication plugin
、Gitlab Hook Plugin
、Gitlab Plugin
。
須要注意的是安裝Gitlab Hook Plugin
插件的時候,若Jenkins的安裝目錄路徑存在空格,則可能安裝失敗。緣由是由於Gitlab Hook Plugin
依賴於ruby-runtime
,而ruby-runtime
不支持有空格的路徑。所以解決辦法是將jenkins遷移到無空格的路徑下,如我原本安裝的目錄是D:\Program Files (x86)\Jenkins
,將其遷移到D:\Jenkins
。具體步驟以下:
D:\Jenkins
。計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins
修改Jenkins服務路徑。爲D:\Jenkins
。啓動Jenkins服務
Gitlab Hook Plugin
插件可能有個安全問題會提示警告。
經過上述步驟Gitlab Hook Plugin
插件就能安裝成功了
在Jenkins系統設置中找到Gitlab的配置
鉤起Enable authentication for '/project' end-point
,這樣在Gitlab通知時須要身份驗證,保證安全性。
到Gitlab
右上角的用戶頭像點擊右鍵找到Setting
而後找到Access Token
生成一個Token,只須要勾選api
權限便可。
將生成好的Token複製下來,回到Jenkins配置
添加一個憑據,選擇Gitlab API token
,使用剛纔生成的token添加便可。
添加完成後測試連通性顯示Success
便可。
在Gitlab connections
咱們須要增長如何鏈接Gitlab
,和Github同樣,咱們須要增長一個token,用於受權Jenkins的訪問。
修改Git路徑。選擇剛纔添加的Gitlab鏈接。
修改源碼管理中的項目路徑
咱們可使用用戶名密碼或者token的方式訪問Gitlab
在Build Triggers
中勾選Build when a change is pushed to Gitlab
,後面會生成鉤子路徑,若是是本地注意將後面的迴環地址ip改成本地ip。
在Secret token
點擊生成一個token,這個token是用於受權web hook訪問的。若沒有配置在鉤子觸發是可能會返回403
錯誤碼。
到Gitlab添加一個web鉤子,在Setting
-Integrations
中配置
將剛纔的鉤子通知地址輸入,我本地無需SSL,所以去除了勾選,只有在Push
的時候才須要觸發。而後添加鉤子。
添加完成點擊Push events
發起一個測試,
返回200則代表觸發成功。
在Job的配置中Post-build action
添加Publish build status to Gitlab
,構建完後就可通知到Gitlab上構建狀態。
本章完成了使用Github和Gitlab進行源代碼管理進行持續集成。可是Github因爲沒法通知到我本地的jenkins因此沒法自動構建。
不管使用SVN仍是GIT進行源碼管理,總體流程不變,自動通知的關鍵都是代碼提交後通知Jenkins觸發構建。
|SVN|Git|
|-|-|
|經過客戶端或SVN服務器鉤子,代碼提交後執行腳本通知Jenkins。|代碼push後,Git經過web hook通知Jenkins|
本文地址:http://www.javashuo.com/article/p-zyazqgxa-ko.html 做者博客:傑哥很忙 歡迎轉載,請在明顯位置給出出處及連接