使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開(kāi)發(fā)
一、序言
Jenkins 是一款自動(dòng)化構(gòu)建工具,能夠基于 Maven 構(gòu)建后端 Java 項(xiàng)目,也能夠基于 nodejs 構(gòu)建前端 vue 項(xiàng)目,并且有可視化 web 界面。
所謂自動(dòng)化構(gòu)建是按照一定的策略執(zhí)行打包腳本,相對(duì)于普通腳本構(gòu)建,Jenkins 有如下優(yōu)勢(shì):
- 構(gòu)建隊(duì)列中能夠同時(shí)構(gòu)建多個(gè)項(xiàng)目,包含前端和后端項(xiàng)目;
- 定時(shí)構(gòu)建;
- 代碼倉(cāng)庫(kù)觸發(fā)構(gòu)建(普通腳本無(wú)法實(shí)現(xiàn));
Jenkins 體現(xiàn)一種項(xiàng)目管理思維:開(kāi)發(fā)人員的貼心助理,集中精力專(zhuān)注于業(yè)務(wù)開(kāi)發(fā);盡早的實(shí)現(xiàn)代碼集成(包含前后端)以便盡早發(fā)現(xiàn)問(wèn)題;構(gòu)建環(huán)境與開(kāi)發(fā)環(huán)境隔離,為向生產(chǎn)環(huán)境遷移做好充足的準(zhǔn)備。
構(gòu)建過(guò)程全程自動(dòng)化進(jìn)行,無(wú)人工參與,配合 Docker 容易實(shí)現(xiàn)高效的項(xiàng)目部署與遷移。
二、安裝與使用
Jenkins 是一個(gè)工具,既然是一個(gè)工具,便有相應(yīng)的替代方案,因此不需要花工作的時(shí)間琢磨這個(gè)工具是如何工作的,將精力放在如何利用 Jenkins 提高敏捷開(kāi)發(fā)效率上更有意義。
實(shí)踐過(guò)程中,將項(xiàng)目的腳本化構(gòu)建用 shell 編寫(xiě)成命令腳本,并附加在項(xiàng)目中,即使不使用 Jenkins,通過(guò)執(zhí)行 shell 腳本也能夠?qū)崿F(xiàn)項(xiàng)目的自動(dòng)化構(gòu)建。這么做主要有如下考慮:
增強(qiáng)拓展性
即使沒(méi)有 Jenkins,項(xiàng)目也能完成構(gòu)建,增加構(gòu)建的拓展性
減少對(duì) Jenkins 的依賴(lài)
讓 Jenkins 承擔(dān)實(shí)踐調(diào)度的角色,具體構(gòu)建過(guò)程由標(biāo)準(zhǔn)化的腳本來(lái)完成。
既然 shell 腳本能夠完成自動(dòng)化構(gòu)建,那么還需要用到 Jenkins 嗎,是否沖突?答案是不沖突。shell 腳本配合 Jenkins 使用有兩大方面優(yōu)勢(shì):
使用 shell 腳本必須登錄目標(biāo)服務(wù)器,擁有相應(yīng)的權(quán)限后,方能執(zhí)行 shell 腳本,Jenkins 能夠?qū)崿F(xiàn)在不登錄目標(biāo)服務(wù)器的基礎(chǔ)上,使用一對(duì)賬號(hào)和密碼,管理可視化的 Web 操作界面觸發(fā)構(gòu)建事件。
按需構(gòu)建,開(kāi)發(fā)者在提交完代碼后,向 Jenkins 服務(wù)器發(fā)送一個(gè)信號(hào),便可觸發(fā)構(gòu)建。
(一)安裝
使用傳送門(mén)快捷安裝,啟動(dòng)后使用安裝推薦插件,內(nèi)置國(guó)內(nèi)插件源,安裝速度較快。
1、查看初始密碼
cat ~/.jenkins/secrets/initialAdminPassword
2、修改默認(rèn)工作空間
默認(rèn)工作空間路徑為~/.jnkins
,運(yùn)行 Jenkins 程序的用戶(hù)空間下,構(gòu)建完成后的項(xiàng)目,如果要放在第三方容器中運(yùn)行時(shí),有可能會(huì)出現(xiàn)找不到路徑的情況,修改默認(rèn)工作空間或者給予資源目錄可執(zhí)行權(quán)限都能解決此問(wèn)題。
安裝完成之后,暫時(shí)啟動(dòng)程序,先確認(rèn)是否需要修改Jenkins_HOME
變量,后續(xù)初始化以及插件的安裝與此路徑有關(guān)。此變量修改方式有多種,顆粒度較大的是配置在 PATH 環(huán)境變量中,顆粒度較小的是配置在運(yùn)行 Jenkins 項(xiàng)目的容器中。
修改 Tomcat 的配置文件 context.xml,增加一行配置
<!-- 創(chuàng)建一個(gè)jenkins,并將其用戶(hù)空間設(shè)置為JENKINS_HOME --> <Environment name="JENKINS_HOME" value="/home/jenkins" type=java.lang.String/>
注意:JENKINS_HOME
默認(rèn)值為啟動(dòng)進(jìn)程用戶(hù)對(duì)應(yīng)的用戶(hù)空間,在啟動(dòng)前修改后即變成新的路徑。
(二)使用
如果在配置遠(yuǎn)程 APiToken 觸發(fā)不生效,請(qǐng)閱讀免密登錄章節(jié)。
1、構(gòu)建配置
用腳本的方式構(gòu)建 Jenkins 項(xiàng)目配置非常簡(jiǎn)單,盡管內(nèi)置了很多花里胡哨的配置,這里用不到,不需要關(guān)心。
只需要在構(gòu)建中添加執(zhí)行 shell 腳本命令即可。附錄中列舉的環(huán)境配置統(tǒng)一在宿主機(jī)上完成,不在 Jenkins 服務(wù)內(nèi)部配置,使用默認(rèn)值即可。
2、添加項(xiàng)目
在宿主機(jī)上將待構(gòu)建項(xiàng)目的源代碼克隆到本地,執(zhí)行 shell 腳本完成手動(dòng)構(gòu)建。在 Jenkins 管理工作臺(tái)新建一個(gè)同名的空項(xiàng)目,將克隆的源代碼整體復(fù)制到 Jenkins 的工作空間下,默認(rèn)位置為/root/.jenkins/workspace
,委托給 Jenkins 代為自動(dòng)管理該項(xiàng)目。
(三)免密登錄
使用 URL 觸發(fā)構(gòu)建事件,需要配置免密登錄,即在不需要輸入用戶(hù)名和密碼的情況下,通過(guò)遠(yuǎn)程調(diào)用 shell 腳本觸發(fā)構(gòu)建事件,此 shell 腳本本質(zhì)上是 GET 的方式請(qǐng)求某個(gè)指定的路徑。操作過(guò)程如下:
(1)安裝插件
安裝Build Authorization Token Root Plugin
插件,如果已經(jīng)存在,則忽略此步驟。此插件的作用是給當(dāng)前登錄的用戶(hù)生成 Token,方便后續(xù)認(rèn)證使用,一個(gè)用戶(hù)可以配置多個(gè) token。
(2)項(xiàng)目配置
在指定的項(xiàng)目中添加 token 配置,項(xiàng)目可以復(fù)用一個(gè) token 或者每個(gè)項(xiàng)目單獨(dú)設(shè)置一個(gè) token,依據(jù)需要選擇。只有添加此配置之后,使用 token 觸發(fā)方能生效。
(3)客戶(hù)端使用
編寫(xiě)腳本,將腳本分發(fā)給開(kāi)發(fā)者,自動(dòng)化構(gòu)建便可以愉快的開(kāi)始了。使用curl
多參數(shù)時(shí),&
符號(hào)需要轉(zhuǎn)義。
curl {Jenkins URL}/buildByToken/build?job={項(xiàng)目名}\&token={token}
至此,CI/CD敏捷開(kāi)發(fā)配置完畢。
三、觸發(fā)策略
構(gòu)建事件可以按照不同的策略來(lái)定義,定時(shí)屬于被動(dòng)觸發(fā);URL 和鉤子程序?qū)儆谥鲃?dòng)觸發(fā)。
(一)定時(shí)觸發(fā)
定時(shí)觸發(fā)有多種實(shí)現(xiàn)方案,使用 CentOS 服務(wù)器內(nèi)置的定時(shí)調(diào)度器是較為輕量的解決方式,實(shí)現(xiàn)原理是在指定的時(shí)間節(jié)點(diǎn)運(yùn)行 shell 腳本,其中 shell 腳本便是項(xiàng)目構(gòu)建的載體。如果單純希望定時(shí)構(gòu)建項(xiàng)目,推薦使用此種解決方式,Jenkins 略顯笨重。
(二)URL 觸發(fā)
用腳本模擬或者在瀏覽器訪(fǎng)問(wèn) URL 觸發(fā)構(gòu)建事件。此種方式是開(kāi)發(fā)中用的比較多的方式,按需構(gòu)建的代表。軟件開(kāi)發(fā)者在提交完代碼后,主動(dòng)觸發(fā)構(gòu)建事件,這種方式構(gòu)建效率較高。
Build Triggers
構(gòu)建觸發(fā)器是指 Jenkins 收到某一信號(hào)之后,立即開(kāi)始構(gòu)建指定的任務(wù)。
勾選【Trigger builds remotely】并設(shè)置【Authentication Token】
# 【服務(wù)前綴】/job/【任務(wù)名】/build?token=【token】 JENKINS_URL/job/job-vue/build?token=TOKEN_NAME
通過(guò)使用 curl 腳本即可觸發(fā)構(gòu)建信號(hào)。
(三)鉤子觸發(fā)
在代碼倉(cāng)庫(kù)完成鉤子程序配置,并且允許代碼倉(cāng)庫(kù)服務(wù)器訪(fǎng)問(wèn) Jenkins 服務(wù)器,鉤子程序會(huì)在開(kāi)發(fā)者提交代碼時(shí)觸發(fā)構(gòu)建事件。
鉤子觸發(fā)看上去比較美,實(shí)際操作中有一定的前置條件:一是項(xiàng)目的構(gòu)建時(shí)間不能過(guò)長(zhǎng);二是提交代碼不能過(guò)于頻繁。
附錄、工具使用
1、語(yǔ)言設(shè)置
在【系統(tǒng)管理】>【插件管理】中添加【locale】插件。在【系統(tǒng)管理】>【全局配置】中 locale 欄目下添加【en_US】,并勾選對(duì)所有用戶(hù)生效選項(xiàng)。
建議統(tǒng)一使用英文界面(可以修改為中文),在中英文混合下操作比較別扭。
2、構(gòu)建環(huán)境清單
序號(hào) | 環(huán)境名 | 作用及要求 | 參考資料 |
---|---|---|---|
1 | Java | Java 程序基礎(chǔ)運(yùn)行環(huán)境,使用 jdk 不能使用 jre(需要編譯 Java 源碼) | |
2 | maven | 構(gòu)建 Java 項(xiàng)目,為提高構(gòu)建速度需要配置國(guó)內(nèi)倉(cāng)庫(kù)源 | [Maven 使用手冊(cè)] |
3 | NodeJS | 構(gòu)建前端項(xiàng)目 | |
4 | git | 拉取遠(yuǎn)程倉(cāng)庫(kù)代碼 | |
5 | ssh 免密登錄 | 授權(quán)拉取遠(yuǎn)程倉(cāng)庫(kù)代碼;授權(quán)登錄遠(yuǎn)程服務(wù)器(構(gòu)建完成后部署) | [SSH 使用手冊(cè)] |
3、環(huán)境配置
1、Maven Configuration
配置項(xiàng) | 配置內(nèi)容 |
---|---|
Default settings provider | /usr/local/maven/conf/settings.xml |
Default global settings provider | /usr/local/maven/conf/settings.xml |
2、JDK
配置項(xiàng) | 配置內(nèi)容 |
---|---|
JAVA_HOME | /usr/local/java |
3、Git
配置項(xiàng) | 配置內(nèi)容 |
---|---|
Path to Git executable | /usr/local/git/bin/git |
4、Maven
配置項(xiàng) | 配置內(nèi)容 |
---|---|
MAVEN_HOME | /usr/local/maven |
5、NodeJS
配置項(xiàng) | 配置內(nèi)容 |
---|---|
Installation directory | /usr/local/nodejs/bin |
4、任務(wù)配置
1、Source Code Management
源代碼管理是 Jenkins 工作的前提,即能夠獲取到任務(wù)源代碼,它是后續(xù)代碼自動(dòng)構(gòu)建的前提。
源代碼托管在 GitHub,并且是私有倉(cāng)庫(kù),Jenkins 正確訪(fǎng)問(wèn) git 倉(cāng)庫(kù)需要進(jìn)行授權(quán)。
# 基于http用戶(hù)名和密碼授權(quán) https://gitee.com/decsa/ucode-cms-vue.git # 基于公鑰和私鑰匙授權(quán) git@gitee.com:decsa/ucode-cms-vue.git
為了提高工作效率,促進(jìn)團(tuán)隊(duì)協(xié)作,這里選用 ssh 認(rèn)證。
ssh-keygen -t rsa -C "982361244@qq.com"
將文件【~/.ssh/id_rsa.pub】?jī)?nèi)字符串拷貝至 GitHub 設(shè)置中,配置后即可免密拉取 GitHub 私有倉(cāng)庫(kù)代碼。
更多內(nèi)容請(qǐng)查看 [SSH 使用手冊(cè)]
2、Build Triggers
構(gòu)建觸發(fā)器是指 Jenkins 收到某一信號(hào)之后,立即開(kāi)始構(gòu)建指定的任務(wù)。
勾選【Trigger builds remotely】并設(shè)置【Authentication Token】
# 【服務(wù)前綴】/job/【任務(wù)名】/build?token=【token】 JENKINS_URL/job/ruoyi-vue/build?token=TOKEN_NAME
通過(guò)在任一登陸的服務(wù)器的瀏覽器或者使用 curl 腳本即可出發(fā)任務(wù)的立即構(gòu)建。
3、Build
后端項(xiàng)目通常使用 Maven 來(lái)構(gòu)建,在下拉框中選擇【Invoke top-level Maven targets】,然后在 Goals 欄目中配置如下命令
clean install
經(jīng)過(guò)此步驟,能夠在工作空間找到構(gòu)建后的項(xiàng)目發(fā)布包。
4、Post-build Actions
在任務(wù)構(gòu)建完成之后出發(fā)此操作。通常使用 Docker 將項(xiàng)目發(fā)布包構(gòu)建成鏡像,然后發(fā)布到鏡像倉(cāng)庫(kù)中。可執(zhí)行的鏡像發(fā)布到鏡像倉(cāng)庫(kù)之后,有兩種比較常用的后續(xù)方案與應(yīng)用服務(wù)器交互。
Jenkins 通過(guò)授權(quán)認(rèn)證,登陸到目標(biāo)應(yīng)用服務(wù)器,將對(duì)應(yīng)的鏡像拉下來(lái),然后使用腳本啟動(dòng)。
通過(guò)使用 k8s 容器服務(wù),自動(dòng)化管理任務(wù)鏡像發(fā)布工作。
以上就是使用Jenkins自動(dòng)化構(gòu)建工具進(jìn)行敏捷開(kāi)發(fā) 的詳細(xì)內(nèi)容,更多關(guān)于Jenkins自動(dòng)化構(gòu)建工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Jdbctemplate多數(shù)據(jù)源配置方法詳解
這篇文章主要介紹了Jdbctemplate多數(shù)據(jù)源配置方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06JavaWeb實(shí)體類(lèi)轉(zhuǎn)為json對(duì)象的實(shí)現(xiàn)方法
這篇文章主要介紹了JavaWeb實(shí)體類(lèi)轉(zhuǎn)為json對(duì)象的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用
這篇文章主要介紹了關(guān)于SpringMVC中數(shù)據(jù)綁定@ModelAttribute注解的使用,SpringMVC是一個(gè)基于Spring框架的Web框架,它提供了一種簡(jiǎn)單、靈活的方式來(lái)開(kāi)發(fā)Web應(yīng)用程序,在開(kāi)發(fā)Web應(yīng)用程序時(shí),我們需要將用戶(hù)提交的數(shù)據(jù)綁定到我們的Java對(duì)象上,需要的朋友可以參考下2023-07-07spring boot實(shí)現(xiàn)自動(dòng)輸出word文檔功能的實(shí)例代碼
這篇文章主要介紹了spring boot實(shí)現(xiàn)自動(dòng)輸出word文檔功能的實(shí)例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04淺談java中OO的概念和設(shè)計(jì)原則(必看)
下面小編就為大家?guī)?lái)一篇淺談java中OO的概念和設(shè)計(jì)原則(必看)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05