Git/Maven + Jenkins + Ansible實現(xiàn)自動化部署與持續(xù)交付

自動化部署與持續(xù)交付

@[CentOS 7, Jdk 1.8, Git, Maven, Jenkins, Ansible]
日常工作中呐萨,每個程序員都會經(jīng)歷項目部署灵份,而很多人在這時大多會經(jīng)歷以下環(huán)節(jié):

  • Git :分布式版本控制系統(tǒng)屁奏,負(fù)責(zé)項目代碼的分支拉取與分支更新等爆班;
  • Maven :項目管理工具方椎,負(fù)責(zé)項目打包播掷;
  • 項目部署 :日澈唬可能使用ftp方式傳輸項目包拒啰,Shell相關(guān)腳本部署揭措,或者使用IDEA Alibaba Cloud Toolkit相關(guān)插件的部署功能等胯舷。

而以上內(nèi)容中比較傳統(tǒng)的方式有一個缺點,就是需要人為的銜接每一步蜂筹,稍微掉以輕心需纳,則部署就比較容易出問題。

而如今更需要一個自動化部署與持續(xù)交付的組合拳來分擔(dān)壓力艺挪,更為準(zhǔn)確和系統(tǒng)化的實現(xiàn)項目部署不翩。接下來介紹一下Git/Maven + Jenkins + Ansible三劍客,能輕松解決這一難題麻裳,實現(xiàn)自動化部署口蝠。

簡單分析圖:


0.png

Git/Maven + Jenkins + Ansible自動化部署三劍客分工:

  • Git :分布式版本控制系統(tǒng),負(fù)責(zé)項目代碼的分支拉取與分支更新等工作津坑;
  • Maven :項目管理工具妙蔗,負(fù)責(zé)項目打包工作;
  • Ansible :自動化運維工具疆瑰,實現(xiàn)了批量系統(tǒng)配置眉反、批量程序部署、批量運行命令等功能穆役;
  • Jenkins :持續(xù)集成工具寸五,用于監(jiān)控持續(xù)重復(fù)的工作,通過插件管理來集成Git耿币、Maven梳杏、Ansible來實現(xiàn)對應(yīng)功能;

接下來是文章目錄:

[TOC]

1. 版本清單

Item Version
CentOS 7
JDK 1.8
Python 3.6.5
Jenkins 2.204.1
Maven 3.6.3
Ansible 2.9.2

2. 安裝與部署

2.1 Jenkins安裝前的環(huán)境部署

1.png

2.png

生產(chǎn)環(huán)境中防火墻可能不能關(guān)閉,那么則需要放行相關(guān)程序所需要的端口(jenkins默認(rèn)為8080)

下載jenkins rpm包:

https://pkg.jenkins.io/redhat-stable/

2.1.1 jdk1.8安裝

參考鏈接中安裝jdk1.8的部分:
https://blog.csdn.net/qq_26368081/article/details/78984316

2.1.2 maven安裝

1.下載maven壓縮包
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz

2.解壓mavan壓縮包
tar  -zxvf apache-maven-3.6.3-bin.tar.gz

3.查看maven版本號
進(jìn)入maven目錄
./mvn --version

2.2 Jenkins安裝與部署

3.png

JENKINS_USER = deploy表示jenkins的用戶
JENKINS_PORT = 8080表示jenkins的端口

啟動jenkins服務(wù):
systemctl start jenkins
開機自啟動jenkins服務(wù): 
systemctl enable jenkins

2.2.1 登陸jenkins管理平臺

接下來使用可以訪問到該服務(wù)器jenkins端口的電腦登陸:服務(wù)器ip + jenkins端口號
例如:http://192.168.10.132:8080

2.2.2 復(fù)制輸入初始密碼登陸

4.png
復(fù)制文件中的密碼
vi /var/lib/jenkins/secrets/initialAdminPassword

2.2.3 安裝插件

選擇推薦安裝的插件即可

2.2.4 創(chuàng)建管理員帳戶

創(chuàng)建平臺管理員帳戶

2.2.5 角色權(quán)限部署

