Jenkins持續集成學習-Windows環境進行.Net開發4
目錄
Jenkins持續集成學習-Windows環境進行.Net開發1
Jenkins持續集成學習-Windows環境進行.Net開發2
Jenkins持續集成學習-Windows環境進行.Net開發3
Jenkins持續集成學習-Windows環境進行.Net開發4
Jenkins持續集成學習-搭建jenkins問題匯總
前言
前面三篇介紹了使用SVN的持續集成,本篇就來學習如何使用git進行持續集成。
目標
探究 .net + git + jenkins方案的持續集成。
前面3篇文章總結的最終流程如下。
我們需要修改3個方面。
- 代碼提交到Git上
- 提交到Git上自動觸發構建
- 從Git上更新代碼
Github持續集成
Jenkins需要先需要安裝Github相關插件Github plugin
。
提交代碼到Github
首先新建一個git倉庫
提交前需要把obj目錄下的project.assets.json
排出忽略,obj其他的文件添加忽略。
關於
project.assets.json
的作用可以查看Jenkins持續集成學習-Windows環境進行.Net開發2
同時要把源代碼管理中的插件修改為Git
最后提交即可。
從Github更新代碼
在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
git上顯示構建狀態
在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種配置方式
- 手工模式
手工模式需要在git人工配置jenkins的webhook的通知接收地址,地址格式為$JENKINS_BASE_URL/Github-webhook/
,如:http://127.0.0.1:8080/Github-webhook/
。 - 自動模式
自動模式會通過Github的api自動創建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無法訪問進來。
Gitlab持續集成
由於在國內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
。具體步驟如下:
- 打開任務管理器或到windows服務中找到Jenkins,關閉Jenkins服務。
- 將Jenkins整個復制到
D:\Jenkins
。 - 去注冊表
計算機\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Jenkins
修改Jenkins服務路徑。為D:\Jenkins
。
4. 啟動Jenkins服務
Gitlab Hook Plugin
插件可能有個安全問題會提示警告。
通過上述步驟Gitlab Hook Plugin
插件就能安裝成功了
配置Gitlab賬號
在Jenkins系統設置中找到Gitlab的配置
鈎起Enable authentication for '/project' end-point
,這樣在Gitlab通知時需要身份驗證,保證安全性。
添加Token
到Gitlab
右上角的用戶頭像點擊右鍵找到Setting
然后找到Access Token
生成一個Token,只需要勾選api
權限即可。
添加憑據
將生成好的Token復制下來,回到Jenkins配置
添加一個憑據,選擇Gitlab API token
,使用剛才生成的token添加即可。
添加完成后測試連通性顯示Success
即可。
在Gitlab connections
我們需要增加如何連接Gitlab
,和Github一樣,我們需要增加一個token,用於授權Jenkins的訪問。
配置Git地址
修改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則表明觸發成功。
通知Gitlab狀態
在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 |
參考文檔
- 手把手教你搭建Jenkins+Github持續集成環境
- Webhooks Guide
- Understanding rate limits for Github Apps
- 使用Github的webhooks進行網站自動化部署
- Jenkins詳細實踐:SpringBoot+Jenkins+Gitlab+Docker-Maven插件
- Github Commit Status Setter - Cannot retrieve Git metadata
微信掃一掃二維碼關注訂閱號傑哥技術分享
本文地址:https://www.cnblogs.com/Jack-Blog/p/10346032.html
作者博客:傑哥很忙
歡迎轉載,請在明顯位置給出出處及鏈接