Jenkins構建流程

Jenkins是DevOps【(Development和Operations的混成詞)是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例)】的重要一環,是一款開源的CI&CD軟件。也就是持續集成和持續交付。

Jenkins支持運行各種運行方式,無論是跑在macos、windows、linus或者docker等容器中,初始配置也都大同小異。所以這我這里主要介紹windows系統下直接跑一個安裝包的流程。

1、java環境必備。

java版本要大于等于11,低版本的很多插件都不支持。目前而言,裝個java11就夠了。

2、jenkins安裝

首先下載 Jenkins 通用 Java 包 (.war) (下載lts穩定版本)Download and deploy

雖然 Jenkins 服務不在 C 盤運行,但默認情況下,Jenkins 的工作空間、插件、日志等數據還是會存儲在 %USERPROFILE%\.jenkins(通常位于 C 盤用戶目錄下)。為了將這些數據也遷移到非 C 盤,您需要配置 Jenkins 的 JENKINS_HOME 環境變量。在jenkins的Java包目錄下打開命令行,執行

set JENKINS_HOME=E:\Jenkins\data (可選,配置jenkins工作空間目錄)

java -jar jenkins.war --httpPort=8080 (啟動jenkins)

正常情況下只要java安裝是正常的,就不會報錯。如果報錯,檢查你的java -version。

3、解鎖jenkins

瀏覽至http://localhost:8080 (這里的8080對應上邊的httpPort的字段,如果你8080端口被占用了,是可以寫其他的端口號的)

這時候會讓你輸入密碼,并且會告訴你密碼的位置。

添加圖片注釋,不超過 140 字(可選)

輸入密碼確認后會讓你安裝插件,可以根據自己需要安裝。

如果插件安裝報錯,也無需在意,多半是ssl/tls證書導致的插件下載失敗,直接繼續就好了。后邊會講解遇到這種問題怎么處理。

也可以直接點擊右上角關閉,就會提示你跳過了插件安裝和管理員用戶添加。

添加圖片注釋,不超過 140 字(可選)

點擊開始使用,你的jenkins就配置好了。

添加圖片注釋,不超過 140 字(可選)

4、管理員用戶

由于上一步我們跳過了管理員用戶,所以現在我們登錄默認的賬戶名為 admin,密碼是你剛才解鎖jenkins那個長長的密碼。如果嫌棄麻煩,就可以在左上角的people->admin->configure中重新配置用戶名和密碼。

添加圖片注釋,不超過 140 字(可選)

5、插件安裝。

jenkins很多功能都是需要插件的,jenkins有自己的插件管理器。就在面板的左上角Manager Jenkins->plugins下。

添加圖片注釋,不超過 140 字(可選)

我們可以嘗試安裝一個插件,看是否能成功。

插件安裝可能會因為網絡問題報錯,但大概率你會應為證書問題報錯。下圖就代表證書問題

添加圖片注釋,不超過 140 字(可選)

如果是證書的問題,那么我們可以直接裝一個跳過證書驗證的插件。但此時我們又無法下載插件,這時候我們可以直接去jenkins的插件官網下載一個,然后導入。(當然如果你不喜歡安裝跳過證書驗證的插件,也可以自行找到這個網站的證書,將其添加到信任庫,具體操作可自行搜索)

插件官網地址:Index of /download/plugins

通過全局搜索,ctrl+f 搜一下skip關鍵字,應該就能找到我們需要的插件。

添加圖片注釋,不超過 140 字(可選)

點擊下載最新版本。會得到一個.hpi文件。

在插件Advanced settings中找到導入插件,將下載的插件導入進去,就可以了。

添加圖片注釋,不超過 140 字(可選)

插件安裝后重啟一下jenkins,應該就可以下載插件了。

推薦兩個必裝插件 : Pileline(這也是我們要用的核心插件) Script Security

Script Security:如果打包因為沒有移動文件夾目錄的權限,可以安裝這個插件。

Pileline:Jenkins Pipeline(或簡稱“Pipeline”,大寫“P”)是一套插件,支持在 Jenkins 中實施和集成持續交付管道。

根據自己的需求安裝插件。