0.目的:每個用戶只管理屬于自己的自動化部署項目
路徑:Manage Jenkins - Manage Plugins - 可選插件

1.安裝所需插件:
Role-based Authorization Strategy - 直接安裝
Authorize Project - 直接安裝

2.部署路徑:Manage Jenkins - Configure Global Security
按圖示開啟用戶登陸和選擇Role-Based Strategy策略

5.png

3.路徑:Manage Jenkins - Manage and Assign Roles

4.配置:

帳號準(zhǔn)備
新建三個帳號prod十性、test叛溢、abc分別表示生產(chǎn)環(huán)境帳號、測試環(huán)境帳號劲适、未知帳號
路徑:管理平臺頁面 - 注銷 - 創(chuàng)建一個用戶帳號

配置Manage Roles
在Manage Roles中有兩種角色
Global roles:分配全局策略
Project roles:根據(jù)項目環(huán)境來分配項目權(quán)限

Global roles欄
可添加guest游客的角色楷掉,只賦予read權(quán)限(Overrall - Read),可查看全局的面板

6.png

Item roles欄
可根據(jù)環(huán)境(例如生產(chǎn)環(huán)境减响、測試環(huán)境等)來進(jìn)行項目分類

7.png

Role:分類名
Pattern:正則表達(dá)式匹配

例子:
.test* :匹配所有以test結(jié)尾的項目靖诗,并分配圖上的權(quán)限。注意使用通配符‘’時支示,需要在''前添加'.',否則無法保存并會報錯刊橘。例如:.*plat

配置Assign Roles
把具體用戶(prod、test)與Manage Roles中配置的角色權(quán)限關(guān)聯(lián)起來

8.png

注意:
Anonymous User不分配權(quán)限颂鸿,只需要給admin分配管理員權(quán)限

驗證權(quán)限
新建Item:a.test和a.prod
路徑:管理平臺 - 新建Item - a.test - Freestyle project - 確定 - 返回管理平臺頁面

因為是測試Item促绵,所以沒有繼續(xù)創(chuàng)建具體Item內(nèi)容

admin管理用戶的管理界面

9.png

test用戶的管理界面

10.png

prod用戶的管理界面

11.png

具體的權(quán)限在前面的Manage Roles - Item roles里根據(jù)需要進(jìn)行設(shè)置

關(guān)閉用戶注冊入口
路徑:Manage Jenkins - Configure Global Security - 訪問控制 - Jenkins’ own user database - 允許用戶注冊
取消√即可

2.3 Ansible安裝與部署

2.3.1 Ansible安裝前的環(huán)境部署

python安裝與部署

1.在安裝Python之前,需要先安裝一些后面遇到的依賴問題(如果有依賴問題嘴纺,按照提示安裝):

yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel

2.python壓縮包下載

使用命令

wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz

or

**進(jìn)入該網(wǎng)址直接本地下載然后ftp方式傳輸至服務(wù)器上 **

https://www.python.org/ftp/python/

3.解壓败晴、配置與編譯安裝

1.解壓文件
tar -xvf Python-3.6.5.tgz

2.包安裝在/usr/local/Python3(具體安裝位置看個人喜好)
mkdir -p /usr/local/Python3

3.配置
cd Python-3.6.5
./configure --prefix=/usr/local/python3

4.編譯安裝
make
make install

5.做軟鏈接
ln -s /usr/local/python3/bin/python3.6 /usr/bin/python3
設(shè)置pip軟連接
ln -s /usr/local/python3/bin/pip3.6 /usr/bin/pip3

6.測試是否安裝成功
python3 -V

7.因為yum源使用的Python2,替換為Python3以后栽渴,會導(dǎo)致其無法正常工作尖坤。需要修改以下信息:
修改yum配置文件:
vi /usr/bin/yum
第一行修改為#!/usr/bin/python2.7

8.驗證yum源正常使用
yum -y install vim 執(zhí)行兩次測試安裝與校驗

9.用pip安裝PyQuery包
pip3 install PyQuery

10.升級pip
pip3 install --upgrade pip

2.3.2 Ansible安裝部署

