溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

讓自動化工作流解放你的雙手

發(fā)布時間:2020-08-02 12:39:37 來源:網(wǎng)絡 閱讀:450 作者:可樂程序員 欄目:web開發(fā)

本篇主要講解一下如何去配置 jenkins,如何使用 Fabric(python 腳本)去部署項目,怎么設置 gitlab 的鉤子,實現(xiàn)我們提交代碼及自動打包部署,實現(xiàn)真正的自動化部署??礆w看,記得一定要實踐一下才知道哪里有坑。

如果你在嘗試的過程中遇到什么問題,歡迎留言和我一起探討。

準備項目

這里就不做過多介紹了,隨便一個 vue 或者 react 的項目,或者 node 的項目都可以。

前提是一定要上傳到 git 上哦,我們后續(xù)會使用項目 git 的鉤子函數(shù)去調用 jenkins 進行自動構建。我這邊用的是公司的一個 vue 項目。

安裝 jenkins

如果是公司已經(jīng)有自己的 jenkins,那可以跨過這一步,直接看后面的。

Linux 基礎環(huán)境

要求必須有 java 運行環(huán)境,建議安裝 Oracle 官方的,給大家個傳送門

安裝(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
復制代碼
  • 添加 Jenkins 官方倉庫

  • 導入公鑰

  • 安裝

上面執(zhí)行完成之后,檢查/usr/lib/jenkins/jenkins.war 是否存在,如果在下載過程中很慢的話,建議改成 http 協(xié)議。

服務管理(Linux)

在 linux 上可以通過以下命令去管理 jenkins 的服務:

systemctl?start?jenkins
systemctl?stop?jenkins
systemctl?status?jenkins
復制代碼

配置

jenkins 的配置文件在這個目錄下:/etc/sysconfig/jenkins,我們可以通過這個配置文件修改 jenkins 的端口號,因為 jenkins 默認端口號都是 8080,很容易被占用,所以還是換一下的好。

#?修改默認端口
JENKINS_PORT="8001"
JENKINS_AJP_PORT="8009"?#?選填
復制代碼

第一次訪問

通過 systemctl start jenkins,將服務跑起來之后,我們就可以進行訪問了,在瀏覽器中通過 http://服務器ip:端口號 即可進行訪問。

讓自動化工作流解放你的雙手


  • 管你要密碼怎么辦?

可以在 /var/lib/jenkins/secrets/initialAdminPassword 中找到賬號密碼。

登錄之后,我們能看到主頁面就代表 jenkins 安裝成功了。

讓自動化工作流解放你的雙手


安裝其他需要的軟件

我們后續(xù)會在 jenkins 的服務器上進行腳本的執(zhí)行和項目的打包,最好在 jenkins 上把 node 相關的軟件安裝好。

安裝 node 就不多講了,大家可以看一下我之前寫的node 中 3m 管理法,可以幫你有效的管理 node,以及切換 npm 源。

我們后續(xù)不使用 shell 腳本,使用 Fabric 腳本部署,希望大家在 jenkins 上也裝一下 Fabric 環(huán)境吧,放心,不是很麻煩,很快就可以裝好,不是給大家加活,主要是 Fabric 是真好用,后續(xù)給大家展示一下或者大家自己操作一下就知道了。

服務器上有很多會默認帶 python 環(huán)境,我們需要先查看一下 python 的版本,F(xiàn)abric 需要運行在 python2.5-2.7 的版本之下。

python?--version
復制代碼

只要版本大于 2.5 即可,如果沒有 python 或者版本小于 2.5,可以根據(jù)安裝教程安裝一下。

之后就是安裝 Fabric:

pip?install?fabric
復制代碼

好了,把環(huán)境安裝完成了,我們要開始搞事了。

創(chuàng)建 jenkins 工程

點擊 new 任務,即可開始創(chuàng)建任務:

讓自動化工作流解放你的雙手


填寫自己的工程的名稱,選擇自己需要創(chuàng)建項目的類型,我們就選擇自由風格即可。

讓自動化工作流解放你的雙手


這個時候就創(chuàng)建好任務了,我們需要對任務進行一定的配置。

配置 gitlab 的上傳即構建功能

配置 jenkins 工程

從 jenkins 右側找到自己的工程,進入工程后點擊左側的 configure。

讓自動化工作流解放你的雙手


配置 git 倉庫地址

在 jenkins 的工程里,我們可以配置具體項目的 git 地址,后續(xù)提交項目之后,jenkins 工程就會從這個 git 目錄去拉代碼,記得填寫一個有權限的賬戶哦。

讓自動化工作流解放你的雙手


添加觸發(fā)器

配置完成 git 遠程倉庫地址之后,我們需要找到構建環(huán)境,勾選下圖中紅框選中的地方,這個是 webhook 在 jenkins 里邊的配置。

讓自動化工作流解放你的雙手


記得保存紅框中 URL 后邊的地址,后續(xù)會填寫到 gitlab 里邊。

配置 git 倉庫鉤子

本篇主要以 gitlab 為例,在 gitlab 的對應項目中,找到 webhook 的配置(settings -> integrations)

讓自動化工作流解放你的雙手


URL:就是上一步在 jenkins 中勾選 gitlab 鉤子時賦值的 URL,有時候可能會存在問題,比如你修改了 jenkins 的端口號,但是那個 URL 還是顯示 8080,這個時候需要將端口號修改成你更改后的。

Token:jenkins 對應的工程中勾選 gitlab 鉤子選項之后,會有一個高級設置,如下:

讓自動化工作流解放你的雙手


讓自動化工作流解放你的雙手


讓自動化工作流解放你的雙手


將生成的 token 粘貼放到 gitlab 對應的 Token 中。

**注意:**這個時候需要在高級設置中勾選另外一個選項,就是具體根據(jù)哪個分支提交代碼后構建,如果不勾選這個會導致 gitlab 中測試 push events 的時候報 401 的錯誤,如果你在測試 webhook 時出現(xiàn) 401 的問題,可以回來修改一下這里:

讓自動化工作流解放你的雙手


填完 gitlab 的 URL 和 Token 之后點擊創(chuàng)建:

Trigger 中我們勾選 push events 即可,如果有其他的需求可以自行勾選。

測試 gitlab 鉤子

在上一步中,我們已經(jīng)將 gitlab 鉤子需要的 URL 和 Token 都填寫完成,并且已經(jīng)創(chuàng)建了 webhook,在上一個頁面配置 webhook 下面可以看到你自己的配置成功的 webhook:

讓自動化工作流解放你的雙手


我們可以點擊 test -> Push Events 進行 webhook 的測試,如果頁面頂部提示以下彈窗,說明配置成功。

讓自動化工作流解放你的雙手


這個時候我們在看 jenkins 里面,會提示工程正在構建。

讓自動化工作流解放你的雙手


實現(xiàn)自動化構建及部署

目前公司業(yè)務場景是這樣的:jenkins 是一臺服務器,需要部署項目是一臺服務器,并且需要部署項目的業(yè)務服務器有堡壘機進行保護,我無法使用 jenkins 的 ssh 功能對業(yè)務服務器進行直接登錄。

所以我本篇主要講如何使用 Fabric 進行遠程部署,這里也就將自動化構建和自動化部署合并起來了,其實自動化構建是一塊內容,自動化部署是一塊內容。如果大家的業(yè)務場景和我一樣,可以使用這種方法,多一門手藝多一條出路唄,多學點東西肯定有好處。

正常的自動化工作流是這樣的:

  1. 在項目開發(fā)完成之后,使用 git push 將項目推送到遠程倉庫。

  2. 如果上一步配置 git 鉤子功能沒問題,那么 git 就會觸發(fā) jenkins,然后 jenkins 開始工作。

  3. 我們可以在 jenkins 上進行單元測試,安裝升級依賴包,打包,上傳業(yè)務服務器,無論你是執(zhí)行 npm scripts,還是執(zhí)行腳本,都能在 jenkins 上進行構建。

這一塊內容主要講如何寫構建和部署的腳本,如果你時間不充裕,沒時間學 Fabric,使用 npm scripts 進行構建,那你可以參考一下掘金網(wǎng)友寫的實戰(zhàn)筆記:Jenkins 打造強大的前端自動化工作流。

其實我還是覺得大家應該看一下 Fabric,點擊名字了解一下吧,真的很強大,直接將構建部署合并。

要想使用 Fabric,需要在你的實際項目根目錄下創(chuàng)建一個 fabfile.py 文件,存放腳本,后續(xù)在 jenkins 中可以直接執(zhí)行這個文件。廢話不說,我先給大家放一段我寫的腳本。

import?json
from?fabric.api?import?*
#?定義一些變量
APP_NAME?=?'cartoon_cms_fe'
REMOTE_PATH?=?'/data/front/source'
#?業(yè)務服務器?ip,登錄的用戶名
env.hosts?=?['127.0.0.1']
env.user?=?'root'
#?構建函數(shù)
@runs_once
def?package():
#?執(zhí)行安裝依賴的過程
?run('npm?install')
?#?執(zhí)行打包過程
?run('npm?run?build:prod')
?#?將打包的dist文件夾進行壓縮
?local('tar?zcf?{0}.tgz?dist?--exclude=".svn"?--exclude=".idea"?--remove-files'.format(APP_NAME),?capture=False)
#?部署
def?deploy():
#?將壓縮包上傳到業(yè)務服務器
?put('{0}.tgz'.format(APP_NAME),?'{1}/{0}.tgz'.format(APP_NAME,?REMOTE_PATH))
#?進入業(yè)務服務器存放壓縮包的目錄
?with?cd(REMOTE_PATH):
?#?解壓壓縮包
?run('tar?zxf?{0}.tgz'.format(APP_NAME))
?#?刪除也所報
?run('rm?-f?{0}.tgz'.format(APP_NAME))
?#?進入項目
?with?cd(APP_NAME):
?#?利用http-server和pm2將靜態(tài)項目跑起來
?run('pm2?start?http-server?--name?--?{0}?-p?8888?-d?false'.format(APP_NAME))
復制代碼

這個只是我們公司的業(yè)務,其實 Fabric 腳本就是幫助你將 shell 命令跑在服務器上,后續(xù)幫助你進行遠程上傳部署,看過 Fabric 教程的大兄弟們,你們應該知道使用 local 命令會在當前服務器執(zhí)行命令,使用 run 命令會在遠程服務器執(zhí)行命令。

這個時候腳本就寫好了,我們打開 jenkins 找到對應項目,進入項目的 Configure,找到 build,然后配置一個 shell,讓其執(zhí)行。

可以參考下面的配置:

讓自動化工作流解放你的雙手


保存一下,然后自己測試一下吧。

在 jenkins 上執(zhí)行構建,我們可以點擊這個構建的圖標查看構建過程有沒有問題。

讓自動化工作流解放你的雙手


當出現(xiàn)以下內容時,就代表構建成功了。

讓自動化工作流解放你的雙手


可以使用你業(yè)務服務器的 ip 加項目端口號查看跑起來的項目。

讓自動化工作流解放你的雙手


這個時候我們的自動化構建及自動化部署就完成了。

最后

這篇文章我們只是簡單的搭建一套自動化工作流程,像單元測試什么的都沒有寫,如果你的項目有單元測試,只需要多執(zhí)行一條命令即可。

我們在開發(fā)完成之后,提交 git,jenkins 就可以幫助我們自動化執(zhí)行,解放了人力部署的生產(chǎn)力,讓我們更多關注的是開發(fā)過程。其實持續(xù)集成真實的配置要比我們這些復雜的多,一套完整的持續(xù)集成,能讓公司省不少人力成本。

雖然我們配置的簡單,但是你如果配置成功一個工程,其實就已經(jīng)了解了這個過程,后續(xù)接觸復雜的持續(xù)集成,會讓你上手更快。

讓自動化工作流解放你的雙手


向AI問一下細節(jié)
AI