安裝插件的時候,往往很多時候插件都是互相依賴的,如果某個插件不能啟用,要看看是不是其他插件未安裝引起的。最好是在安裝完所有的插件確認全部都能啟用之后,再重啟jenkins打包構建實例。

插件如果有新的安裝,記得重啟Jenkins。不然自己寫好流水線命令一運行,Jenkins連git都不認識。

6、創建項目

環境搭建好了之后,就可以新建項目了,從主頁右上角點擊 NewItem,選擇pipeline創建一個HelloWorld項目。

添加圖片注釋,不超過 140 字(可選)

項目配置:點擊確認后就會進入項目配置界面,這里可以暫時都先不用管。只先寫一個描述。滾動到流水線配置哪里,選一個Hello World的模板。

添加圖片注釋,不超過 140 字(可選)

保存之后點擊左邊的 Build Now。就完成了第一個項目的構建。

點擊構建后的工程,可以看到詳細進程。如果打包出了問題,也是在這里查找定位。

添加圖片注釋,不超過 140 字(可選)

日常的項目需求,必然不會只讓你輸出一個helloworld。但我們一旦搭建好這個環境,流水線語法可以根據自己的項目去配置。例如是as工程,可以使用as的gradle語法去打包,也有相對應的插件。或者使用maven,ant等。

整體的流程代碼基本上就是這個結構。

添加圖片注釋,不超過 140 字(可選)

agent any 在 Jenkins Pipeline 的自動化框架中,用于指示一個 Pipeline 階段或任務可以在任意可用的執行環境中運行。如果你有用到分布式構建限定當前工程的代理,這里可以修改為其他的例如agent {label 'tag'},代表只能限定在標簽為tag的代理上打包。

environment表示可以使用的全局環境變量

parameters表示可選參數,也對應配置選項中的This project is parameterized,通常用于打包時傳入一些可選參數。

stages代表是很多stages。

添加圖片注釋,不超過 140 字(可選)

還有一些花里胡哨的插件,例如 Qy Wechat Notifcation這種,可以在構建成功或者失敗的時候給自己的企業微信發個消息之類。在stages后加一個post。就可以通過自己的群機器人進行推送了。

添加圖片注釋,不超過 140 字(可選)

7、分布式構建

目前我們上邊講的,都是跑在內置節點的,但是你的jenkins會給你發出警告,告訴你跑在內置節點是不安全的,推薦你設置分布式構建。具體為什么要設置分布式構建,可以看看jenkins給出的理由(Controller Isolation),總之就是關于安全,穩定之類一些的考量。

添加圖片注釋,不超過 140 字(可選)

當前跑在內置節點,是這樣的執行模式

添加圖片注釋,不超過 140 字(可選)

jenkins是支持分布式架構,分布式架構的模式是這樣的

添加圖片注釋,不超過 140 字(可選)

其實就是把內置節點當成一個管理,每次有任務都由它來進行分配,如果沒有空閑的代理,就先掛起在隊列中。

那怎么配置分布式構建呢?

為了不讓內置節點執行任務,我們可以設置內置節點的執行者為0。(當然如果你想要在沒有空閑的可執行節點時,使用內置節點構建,也可以不設置為0)

進入Manager Jenkins ->Nodes,點擊built-in Node

添加圖片注釋,不超過 140 字(可選)

再點擊配置,將執行者設為0

添加圖片注釋,不超過 140 字(可選)

這個時候我們執行剛才的helloworld項目,你的項目就會掛在隊列里,不會執行。

添加圖片注釋,不超過 140 字(可選)

此時需要新建一些節點,這些節點其實就是一個個代理。接受jenkins分配過來的構建任務。

添加圖片注釋,不超過 140 字(可選)

添加圖片注釋,不超過 140 字(可選)

點擊create,執行者數量設為>=1,畢竟為0你這個節點就沒什么意義了。配置可以根據自己實際情況填寫,需要注意的是label的配置,這里的字段就是你的代理名,上文說的使用 agent{label 'tag'}中的tag就是你這里配置的label,限定了工程只能在label=tag的代理上運行。這個的好處就是,你可以設置多個不同的代理,但每個代理只執行自己的工程。例如多平臺發布互不影響這樣子。

