沒有什么高深的東西,1 2天的時間大多數人都能自己摸索出來,這里將自己遇到過的問題分享出來避免其他同學再一次挖坑.
目錄
1. 主從節點
2. Nuget自動包還原
3. powershell部署
所謂主從,主要應用的場景例如多種環境(windows/linux,.net/java/php)需要不同的構建基礎,而我們又不想都將一系列的步驟和環境混雜在一台構建服務器上,所以類似於go中的代理,jenkins也提供了slave節點的概念,大家可以把不同類別的項目的構建部署在分類的節點服務器上。節點服務器不需要安裝完整的jenkins包,構建事件的分發由master端來執行。

這里需要注意的就是主從節點之間的通信,我這里選擇是將從節點以windows service的方式啟動,而我碰到的坑就是環境變量的配置問題,當我在主從服務都安裝好jdk並且配置完環境變量后,發現啟動從節點時還是怎么都找不到jdk,卡了半個小時才發現jenkins 從節點的環境變量是需要在web系統中配置的,此坑填平,后者慎入。

至於slave端的分配在構建配置中

用.net開發的同學nuget應該大多都涉及到,類似java的maven,神器之一,不多說。如果用visual studio開發這里會有一個選項

選中這里的話 會再在你rebuild項目的時候 自動將丟失的包補齊,當然僅限於公眾平台上的內容,如果是同學們自己開發的local版本的包還會遇到另外的問題,這里我們重點不計較這些。
回到jenkins上來因為jenkins的構建條件中目前還不支持直接使用.net的ide,所以我們需要安裝msbuild的插件

裝完以后構建后發現編譯失敗,各種組件丟失。這里再填一坑,首先卸載我們的主要輸出項目,然后編輯項目屬性內容,在最后加上一個節點配置
|
1
2
3
4
|
<
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')" />
|
還原項目,這樣再使用msbuild命令就OK了。
powershell的使用場景可以這樣理解,在我們build通過一個項目后,我們需要將他部署在一台測試服務器上,但是我們的數據庫配置需要修改,如何去除人工的干預,這里就需要使用到powershell或者其他工具了。
powershell的使用你可以分為2種,一種是寫好ps腳本然后通過batch command中powershell命令來完成,另外一種是jenkins直接安裝powershell命令,這里更推薦后者,因為有些時候你並沒有權限上服務器上修改腳本或者其他元素,所有后者更直觀簡單,簡單的數據庫連接修改腳本
|
1
2
3
4
5
|
$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機器部署在內網,github通過hook的方式回調不到,那么我們就很難基於github項目的push動作來進行基於版本的即時構建。怎么辦?這里可以使用一個取巧的辦法

在poll scm模式下選擇* * * * *,當系統發現本地文件沒有變更時,會忽略掉此次構建。
github私有項目,主要也就是ssh授權的問題,這里的坑不是權限認證問題,而是github插件的時限問題,默認是10分鍾,由於某些項目可能資源比較大,第一次pull的時候耗費時間比較長,但是控制台提示一直停留在認證那個階段,讓操作人員誤以為是認證問題,這個估計也算個坑吧。填坑方法如下圖:

ok 簡單的填坑總結。有些問題雖然小但是一點一點排查總歸還是浪費時間,希望對大家有幫助


原創作品允許轉載,轉載時請務必以超鏈接形式標明文章原始出處以及作者信息。