1.sudo yum install epel-release
2.sudo yum install ansible
3.pip install --upgrade pip
4.pip install paramiko PyYAML Jinja2 httplib2 six
5.pip install ansible       

ssh免密碼/密鑰認(rèn)證

1.本地機器上使用ssh-keygen產(chǎn)生公鑰私鑰對
ssh-keygen -t rsa 
(一路回車)

2.用ssh-copy-id將公鑰復(fù)制到遠(yuǎn)程機器(~/ .ssh/authorized_key.文件)中
ssh-copy-id -i /root/.ssh/id_rsa.pub 用戶名@192.168.x.xxx
(/root/.ssh/id_rsa.pub這個路徑有可能不同,以自身具體路徑準(zhǔn)闲擦,詳見下方截圖)

3.輸入yes繼續(xù)連接慢味,輸入遠(yuǎn)程服務(wù)器的密碼(密鑰文件的形式不需要輸入密碼,但)

4.ssh方式登錄遠(yuǎn)程服務(wù)器驗證免密是否生效
(1)密碼方式:
ssh 用戶名@192.168.x.xxx
(2)密鑰方式:
需要對密鑰文件權(quán)限進(jìn)行修改-禁止文件的訪問權(quán)限墅冷,否則系統(tǒng)會判斷該文件可能被篡改而無法使用該密鑰進(jìn)行登錄
chmod 700 filename
ssh -i 密鑰文件路徑 用戶名@192.168.x.xxx

5.完成ssh免密碼/密鑰認(rèn)證

12.png

Jenkins ansible插件安裝

路徑:**Manage Jenkins - Manage Plugins - 可選插件 **


13.png

未找到可能是因為已經(jīng)安裝了纯路,在已安裝里尋找

2.4 其他補充部署

2.4.1 Jenkins關(guān)于jdk的部署

路徑:Manage Jenkins - Global Tool Configuration - JDK

14.png

JAVA_HOME填寫jre路徑(以自己實際路徑為準(zhǔn))

紅色警告無傷大雅,配置是正確的

2.4.2 Jenkins關(guān)于maven的部署

15.png

3. 新建Item完成自動化部署

3.1 新建Item

1.路徑:Jenkins工作臺 - 新建Item - 輸入任務(wù)名稱(例:abc.test) - 選擇Freestyle project - 確定

