[CI&CD]jenkins自動化工具使用教程


 

    自動化構建、測試、部署、代碼檢測越來越重要。主要有一下幾點原因

1.  企業做大,項目變多,多端支持(webh5,小程序等)

2.  微服務提倡高內聚低耦合,項目因拆分變多

3.  DevOps自動化運維流行

4.  集群化,高可用部署方案

5.  避免人工操作出現的錯誤

6.  集成管理系統,實現提交發布、發布審批、發布等UI可視化操作

    等等原因,學習使用jenkins實現自動化作業非常有必要。這是我學習過程中整理的資料,分享給大家。

    歡迎向我推薦更好的資料和討論關於jenkins的問題。

 

目錄

一、       安裝

1)       Jenkins安裝插件因網絡問題報錯處理方案

2)       如何將Jenkins集成到其他系統... 3

二、       常見設置... 3

本節介紹jenkins常見設置,如中文、job變量使用、查看job歷史執行變量、定時構建、清理歷史構建等

三、       常用工具cli

. 4

本節介紹:git、腳本(shell、bat、powershell),xcopy、7zip等工具

四、       安全設置... 5

本節介紹jenkins安全設置,用戶權限管理

... 5

五、       Dotnet 程序編譯發布

六、       高可用... 7

本節介紹:jenkins master 高可用設計方案、jenkins配置備份、配置變更歷史、站點應用備份回滾、監控方案

七、       文件傳輸

... 7

本節介紹:多服務器之間傳輸文件的方式,如:第三方rsync同步工具,publish over ssh插件,publish over ftp插件,copyArtifact插件,Copy DataTo Workspace插件等

八、       分布式構建... 9

1)       master-slave. 9

2)       多job串行、並行... 9

3)       pipeline. 9

4)       觸發JENKINS遠程構建

5)       ssh方案

... 9

九、       自動化測試... 10

十、       優化設置... 10

1)       設置友好的構建記錄名字、構建描述內容

2)       視圖管理、執行大屏顯示、任務執行狀態顏色控制... 11

3)       日志大小的問題... 11

4)       job並發構建... 11

十一、       其他插件... 11

本節介紹:多環境配置插件、參數化擴展、通知(email,釘釘)、job文件夾組織插件(floders plugins)等

十二、       解決方案與案例

... 12

案例包含:dotnet,dotnet core、docker,ios\android app、nodejs項目(webpack) 

 

一、    安裝

Jenkins 是基於Java開發的一種可視化持續集成工具,將流水式的操作實現自動化。常用於自動化構建、自動化集成、自動化測試、自動化交付等

官方下載:https://jenkins.io/download/

 

安裝Jenkins

怎么在jenkins面板上面升級

Jenkins在url中關閉和重啟(exit,restart,reload)

 

主題美化

    Jenkins theme 生成定制主題css

    jenkins-material-theme

1)Jenkins安裝插件因網絡問題報錯處理方案(卡在setupWizard)

Jenkins鏡像地址改為國內鏡像地址:系統管理>>管理插件>>高級 菜單下將'升級站點'中的URL設為http://mirror.xmission.com/jenkins/updates/current/update-center.json   保存並且重啟jenkins服務

linux:進入到Jenkins的工作目錄/var/lib/jenkins/修改hudson.model.UpdateCenter.xml文件。將http://updates.jenkins-ci.org/update-center.json修改為http://mirror.xmission.com/jenkins/updates/update-center.json,再重啟jenkins

 

2)如何將Jenkins集成到其他系統

Jenkins常見REST API(將Jenkins集成到其他系統)

使用shell腳本curl調用jenkins進行構建並判斷是否構建成功

windows安裝curl工具使用

在windows bat中可執行的命令  curl -X POST http://IP:8080/job/auto-publish-folder/job/job-name/buildWithParameters --user admin:admin -d p_app_key=Api

二、    常見設置