此時,你已經有了一個正常的jenkins構建環境了,配置好后,測試就可以自己出包進行測試了。當然它的功能也是很強大的,可以根據自己的需要深入研究,為自己的項目量身定制。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/12167.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/12167.shtml
英文地址,請注明出處:http://en.pswp.cn/web/12167.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

汽車行業軟件開發V 模型與醫療行業異同,與傳統瀑布開發模型區別

軟件開發在汽車和醫療行業 V 模型的異同 V 模型是一種軟件開發過程中的驗證和確認模型,它被用來表示軟件開發的各個階段和它們的驗證/ 確認活動。 在汽車和醫療行業中,V模型的使用有一些相似之處,但也有一些不同之處。 相同之處: 都使用V 模…

【LeetCode】【滑動窗口】【雙指針】長度最小的子數組

題目:209. 長度最小的子數組 - 力扣(LeetCode) 給定一個含有 n 個正整數的數組和一個正整數 target 。找出該數組中滿足其總和大于等于 target 的長度最小的 連續子數組 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其長度。如…

【Viso畫圖】Viso導出與圖形適配的pdf

step1:選中開發工具點擊shapeSheet,選中頁 step2:進入頁面參數設置窗口,將下面框選的參數設為0,enter后保存 目前效果: step3:選中設計->大小,選擇適應頁面大小或者自己根據圖片調整 目前效果: step4: 以…

【C++】priority_queues(優先級隊列)和反向迭代器適配器的實現

目錄 一、 priority_queue1.priority_queue的介紹2.priority_queue的使用2.1、接口使用說明2.2、優先級隊列的使用樣例 3.priority_queue的底層實現3.1、庫里面關于priority_queue的定義3.2、仿函數1.什么是仿函數?2.仿函數樣例 3.3、實現優先級隊列1. 1.0版本的實現…

android自定義view仿微信聯系人列表

說明:最近碰到一個需求,弄一個類似國家或省份列表,樣式參照微信聯系人 文件列表: step1:主界面 加載列表數據~\app\src\main\java\com\example\iosdialogdemo\MainActivity.java step2:右側列表數據排序~\app\src\com\example\io…

hive自定義udtf函數

udtf,一個輸入,對應多個輸出,實現流程如下 1、繼承genericUDF 2、在initialize中做初始化工作,例如定義輸出的數據格式 3、在process中實現具體的邏輯 參考鏈接 https://blog.csdn.net/qq_34321590/article/details/127412147…

6. 第K小的和-二分

6.第K小的和 - 藍橋云課 (lanqiao.cn) #include <bits/stdc.h> #define int long long #define endl \n using namespace std; int n,m,k,an[100005],bm[100005]; int check(int x){int res0;//序列C中<x的數的個數for(int i0;i<n;i){//遍歷數組A&#xff0c;對于每…

Vue學習v-if與v-else-if

Vue學習v-if與v-else-if 一、前言1、v-if2、v-else-if3、v-else4、示例 一、前言 v-if 和 v-else-if 是 Vue.js 中用于條件渲染的指令&#xff0c;它們通常與 v-else 一起使用。下面我來詳細解釋一下它們的用法和區別&#xff1a; 1、v-if 用法&#xff1a;v-if 是一個指令&…

神級框架!!不要再封裝各種 Util 工具類了【送源碼】

這個工具類就比較厲害了&#xff0c;不過我在 Halo 當中用得最多的還是 HtmlUtil.encode&#xff0c;可以將一些字符轉化為安全字符&#xff0c;防止 xss 注入和 SQL 注入&#xff0c;比如下面的評論提交。 comment.setCommentAuthor(HtmlUtil.encode(comment.getCommentAutho…

Go 面向對象OOP思想

Go語言不是面向對象的語言&#xff0c;只是可以采用面向對象的思維通過一些方法來模擬面向對象。面向對象思維核心就三個點&#xff1a;封裝、繼承、多態 GO語言和傳統的面向對象編程有所區別&#xff0c;并不是純粹的面向對象語言。比如C,Java的面向對象都是基于類的&#xff…

