沒有什麼高深的東西,1 2天的時間大多數人都能本身摸索出來,這裏將本身遇到過的問題分享出來避免其餘同窗再一次挖坑.php
目錄html
1. 主從節點java
2. Nuget自動包還原linux
3. powershell部署git
4. 內網機器實現基於變化的構建github
5. Github私有項目pull時限web
所謂主從,主要應用的場景例如多種環境(windows/linux,.net/java/php)須要不一樣的構建基礎,而咱們又不想都將一系列的步驟和環境混雜在一臺構建服務器上,因此相似於go中的代理,jenkins也提供了slave節點的概念,你們能夠把不一樣類別的項目的構建部署在分類的節點服務器上。節點服務器不須要安裝完整的jenkins包,構建事件的分發由master端來執行。shell
這裏須要注意的就是主從節點之間的通訊,我這裏選擇是將從節點以windows service的方式啓動,而我碰到的坑就是環境變量的配置問題,當我在主從服務都安裝好jdk而且配置完環境變量後,發現啓動從節點時仍是怎麼都找不到jdk,卡了半個小時才發現jenkins 從節點的環境變量是須要在web系統中配置的,此坑填平,後者慎入。數據庫
至於slave端的分配在構建配置中windows
用.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 簡單的填坑總結。有些問題雖然小可是一點一點排查總歸仍是浪費時間,但願對你們有幫助