Jenkins 英文切換成中文(Locale插件

Jenkins 中文亂碼

      解決jenkins控制台中文亂碼問題

            jenkins解決日志打印亂碼問題

      環境變量、腳本變量使用

      Jenkins可用環境變量列表以及環境變量的使用(Shell/Command/Maven/Ant

      [Jenkins]傳遞自定義變量:job內部步驟傳遞& job之間傳遞

      Jenkins 環境變量管理(全局環境變量< Slave 配置環境變量< Job 參數< Job injected 環境變量)

      Environment Injector 插件(EnvInject):添加的環境變量,只有這個job的構建過程中可見,其他jobs的構建不可見

系統環境:系統環境變量變了后,jenkins腳本工具無法立刻加載最新的。比如powershell 使用 dir env: 命令可以打印當前加載到的系統環境變量,不是最新的可以重啟jenkins

 

查看job執行時的歷史環境變量方法:當前job執行記錄 控制台輸出 - Environment Variables

去掉jenkins的首頁告警信息(eg:插件更新信息)

定時構建

        Jenkins 定時構建語法規則

        Jenkins設置定時任務未生效

        Jenkins job未按設置的時間執行

Jenkins自動丟棄構建歷史數據(釋放空間)

Jenkins修改Job工作空間、修改日志路徑(比如git下載到指定目錄)

Jenkins重置build序號

三、    常用工具cli

1)   git

Failed to connect to repository:Error performing command:git.exe ls-remote-h

jenkins git拉取代碼

jenkins 同時拉取多個git倉庫(插件:multiple-scms

jenkins選擇分支構建(插件:git Parameters

Jenkins持續集成:git commit 自動觸發構建

2)   腳本

a)shell

Shell 腳本常用命令

      ( 一般以.sh為文件后綴,腳本開頭必須是  #!/bin/bash )

b)windows bat

bat教程

批處理FOR參數/Ftokens詳解

遍歷文件夾&字符串處理 

baterrorlevel%errorlevel%的區別

iis7 appcmd命令:操作站點start|stop,操作應用程序池start|stop|recycle(回收)

    c)powershell

powershell 中是不區分大小寫的(但是linux區分,所以區分大小寫是好習慣)

微軟宣布PowerShell 7 Linux/macOS/Windows全平台兼容

linux上安裝和使用powershell

PowerShell 腳本的后綴名為什么叫PS1

跨平台PowerShell如何遠程管理Linux/Mac/Windows?

語法

      Windows PowerShell基本語法及常用命令

      [MSDN]PowerShell API文檔

      傳遞枚舉的案例:$_.Split('  ',[System.StringSplitOptions]::RemoveEmptyEntries)

      Powershell代碼中調用Jenkins的變量

      jenkins 控制台輸出powershell執行代碼行(Set-PSDebug -Trace 1)

      Powershell在字符串中使用變量

      Powershell定義多行文本

      PowerShell~文件操作和對象遍歷

      Powershell從獨立ps1文件中加載函數

      PowerShell中給函數參數設置幫助信息

      PowerShell函數參數設置為即可選又必選的方法

 

JSON

      PowerShell讀取JSON配置文件

      PowerShell分析Json文件?(注意評論區)

發布

      利用PowerShell+Jenkins,實現項目的自動化部署

      Powershell遠程管理Windows Server(WinRM)相關安全配置,否則服務器會拒絕遠程管理

其他

      Sample all PowerShell Console Colors

      powershell 輸出信息到文件

      PowerShell中使用Test-Path命令檢查文件或文件夾路徑是否存在示例

異常

      在jenkins中處理外部命令7z的異常

            1) try…catch…

            2) echo $LASTEXITCODE。一般命令正確執行返回0,失敗返回非0值。

 

3)   xcopy

Xcopy命令參數使用介紹

XCopy排除復制/EXCLUDE的用法

eg:xcopy D:\Source D:\Dest  /e/i/y/d

    /D:m-d-y 復制在指定日期或指定日期以后改變的文件。如果沒有提供日期,只復制那些源時間比目標時間新的文件。

4)   7zip7z

7zipdos命令行用法總結

四、    安全設置

jenkins全局安全設置

用戶權限管理

      自帶的權限管理

      Jenkins權限控制插件Role-based Authorization Strategy

      Jenkins - Jenkins 修改用戶密碼

      忘記Jenkins管理員密碼的解決辦法

五、    Dotnet 程序編譯發布

1)環境准備

使用vs安裝包,安裝組件:roslynmsbuildwebdeploy、對應版本的.net frameworknuget

 