匯聚榮科技:拼多多開店沒有流量應該怎么辦?

拼多多開店沒有流量是一個常見的問題&#xff0c;許多新手商家都會遇到這樣的困境。那么&#xff0c;如何解決這個問題呢?下面從四個方面進行詳細闡述。 一、優化店鋪和商品 首先&#xff0c;要確保店鋪和商品的質量。店鋪要有自己獨特的風格和特色&#xff0c;商品要有高質量…

Allegro如何輸出各層PCB視圖的PDF文件

如何輸出各層PCB視圖的PDF文件 1、說明 用Allegro設計好PCB后&#xff0c;有時需要出各層的PDF文檔出來進行匯報和展示&#xff0c;這時就需要將各層的平面視圖全部以PDF的形式加載出來&#xff0c;具體方法如下。 2、PDF文件的輸出方法&#xff08;以四層板為例&#xff09; …

原子學習筆記7——FrameBuffer 應用編程

Frame 是幀的意思&#xff0c;buffer 是緩沖的意思&#xff0c;所以 Framebuffer 就是幀緩沖&#xff0c;這意味著 Framebuffer 就是一塊內存&#xff0c;里面保存著一幀圖像。 應用程序通過對 LCD 設備節點/dev/fb0&#xff08;假設 LCD 對應的設備節點是/dev/fb0&#xff09;…

css如何實現邊框模糊的效果

其實并不難&#xff0c;用屬性 filter: blur(數字px); 即可。效果如下&#xff1a; 圖上的圓形內有色彩的漸變&#xff0c;同樣也是用filter: blur(數字px); 實現的&#xff0c;代碼如下&#xff1a;、 <template><div id"root" :style"{}">…

ros鍵盤控制程序teleop_twist_keyboard 鍵值含義及用法

在機器人仿真中&#xff0c; 經常會用到鍵盤控制程序teleop_twist_keyboard 對機器人進行控制。但是對各個鍵值是何種含義&#xff0c; 如何操作并沒有任何資料介紹,初次使用時會不知所措。 通過實踐&#xff0c; 發現各個鍵值的作用如下&#xff1a; u-- 向左前方前進 i-- 直…

RIP動態路由協議詳解

目錄 一&#xff1a;RIP協議的基本信息 二&#xff1a;RIP協議中的更新方式 三&#xff1a;RIP協議中的計時器 定時更新器&#xff08;UPDATE timer&#xff09; 無效定時器&#xff08;invalid Timer&#xff09; 垃圾收集定時器&#xff08;garbage collection timer&a…

第五課,輸入函數、布爾類型、比較運算和if判斷

一&#xff0c;輸入函數input() 與輸出函數print()相對應的&#xff0c;是輸入函數input()&#xff0c;前者是把程序中的數據展示給外界&#xff08;比如電腦屏幕上&#xff09;&#xff0c;而后者是把外界&#xff08;比如鍵盤&#xff09;的數據輸入進程序中 input()函數可…

Verilog代碼bug:一種特殊的組合邏輯環

Verilog代碼bug&#xff1a;一種特殊的組合邏輯環 組合邏輯環&#xff08;Combinational Loop&#xff09;是什么&#xff0c;別的文章已經寫的很多了&#xff0c;本文就不贅述了&#xff0c;本文主要記錄遇到過的一種特殊的邏輯環&#xff1b; 代碼如下所示&#xff1a; mo…

MacApp自動化測試之Automator初體驗

今天我們繼續講Automator的使用。 初體驗 啟動Automator程序&#xff0c;選擇【工作流程】類型。從資源庫區域依次將獲取指定的URL、從網頁中獲得文本、新建文本文件三個操作拖進工作流創建區域。 然后修改內容&#xff0c;將獲取指定的URL操作中的URL替換成https://www.cnb…

for循環 while循環

for循環 for循環格式 for 變量 in 取值列表 #for in &#xffe5; &#xff08;seq 1 10&#xff09; do 命令序列 .......... done 另一種 for &#xff08;&#xff08;變量初始值&#xff1b; 變量范圍&#xff0c; 變量迭代方…