Freestyle在普通集成中一般足夠使用寞忿,如果現(xiàn)實業(yè)務(wù)中有復(fù)雜的邏輯而Freestyle無法滿足時驰唬,建議可以使用Jenkins 流水線(pipeline)編寫pipeline腳本來實現(xiàn)自定義邏輯。
流水線寫法可參考:ip地址:port端口號/job/pipeline.test/pipeline-syntax/(例:http://192.168.10.132:8080/job/pipeline.test/pipeline-syntax/)
流水線examplehttps://jenkins.io/doc/pipeline/examples/

2.This project is parameterized(項目參數(shù)配置)

16.png

(1) 添加git分支選擇參數(shù) - Git Parameter

添加該參數(shù)的作用是在部署該Item時腔彰,部署人員可以動態(tài)選擇git remote branchs中的任意分支叫编,實現(xiàn)靈活部署

17.png

(2) 源碼管理 - Git/Multiple SCMs

預(yù)備:添加Git憑據(jù)
路徑:工作臺 - 憑據(jù) - Stores scoped to Jenkins - Jenkins - 全局憑據(jù) (unrestricted) - 添加一些憑據(jù)
填寫用戶名密碼保存即可

需要從git/svn拉取多個項目情況需要安裝Multiple SCMs plugin插件

18.png

$ + 前面設(shè)置的參數(shù)名(例如:$playbookBranch)
實現(xiàn)動態(tài)選擇遠(yuǎn)程分支的作用

(3) 構(gòu)建 - Maven

19.png

Maven構(gòu)建模塊可以用來對項目進(jìn)行install/package等操作

(4) 構(gòu)建 - Ansible playbook

Ansible Playbooks常用模塊介紹:

http://note.youdao.com/noteshare?id=0bfc53f1b967f11d8f7e26ce38cbb6d8

Playbooks框架與格式介紹:

http://note.youdao.com/noteshare?id=d0d98975bc335c3e12fa73274e62c41f

簡單的ansible task腳本例子:

  # 上傳jar包到遠(yuǎn)程服務(wù)器指定目錄下
  # {{appPkgSrcDir}} 這些參數(shù)在inventory文件中定義
  - name: upload jar file to server
    tags:
     - upload
     - test
    copy:
     src: "{{ appPkgSrcDir }}/{{appName}}"
     dest: "{{appDeployDest}}"

  # 得到指定應(yīng)用的pid
  - name: get pid of service
    shell: "ps -ef | grep -v grep | grep {{serviceName}} | awk '{print $2}'"
    register: pid

  # 展示pid
  - name: display pid
    debug: msg="{{pid.stdout}}"
  
  - name: source profile
    shell: "source /etc/profile"

  # 強制kill進(jìn)程(生產(chǎn)環(huán)境不建議直接這樣操作)
  - name: Force kill stuck processes
    shell: "kill -9 {{ pid.stdout }}"

  - name: sleep 2s 
    command: sleep 2s

  # 開啟服務(wù)
  - name: start {{serviceName}}
    shell: "cd /data/mbApp/pay-mgt;nohup /home/jdk/jdk1.8.0_152/bin/java -jar {{appName}} --spring.profiles.active=test > nohup.out 2>&1 &"

這個例子比較簡單,只適合在開發(fā)/測試環(huán)境進(jìn)行測試時為了便捷而使用

Jenkins Ansible配置

20.png

21.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末霹抛,一起剝皮案震驚了整個濱河市宵溅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌上炎,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藕施,居然都是意外死亡寇损,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門裳食,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矛市,“玉大人,你說我怎么就攤上這事诲祸∽抢簦” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵救氯,是天一觀的道長找田。 經(jīng)常有香客問我,道長着憨,這世上最難降的妖魔是什么墩衙? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮甲抖,結(jié)果婚禮上漆改,老公的妹妹穿的比我還像新娘。我一直安慰自己准谚,他們只是感情好挫剑,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柱衔,像睡著了一般樊破。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秀存,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天捶码,我揣著相機與錄音,去河邊找鬼或链。 笑死惫恼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的澳盐。 我是一名探鬼主播祈纯,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叼耙!你這毒婦竟也來了腕窥?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤筛婉,失蹤者是張志新(化名)和其女友劉穎簇爆,沒想到半個月后癞松,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡入蛆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年响蓉,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哨毁。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡枫甲,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扼褪,到底是詐尸還是另有隱情想幻,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布话浇,位于F島的核電站脏毯,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏凳枝。R本人自食惡果不足惜抄沮,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岖瑰。 院中可真熱鬧叛买,春花似錦、人聲如沸蹋订。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽露戒。三九已至椒功,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間智什,已是汗流浹背动漾。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荠锭,地道東北人旱眯。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像证九,于是被迫代替她去往敵國和親删豺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • https://baijiahao.baidu.com/s?id=1621695863688073415&wfr=...
    催化劑閱讀 224評論 0 0
  • 2020-01-14 【日精進(jìn)打卡第 660 天 【知~學(xué)習(xí)】 《六項精進(jìn)》大綱 4 遍共 2496 遍 《大學(xué)》...
    隨心_892b閱讀 64評論 0 0
  • 1.打開7z官網(wǎng)https://sparanoid.com/lab/7z/ 2.下載安裝包 3.安裝 4.打開安裝...
    崇豹閱讀 429評論 0 0
  • 筆尖劃過泛黃的紙 至上至下 或輕或重 整晚 除了心跳聲愧怜、呼吸聲 就只聽那筆觸 沙沙 嘶嘶…… 是筆遇見了紙 是紙遇...
    檐下聽雨J閱讀 113評論 0 1
  • 自從開了讀書這扇門呀页,我便走入了讀書的花園小道,兩邊白花紅花驚艷開放拥坛,讓我目不暇接蓬蝶。 而當(dāng)我決定要主動讀書的時候尘分,卻...
    廣月尹閱讀 197評論 0 5