這樣安裝后,編譯時依然可能出現環境問題。比如:dll不存在等等

解決辦法:打包開發環境msbuild目錄拷貝到服務器上。( eg:打包 C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild 目錄)

 

 

2)Msbuild插件 + webdeploy

Git + msbuild插件 + webdeploy

3)使用msbuild命令行

MSBuild 命令行編譯項目且不包含pdb文件

 

vs2017案例(自行下載vs2017的msbuild,每個版本的msbuild支持的參數有差異)

windows bat 命令:

"***\2017\Professional\MSBuild\15.0\Bin\msbuild.exe" /toolsversion:15.0 /t:Rebuild  /p:DeployOnBuild=true /p:Configuration=Release /p:DebugType=none /p:ExcludeGeneratedDebugSymbol=true /p:PublishProfile=D:\DevOps\jenkins_ex\Common\Config\jenkins_profile.pubxml /p:publishUrl=D:\DevOps\jenkins_ex\Build\Prod\***\Attach\File /p:VisualStudioVersion=15.0 /p:TargetFrameworkVersion=v4.6.1 D:\DevOps\jenkins_ex\Source\Prod\***\Attach.csproj

 

powershell 命令:

$msbuild_tool = "C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Professional\\MSBuild\\15.0\\Bin\\msbuild.exe"
$ms_project_path = "***\\Lks.Git.P\\Web\\Lks.Platform\\Lks.Platform.csproj"
$ms_args_solution_dir = "/p:SolutionDir=***\\c-publish-pull-code\\"
$ms_args_publish_profile = "/p:PublishProfile=C:\\jenkins-ex\\common\\config\\build\\jenkins_profile.pubxml"
$ms_args_publish_dir = "/p:publishUrl=C:\\jenkins-ex\\publish\\build\\LKS.4.0\\Platform\\File\\"
&$msbuild_tool $ms_project_path /toolsversion:15.0 /t:Rebuild /p:DeployOnBuild=true /p:Configuration=Release /p:DebugType=none /p:ExcludeGeneratedDebugSymbol=true /p:VisualStudioVersion=15.0 /p:TargetFrameworkVersion=v4.6.1 $ms_args_publish_profile $ms_args_publish_dir $ms_args_solution_dir

 

jenkins_profile.pubxml內容如下

        <PropertyGroup>

            <WebPublishMethod>FileSystem</WebPublishMethod>

            <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>

            <LastUsedPlatform>Any CPU</LastUsedPlatform>

            <SiteUrlToLaunchAfterPublish />

            <LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>

            <ExcludeApp_Data>False</ExcludeApp_Data>

            <DeleteExistingFiles>True</DeleteExistingFiles>

        </PropertyGroup>

 

Rebuild

重新生成並生成到OutputPath

OutputPath

不結合Web Deploy工具,編譯輸出的dll路徑

WebProjectOutputDir

不結合Web Deploy工具,web文件(jscsscshtml等)的輸出目錄

toolsversion

根據.csproj里面的值進行設置。15.0對應vs2017msbuild

DeployOnBuild

 

true表示啟用編譯並發布

Configuration

發布模式Debug Release

DebugType

none,表示當前項目不生成pdb文件

ExcludeGeneratedDebugSymbol

true,表示當前項目和引用項目都不生成pdb文件

PublishProfile

結合Web Deploy工具進行發布。

publishUrl

指定發布文件生成的目錄

VisualStudioVersion

Vs版本   15.0 對應vs2017

TargetFrameworkVersion

Vs中右鍵.csproj,查看項目屬性里的.NET版本

 

     3)dotnet core 發布命令

            dotnet restore

            dotnet publish

 

六、    高可用

   jenkins:job配置信息變更歷史記錄(Job Configuration History 插件)

   jenkins配置備份、還原

           使用thinbackup插件進行備份、還原

        手動備份、還原

        備份JENKINS_HOME下的所有文件和文件夾,恢復的時候先停止jenkins服務。

        (JENKINS_HOME  jenkins > 系統管理 > 系統配置> 主目錄的值)

使用SCM Sync configuration 插件備份到github上

   站點應用備份

