【过程改进】 windows下jenkins常见问题填坑
沒有什么高深的東西,1 2天的時(shí)間大多數(shù)人都能自己摸索出來,這里將自己遇到過的問題分享出來避免其他同學(xué)再一次挖坑.
目錄
1. 主從節(jié)點(diǎn)
2. Nuget自動(dòng)包還原
3. powershell部署
4. 內(nèi)網(wǎng)機(jī)器實(shí)現(xiàn)基于變化的構(gòu)建
5. Github私有項(xiàng)目pull時(shí)限
所謂主從,主要應(yīng)用的場景例如多種環(huán)境(windows/linux,.net/java/php)需要不同的構(gòu)建基礎(chǔ),而我們又不想都將一系列的步驟和環(huán)境混雜在一臺(tái)構(gòu)建服務(wù)器上,所以類似于go中的代理,jenkins也提供了slave節(jié)點(diǎn)的概念,大家可以把不同類別的項(xiàng)目的構(gòu)建部署在分類的節(jié)點(diǎn)服務(wù)器上。節(jié)點(diǎn)服務(wù)器不需要安裝完整的jenkins包,構(gòu)建事件的分發(fā)由master端來執(zhí)行。
這里需要注意的就是主從節(jié)點(diǎn)之間的通信,我這里選擇是將從節(jié)點(diǎn)以windows service的方式啟動(dòng),而我碰到的坑就是環(huán)境變量的配置問題,當(dāng)我在主從服務(wù)都安裝好jdk并且配置完環(huán)境變量后,發(fā)現(xiàn)啟動(dòng)從節(jié)點(diǎn)時(shí)還是怎么都找不到j(luò)dk,卡了半個(gè)小時(shí)才發(fā)現(xiàn)jenkins 從節(jié)點(diǎn)的環(huán)境變量是需要在web系統(tǒng)中配置的,此坑填平,后者慎入。
至于slave端的分配在構(gòu)建配置中
?
用.net開發(fā)的同學(xué)nuget應(yīng)該大多都涉及到,類似java的maven,神器之一,不多說。如果用visual studio開發(fā)這里會(huì)有一個(gè)選項(xiàng)
選中這里的話 會(huì)再在你rebuild項(xiàng)目的時(shí)候 自動(dòng)將丟失的包補(bǔ)齊,當(dāng)然僅限于公眾平臺(tái)上的內(nèi)容,如果是同學(xué)們自己開發(fā)的local版本的包還會(huì)遇到另外的問題,這里我們重點(diǎn)不計(jì)較這些。
回到j(luò)enkins上來因?yàn)閖enkins的構(gòu)建條件中目前還不支持直接使用.net的ide,所以我們需要安裝msbuild的插件
裝完以后構(gòu)建后發(fā)現(xiàn)編譯失敗,各種組件丟失。這里再填一坑,首先卸載我們的主要輸出項(xiàng)目,然后編輯項(xiàng)目屬性內(nèi)容,在最后加上一個(gè)節(jié)點(diǎn)配置
<Target Name="AfterBuild"><MSBuild Condition="'$(Configuration)|$(Platform)' == 'Release|x86'" Projects="NuGet\NuGet.msbuild" /></Target><Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />還原項(xiàng)目,這樣再使用msbuild命令就OK了。
powershell的使用場景可以這樣理解,在我們build通過一個(gè)項(xiàng)目后,我們需要將他部署在一臺(tái)測試服務(wù)器上,但是我們的數(shù)據(jù)庫配置需要修改,如何去除人工的干預(yù),這里就需要使用到powershell或者其他工具了。
powershell的使用你可以分為2種,一種是寫好ps腳本然后通過batch command中powershell命令來完成,另外一種是jenkins直接安裝powershell命令,這里更推薦后者,因?yàn)橛行r(shí)候你并沒有權(quán)限上服務(wù)器上修改腳本或者其他元素,所有后者更直觀簡單,簡單的數(shù)據(jù)庫連接修改腳本
$original_file = 'xx\web.config' $destination_file = 'xx\web.config' (Get-Content $original_file) | Foreach-Object {$_ -replace 'name="dbdemo" connectionstring=".+" ', 'name="dbdemo" connectionString="server=(local);database=basedemo;user id=demoUser;password=!@#qqq" providerName="System.Data.SqlClient" ' } | Set-Content $destination_file -encoding UTF8?
如果我們的master機(jī)器部署在內(nèi)網(wǎng),github通過hook的方式回調(diào)不到,那么我們就很難基于github項(xiàng)目的push動(dòng)作來進(jìn)行基于版本的即時(shí)構(gòu)建。怎么辦?這里可以使用一個(gè)取巧的辦法
在poll scm模式下選擇* * * * *,當(dāng)系統(tǒng)發(fā)現(xiàn)本地文件沒有變更時(shí),會(huì)忽略掉此次構(gòu)建。
github私有項(xiàng)目,主要也就是ssh授權(quán)的問題,這里的坑不是權(quán)限認(rèn)證問題,而是github插件的時(shí)限問題,默認(rèn)是10分鐘,由于某些項(xiàng)目可能資源比較大,第一次pull的時(shí)候耗費(fèi)時(shí)間比較長,但是控制臺(tái)提示一直停留在認(rèn)證那個(gè)階段,讓操作人員誤以為是認(rèn)證問題,這個(gè)估計(jì)也算個(gè)坑吧。填坑方法如下圖:
ok 簡單的填坑總結(jié)。有些問題雖然小但是一點(diǎn)一點(diǎn)排查總歸還是浪費(fèi)時(shí)間,希望對大家有幫助
轉(zhuǎn)載于:https://www.cnblogs.com/dubing/p/3628851.html
總結(jié)
以上是生活随笔為你收集整理的【过程改进】 windows下jenkins常见问题填坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通过配置的方式Autofac 《第三篇》
- 下一篇: 恢复xfs文件系统superblock实