本篇主要講解一下如何去配置 jenkins,如何使用 Fabric(python 腳本)去部署項(xiàng)目,怎么設(shè)置 gitlab 的鉤子,實(shí)現(xiàn)我們提交代碼及自動(dòng)打包部署,實(shí)現(xiàn)真正的自動(dòng)化部署??礆w看,記得一定要實(shí)踐一下才知道哪里有坑。
如果你在嘗試的過(guò)程中遇到什么問(wèn)題,歡迎留言和我一起探討。
準(zhǔn)備項(xiàng)目
這里就不做過(guò)多介紹了,隨便一個(gè) vue 或者 react 的項(xiàng)目,或者 node 的項(xiàng)目都可以。
前提是一定要上傳到 git 上哦,我們后續(xù)會(huì)使用項(xiàng)目 git 的鉤子函數(shù)去調(diào)用 jenkins 進(jìn)行自動(dòng)構(gòu)建。我這邊用的是公司的一個(gè) vue 項(xiàng)目。
安裝 jenkins
如果是公司已經(jīng)有自己的 jenkins,那可以跨過(guò)這一步,直接看后面的。
Linux 基礎(chǔ)環(huán)境
要求必須有 java 運(yùn)行環(huán)境,建議安裝 Oracle 官方的,給大家個(gè)傳送門(mén)
安裝(CentOS 環(huán)境下)
sudo?wget?-O?/etc/yum.repos.d/jenkins.repo?https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo?rpm?--import?https://pkg.jenkins.io/redhat-stable/jenkins.io.key #?或?https://pkg.jenkins.io/redhat-stable/jenkins.io.key sudo?yum?install?jenkins 復(fù)制代碼
添加 Jenkins 官方倉(cāng)庫(kù)
導(dǎo)入公鑰
安裝
上面執(zhí)行完成之后,檢查/usr/lib/jenkins/jenkins.war 是否存在,如果在下載過(guò)程中很慢的話,建議改成 http 協(xié)議。
服務(wù)管理(Linux)
在 linux 上可以通過(guò)以下命令去管理 jenkins 的服務(wù):
systemctl?start?jenkins systemctl?stop?jenkins systemctl?status?jenkins 復(fù)制代碼
配置
jenkins 的配置文件在這個(gè)目錄下:/etc/sysconfig/jenkins,我們可以通過(guò)這個(gè)配置文件修改 jenkins 的端口號(hào),因?yàn)?jenkins 默認(rèn)端口號(hào)都是 8080,很容易被占用,所以還是換一下的好。
#?修改默認(rèn)端口 JENKINS_PORT="8001" JENKINS_AJP_PORT="8009"?#?選填 復(fù)制代碼
第一次訪問(wèn)
通過(guò) systemctl start jenkins,將服務(wù)跑起來(lái)之后,我們就可以進(jìn)行訪問(wèn)了,在瀏覽器中通過(guò) http://服務(wù)器ip:端口號(hào) 即可進(jìn)行訪問(wèn)。
管你要密碼怎么辦?
可以在 /var/lib/jenkins/secrets/initialAdminPassword 中找到賬號(hào)密碼。
登錄之后,我們能看到主頁(yè)面就代表 jenkins 安裝成功了。
安裝其他需要的軟件
我們后續(xù)會(huì)在 jenkins 的服務(wù)器上進(jìn)行腳本的執(zhí)行和項(xiàng)目的打包,最好在 jenkins 上把 node 相關(guān)的軟件安裝好。
安裝 node 就不多講了,大家可以看一下我之前寫(xiě)的node 中 3m 管理法,可以幫你有效的管理 node,以及切換 npm 源。
我們后續(xù)不使用 shell 腳本,使用 Fabric 腳本部署,希望大家在 jenkins 上也裝一下 Fabric 環(huán)境吧,放心,不是很麻煩,很快就可以裝好,不是給大家加活,主要是 Fabric 是真好用,后續(xù)給大家展示一下或者大家自己操作一下就知道了。
服務(wù)器上有很多會(huì)默認(rèn)帶 python 環(huán)境,我們需要先查看一下 python 的版本,F(xiàn)abric 需要運(yùn)行在 python2.5-2.7 的版本之下。
python?--version 復(fù)制代碼
只要版本大于 2.5 即可,如果沒(méi)有 python 或者版本小于 2.5,可以根據(jù)安裝教程安裝一下。
之后就是安裝 Fabric:
pip?install?fabric 復(fù)制代碼
好了,把環(huán)境安裝完成了,我們要開(kāi)始搞事了。
創(chuàng)建 jenkins 工程
點(diǎn)擊 new 任務(wù),即可開(kāi)始創(chuàng)建任務(wù):
填寫(xiě)自己的工程的名稱(chēng),選擇自己需要?jiǎng)?chuàng)建項(xiàng)目的類(lèi)型,我們就選擇自由風(fēng)格即可。
這個(gè)時(shí)候就創(chuàng)建好任務(wù)了,我們需要對(duì)任務(wù)進(jìn)行一定的配置。
配置 gitlab 的上傳即構(gòu)建功能
配置 jenkins 工程
從 jenkins 右側(cè)找到自己的工程,進(jìn)入工程后點(diǎn)擊左側(cè)的 configure。
配置 git 倉(cāng)庫(kù)地址
在 jenkins 的工程里,我們可以配置具體項(xiàng)目的 git 地址,后續(xù)提交項(xiàng)目之后,jenkins 工程就會(huì)從這個(gè) git 目錄去拉代碼,記得填寫(xiě)一個(gè)有權(quán)限的賬戶(hù)哦。
添加觸發(fā)器
配置完成 git 遠(yuǎn)程倉(cāng)庫(kù)地址之后,我們需要找到構(gòu)建環(huán)境,勾選下圖中紅框選中的地方,這個(gè)是 webhook 在 jenkins 里邊的配置。
記得保存紅框中 URL 后邊的地址,后續(xù)會(huì)填寫(xiě)到 gitlab 里邊。
配置 git 倉(cāng)庫(kù)鉤子
本篇主要以 gitlab 為例,在 gitlab 的對(duì)應(yīng)項(xiàng)目中,找到 webhook 的配置(settings -> integrations)
URL:就是上一步在 jenkins 中勾選 gitlab 鉤子時(shí)賦值的 URL,有時(shí)候可能會(huì)存在問(wèn)題,比如你修改了 jenkins 的端口號(hào),但是那個(gè) URL 還是顯示 8080,這個(gè)時(shí)候需要將端口號(hào)修改成你更改后的。
Token:jenkins 對(duì)應(yīng)的工程中勾選 gitlab 鉤子選項(xiàng)之后,會(huì)有一個(gè)高級(jí)設(shè)置,如下:
將生成的 token 粘貼放到 gitlab 對(duì)應(yīng)的 Token 中。
**注意:**這個(gè)時(shí)候需要在高級(jí)設(shè)置中勾選另外一個(gè)選項(xiàng),就是具體根據(jù)哪個(gè)分支提交代碼后構(gòu)建,如果不勾選這個(gè)會(huì)導(dǎo)致 gitlab 中測(cè)試 push events 的時(shí)候報(bào) 401 的錯(cuò)誤,如果你在測(cè)試 webhook 時(shí)出現(xiàn) 401 的問(wèn)題,可以回來(lái)修改一下這里:
填完 gitlab 的 URL 和 Token 之后點(diǎn)擊創(chuàng)建:
Trigger 中我們勾選 push events 即可,如果有其他的需求可以自行勾選。
測(cè)試 gitlab 鉤子
在上一步中,我們已經(jīng)將 gitlab 鉤子需要的 URL 和 Token 都填寫(xiě)完成,并且已經(jīng)創(chuàng)建了 webhook,在上一個(gè)頁(yè)面配置 webhook 下面可以看到你自己的配置成功的 webhook:
我們可以點(diǎn)擊 test -> Push Events 進(jìn)行 webhook 的測(cè)試,如果頁(yè)面頂部提示以下彈窗,說(shuō)明配置成功。
這個(gè)時(shí)候我們?cè)诳?jenkins 里面,會(huì)提示工程正在構(gòu)建。
實(shí)現(xiàn)自動(dòng)化構(gòu)建及部署
目前公司業(yè)務(wù)場(chǎng)景是這樣的:jenkins 是一臺(tái)服務(wù)器,需要部署項(xiàng)目是一臺(tái)服務(wù)器,并且需要部署項(xiàng)目的業(yè)務(wù)服務(wù)器有堡壘機(jī)進(jìn)行保護(hù),我無(wú)法使用 jenkins 的 ssh 功能對(duì)業(yè)務(wù)服務(wù)器進(jìn)行直接登錄。
所以我本篇主要講如何使用 Fabric 進(jìn)行遠(yuǎn)程部署,這里也就將自動(dòng)化構(gòu)建和自動(dòng)化部署合并起來(lái)了,其實(shí)自動(dòng)化構(gòu)建是一塊內(nèi)容,自動(dòng)化部署是一塊內(nèi)容。如果大家的業(yè)務(wù)場(chǎng)景和我一樣,可以使用這種方法,多一門(mén)手藝多一條出路唄,多學(xué)點(diǎn)東西肯定有好處。
正常的自動(dòng)化工作流是這樣的:
在項(xiàng)目開(kāi)發(fā)完成之后,使用 git push 將項(xiàng)目推送到遠(yuǎn)程倉(cāng)庫(kù)。
如果上一步配置 git 鉤子功能沒(méi)問(wèn)題,那么 git 就會(huì)觸發(fā) jenkins,然后 jenkins 開(kāi)始工作。
我們可以在 jenkins 上進(jìn)行單元測(cè)試,安裝升級(jí)依賴(lài)包,打包,上傳業(yè)務(wù)服務(wù)器,無(wú)論你是執(zhí)行 npm scripts,還是執(zhí)行腳本,都能在 jenkins 上進(jìn)行構(gòu)建。
這一塊內(nèi)容主要講如何寫(xiě)構(gòu)建和部署的腳本,如果你時(shí)間不充裕,沒(méi)時(shí)間學(xué) Fabric,使用 npm scripts 進(jìn)行構(gòu)建,那你可以參考一下掘金網(wǎng)友寫(xiě)的實(shí)戰(zhàn)筆記:Jenkins 打造強(qiáng)大的前端自動(dòng)化工作流。
其實(shí)我還是覺(jué)得大家應(yīng)該看一下 Fabric,點(diǎn)擊名字了解一下吧,真的很強(qiáng)大,直接將構(gòu)建部署合并。
要想使用 Fabric,需要在你的實(shí)際項(xiàng)目根目錄下創(chuàng)建一個(gè) fabfile.py 文件,存放腳本,后續(xù)在 jenkins 中可以直接執(zhí)行這個(gè)文件。廢話不說(shuō),我先給大家放一段我寫(xiě)的腳本。
import?json from?fabric.api?import?* #?定義一些變量 APP_NAME?=?'cartoon_cms_fe' REMOTE_PATH?=?'/data/front/source' #?業(yè)務(wù)服務(wù)器?ip,登錄的用戶(hù)名 env.hosts?=?['127.0.0.1'] env.user?=?'root' #?構(gòu)建函數(shù) @runs_once def?package(): #?執(zhí)行安裝依賴(lài)的過(guò)程 ?run('npm?install') ?#?執(zhí)行打包過(guò)程 ?run('npm?run?build:prod') ?#?將打包的dist文件夾進(jìn)行壓縮 ?local('tar?zcf?{0}.tgz?dist?--exclude=".svn"?--exclude=".idea"?--remove-files'.format(APP_NAME),?capture=False) #?部署 def?deploy(): #?將壓縮包上傳到業(yè)務(wù)服務(wù)器 ?put('{0}.tgz'.format(APP_NAME),?'{1}/{0}.tgz'.format(APP_NAME,?REMOTE_PATH)) #?進(jìn)入業(yè)務(wù)服務(wù)器存放壓縮包的目錄 ?with?cd(REMOTE_PATH): ?#?解壓壓縮包 ?run('tar?zxf?{0}.tgz'.format(APP_NAME)) ?#?刪除也所報(bào) ?run('rm?-f?{0}.tgz'.format(APP_NAME)) ?#?進(jìn)入項(xiàng)目 ?with?cd(APP_NAME): ?#?利用http-server和pm2將靜態(tài)項(xiàng)目跑起來(lái) ?run('pm2?start?http-server?--name?--?{0}?-p?8888?-d?false'.format(APP_NAME)) 復(fù)制代碼
這個(gè)只是我們公司的業(yè)務(wù),其實(shí) Fabric 腳本就是幫助你將 shell 命令跑在服務(wù)器上,后續(xù)幫助你進(jìn)行遠(yuǎn)程上傳部署,看過(guò) Fabric 教程的大兄弟們,你們應(yīng)該知道使用 local 命令會(huì)在當(dāng)前服務(wù)器執(zhí)行命令,使用 run 命令會(huì)在遠(yuǎn)程服務(wù)器執(zhí)行命令。
這個(gè)時(shí)候腳本就寫(xiě)好了,我們打開(kāi) jenkins 找到對(duì)應(yīng)項(xiàng)目,進(jìn)入項(xiàng)目的 Configure,找到 build,然后配置一個(gè) shell,讓其執(zhí)行。
可以參考下面的配置:
保存一下,然后自己測(cè)試一下吧。
在 jenkins 上執(zhí)行構(gòu)建,我們可以點(diǎn)擊這個(gè)構(gòu)建的圖標(biāo)查看構(gòu)建過(guò)程有沒(méi)有問(wèn)題。
當(dāng)出現(xiàn)以下內(nèi)容時(shí),就代表構(gòu)建成功了。
可以使用你業(yè)務(wù)服務(wù)器的 ip 加項(xiàng)目端口號(hào)查看跑起來(lái)的項(xiàng)目。
這個(gè)時(shí)候我們的自動(dòng)化構(gòu)建及自動(dòng)化部署就完成了。
最后
這篇文章我們只是簡(jiǎn)單的搭建一套自動(dòng)化工作流程,像單元測(cè)試什么的都沒(méi)有寫(xiě),如果你的項(xiàng)目有單元測(cè)試,只需要多執(zhí)行一條命令即可。
我們?cè)陂_(kāi)發(fā)完成之后,提交 git,jenkins 就可以幫助我們自動(dòng)化執(zhí)行,解放了人力部署的生產(chǎn)力,讓我們更多關(guān)注的是開(kāi)發(fā)過(guò)程。其實(shí)持續(xù)集成真實(shí)的配置要比我們這些復(fù)雜的多,一套完整的持續(xù)集成,能讓公司省不少人力成本。
雖然我們配置的簡(jiǎn)單,但是你如果配置成功一個(gè)工程,其實(shí)就已經(jīng)了解了這個(gè)過(guò)程,后續(xù)接觸復(fù)雜的持續(xù)集成,會(huì)讓你上手更快。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。
文章題目:讓自動(dòng)化工作流解放你的雙手-創(chuàng)新互聯(lián)
本文URL:http://jinyejixie.com/article32/gicsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、App開(kāi)發(fā)、營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站設(shè)計(jì)公司、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容