Jenkins實現生產環境部署文件的回滾操作(Windows

jenkins:一鍵回滾站點集群

   jenkins master 高可用設計方案

          Jenkins Pipeline 高可用設計方法(值得深入研究

          Jenkins分布式集群設計方案

          jenkins雙向備份;高可用部署;

          Jenkins高可用方案匯總

   jenkins系列之監控(monitoring插件)

七、    文件傳輸

1)   Rsync同步工具

Rsync 是一個通過檢查文件的時間戳和大小,來跨計算機系統高效地“差異”傳輸和同步文件的工具

第一次同步時rsync 會復制全部內容(首次復制時沒有壓縮包快),但在下一次只傳輸“修改過”的文件。

Rsync服務端配置

基礎cli命令

-u, --update 僅僅進行更新,即跳過所有DST中更加新的文件

rsync命令排除文件和文件夾(exclude-from)

rsync 自動創建目錄的坑點(只支持創建一層目錄)

權限問題

(1)  rsync客戶端下載文件,文件權限會加入運行 rsync客戶端命令 的賬戶

(2)  上傳文件到rsync服務端,文件權限會加入運行 rsync服務端服務 的賬戶

服務端密碼文件權限問題:rsync4.10 自帶的(chmod.exe+chown.exe)

windows下批量修改文件(或文件夾)權限或所有者(icacls命令)

 

路徑問題:

   Cygwin 命令及常用設置的筆記

                  Cygpath命令可以實現windows平台和Linux的目錄名轉換。
                  例:cygpath –u C:\\windows
                         /cygdrive/c/windows
                  安裝:安裝Cygwin時,會一起安裝Cygpath工具

                  Windows下Cygwin安裝使用教程

2)  Publish over SSH 插件

Jenkins使用shell腳本部署到遠程服務器步驟

解決SSH: Transferred 0 file(s)

3)  Publish Over FTP 插件

publish over ftp 使用方法

JenkinsFTP上傳插件Publish Over FTP Plugin設置支持中文路徑

4)  CopyArtifact插件

把某個job的構建物拷貝到當前job的工作區

5)   Copy Data To Workspace插件

文件從master復制到slave

 

其他

     使用powershell遠程傳輸文件

八、    分布式構建

1)master-slave

Jenkins設置Master/Slave

(提示:規划好從slave節點遠程工作目錄,比如目錄名為:jenkins_slave

Slave配置節點中沒有Launch agent via Java Web Start

(勾選Java Web Start Agent Protocol/4 (TLS 加密)。安裝和舊協議步驟一樣。新版本這樣操作后依然沒有Java Web Start。那么直接使用 "Launch agent by connecting it to the master")

安裝slave-agent.jnlp時,在安裝為windows服務時出現"Access Denied"權限問題,解決方案傳送門

運行slave-agent.jnlp需安裝java jre1.81或以上版本,下載傳送門

 

   jenkins 的節點怎么使用變量(插件:Node and label parameter)--動態節點

   linux jenkins master上管理windows jenkins slave

   Jenkins配置linux slave機器 

2)job串行、並行

Jenkins上下游jobs設置(並行、串行)-- multijob 插件

(使用multijob 插件master slave 節點 的“執行者數量”設置多些,否則子job過多,就沒法並發而互相卡死)

3)pipeline

Jenkins Pipeline 純腳本,效率高。相對jenkins UI,入門門檻高,配置可讀性差,維護難。使用multijob插件,可視化UI配置更加簡單易用。Multijob 中包含的獨立job,不能是pipe類型

Jenkins Pipeline的總體介紹

Jenkins pipelinepipeline 使用之語法詳解

Jenkins pipeline 並行執行任務流

Jenkins Pipeline插件十大最佳實踐

Jenkins2 插件 Pipeline+BlueOcean 實現持續交付的初次演練

Jenkins執行GitHub上的pipeline腳本

4)觸發JENKINS遠程構建

方式一:插件Parameterized Remote Trigger

1.  username+job token方案

2.  Credentials Authentication方案

(設置了系統憑證觸發不了遠程job。那么改為全局憑證

(優化:單獨設置一個執行遠程job的賬戶,權限可控性高,日志里能查執行者)

方式二:HTTP URL 觸發JENKINS遠程構建

匿名方案

User API Token方案

     5)ssh方式

基於win32-openssh搭建jenkins混合集群

Powershell中安裝SSH模塊,使用ssh命令

九、    自動化測試

Jenkins之插件Publish HTML reports的使用

Jenkins – Unit Testing(單元測試)

基於Jenkins設計自動化測試工作流

Postman+Newman+jenkins實現API自動化測試

Jenkins + Jmeter 構建接口、性能測試

Jenkins自動化測試(Selenium

sonarqube與dotnetcore

    SonarQube系列一、Linux安裝與部署

    SonarQube系列二、分析dotnet core/C#代碼

    SonarQube系列三、Jenkins集成SonarQube(dotnetcore篇)

十、    優化設置

1)設置友好的構建記錄名字、構建描述內容

使用user build vars 插件獲取jenkins用戶相關變量

      (注意需要勾選"Set jenkins user build variables."

自定義build name build-name-setter + user build vars

      #${BUILD_NUMBER}-${ENV,var="BUILD_USER"}

      直接使用 ${BUILD_USER} 也可以取到名字,但是會提示Unrecognized macro 'BUILD_USER',可以忽略

使用Jenkins搭建APP持續集成,並展現二維碼

      使用description setter 插件設置構建描述(eg:重要參數顯示、APP二維碼等)

 

2)視圖管理、執行大屏顯示、任務執行狀態顏色控制

1、Jenkins 利用Dashboard View插件管理任務視圖 

2、jenkins視圖插件build monitor view

3、插件名:Green Balls。使用綠色代替默認的藍色表示任務運行成功的狀態

3)日志大小的問題

Jenkins日志文件過大解決方案

jenkins 修改log路徑(僅linux

Avoid large log Jenkins file (and stop build if needed)

    (安裝 Logfilesizechecker 插件和 build timeout 插件並在系統設置里面設置閾值)

jenkins 日志爆滿DNS查詢錯誤

4)job並發構建

必要時,job並發構建

十一、    其他插件

提示:不使用的插件可以自行卸載掉,因為插件多了經常會提示你更新

 

多環境多配置插件(舊名:multi-configuration)

job參數化擴展:extended choice parameter (單選,多選,讀取文件中的選項)

jenkins插件build timeout和build timestamp

Email通知功能

jenkins配置自動發送郵件(插件:Email Extension

Jenkins自動發送郵件配置及定時構建

使用email-ext替換Jenkins的默認郵件通知

Jenkins上配置郵件通知模板案例

    提示:將模板文件放到$JENKINS_HOME/email-templates目錄下,如果沒有這個目錄,自己創建該目錄。

     釘釘通知

            運維利器:釘釘機器人腳本告警(Linux Shell 篇)

            持續集成之釘釘通知插件

     Folders Plugin插件:允許將job組織成有層次的文件夾(支持權限管理)

            jenkins 的 folders plugin 是做什么用的?

            organize jobs in hierarchical folders

 

十二、    解決方案與案例

    Dotnet應用

jenkins部署.net平台自動化構建的方法步驟

jenkins+donet core持續集成環境搭建

Centos7+Docker+Jenkins+ASP.NET Core 2.0自動化發布與部署的實現

IOS\Android APP應用

使用Jenkins搭建iOS/Android持續集成打包平台

nodejs項目(webpack打包)

Jenkins打包NodeJS項目

Docker

      大體結構

基於Jenkins,docker實現自動化部署(持續交互)

Jenkins 結合 Docker 為 .NET Core 項目實現低配版的 CI&CD

 

 

       Jenkins X 相關文章:

     Jenkins X 是一個高度集成化的CI/CD平台,基於Jenkins和Kubernetes實現,旨在解決微服務體系架構下的雲原生應用的持續交付的問題,簡化整個雲原生應用的開發、運行和部署過程。

            Jenkins X實踐系列(1) —— 背景知識

            Jenkins X實踐系列(2) —— 基於jx的DevOps實踐

 

      CICD 架構實踐

            Jenkins多環境持續集成架構實踐

 

 

     ===================================================

    over。資料很多,足夠你從入門到放棄。

    歡迎向我推薦更好的資料和討論關於jenkins的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM