『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)-jenkins搭建和 maven gitlab自動(dòng)化部署流程(上)(五)

原創(chuàng)文章允跑,歡迎轉(zhuǎn)載。轉(zhuǎn)載請(qǐng)注明:轉(zhuǎn)載自IT人故事會(huì)燥狰,謝謝梳码!
原文鏈接地址:『互聯(lián)網(wǎng)架構(gòu)』軟件架構(gòu)-jenkins搭建和 maven gitlab自動(dòng)化部署流程(上)(五)

幾年前沒(méi)用過(guò)jenkins的時(shí)候,每次都需要用eclipse打個(gè)war包枚荣,然后小心翼翼的上傳到服務(wù)器碗脊,給服務(wù)器原有的war包改個(gè)名字啼肩,mv到bak目錄中橄妆,停止服務(wù),刪除原有的webapps的項(xiàng)目夏志,再把新上傳的war包放進(jìn)到tomcat的webapp說(shuō)的目錄下研侣,啟動(dòng)項(xiàng)目俘闯。每次改個(gè)html的標(biāo)簽的名字都需要重新上傳,每次都是這么繁瑣的操作慌随。其實(shí)小公司還可以容忍,如果是比較大的項(xiàng)目躺同,還持續(xù)停留在這個(gè)腳本上運(yùn)維人員都累死了阁猜,因?yàn)橛锌赡芤淮尾渴饚资畟€(gè)項(xiàng)目。源碼:https://github.com/limingios/netFuture/tree/master/jenkins/ysource/idig8

jenkins

  • 歷史

Hudson是在2004年的夏天由Sun公司開(kāi)發(fā)
2005年2月開(kāi)源并發(fā)布了第一個(gè)版本蹋艺。
Hudson發(fā)布的時(shí)候CruiseControl是CI界的老大哥剃袍,但是很快,在大約2007年的時(shí)候Hudson已經(jīng)超越CruiseControl捎谨。2008年5月的JavaOne大會(huì)上民效,Hudson獲得了開(kāi)發(fā)解決方案類的Duke's Choice獎(jiǎng)項(xiàng)。從此涛救,小弟翻身做大哥畏邢,Hudson成為CI的代名詞。
2010年9月检吆,烏龜殼公司偷偷把Hudson??變成了注冊(cè)商標(biāo)舒萎。2010年11月,Hudson社區(qū)的核心開(kāi)發(fā)人員發(fā)現(xiàn)并angry了蹭沛,雙方進(jìn)行了不太友好的會(huì)談臂寝,不出意料的談崩了虱肄。圣誕節(jié)過(guò)后,
2011年的第一場(chǎng)雪交煞,比以往來(lái)的要晚一些咏窿,幾個(gè)禿頂?shù)拇笫逶贛cDonald‘s的豪華包間里做了一個(gè)艱難的決定:
mv -f hudson jenkins
Hudson和Jenkins都擁有代碼;
Hudson有Oracle和Sonatype's corporate的支持和Hudson的注冊(cè)商標(biāo)
Jenkins擁有的是大多數(shù)的核心開(kāi)發(fā)者素征,社區(qū)集嵌,和后續(xù)更多的commit。

jenkins git 御毅、maven gitlab 根欧、tomcat 構(gòu)建持續(xù)集成環(huán)境 流程

1> 開(kāi)發(fā)者將新版本push到git server (Gitlab)。
2> Gitlab隨后觸發(fā)jenkins master結(jié)點(diǎn)進(jìn)行一次build端蛆。(通過(guò)web hook或者定時(shí)檢測(cè))
3> jenkins master結(jié)點(diǎn)將這個(gè)build任務(wù)分配給若干個(gè)注冊(cè)的slave結(jié)點(diǎn)中的一個(gè)凤粗,這個(gè)slave結(jié)點(diǎn)根據(jù)一個(gè)事先設(shè)置好的腳本進(jìn)行build。這個(gè)腳本可以做的事情很多今豆,比如編譯嫌拣,測(cè)試,生成測(cè)試報(bào)告等等呆躲。這些原本需要手動(dòng)完成的任務(wù)都可以交給jenkins來(lái)做异逐。
4> 我們?cè)赽uild中要進(jìn)行編譯,這里使用了分布式編譯器distcc來(lái)加快編譯速度插掂。
jenkins的工作原理是先將源代碼從gitlab中拷貝一份到本地灰瞻,然后根據(jù)設(shè)置的腳本進(jìn)行build。我們可以看出辅甥,整個(gè)系統(tǒng)的關(guān)鍵就是那個(gè)build腳本酝润,用來(lái)告訴jenkins在一次集成中需要執(zhí)行的任務(wù)。

這次將結(jié)合一個(gè)比較簡(jiǎn)單maven聚合項(xiàng)目璃弄,結(jié)合之前的maven私服要销,git私服和將要搭建的jenkins完成自動(dòng)化構(gòu)建。

  • gitlab谢揪,nexus私服蕉陋,jenkins,tomcat的搭建

通過(guò)源碼生成4個(gè)虛擬機(jī)拨扶,準(zhǔn)備工作凳鬓。vagrant已經(jīng)安裝了 對(duì)應(yīng)的docker。
用docker安裝nexus就是為了避免環(huán)境變量患民,用戶賦權(quán)等復(fù)雜的操作缩举。對(duì)于vagrant的如何安裝不用的系統(tǒng)不一樣可以參看
mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/
window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/

系統(tǒng)類型 IP地址 節(jié)點(diǎn)角色 CPU Memory Hostname
Centos7 192.168.66.100 gitlab 2 2G gitlab
Centos7 192.168.66.101 jenkins 2 2G jenkins
Centos7 192.168.66.102 nexus 2 2G nexus
Centos7 192.168.66.103 tomcat 2 2G tomcat

(1). 虛擬機(jī)vagrant講述安裝的步驟

vagrant up

(2).機(jī)器window/mac開(kāi)通遠(yuǎn)程登錄root用戶下

su -
# 密碼
vagrant
#設(shè)置 PasswordAuthentication yes
vi /etc/ssh/sshd_config
sudo systemctl restart sshd
image.png

四臺(tái)機(jī)器公共執(zhí)行命令

su -
#密碼
vagrant
service docker restart
yum install -y lrzsz

注意:下面除了jenkins的機(jī)器不是使用docker,其他全部使用docker全裝

66.100 gitlab安裝

管理員:root
密碼:123456789qwe

mkdir gitlab
cd gitlab
vi start.sh
mkdir postgresql redis gitlab 
chown -R 200 postgresql
chown -R 200 redis
chown -R 200 gitlab
  • 編寫(xiě)腳本
cur_dir=`pwd`
docker stop gitlab-postgresql
docker rm gitlab-postgresql
docker stop gitlab-redis
docker rm gitlab-redis
docker stop gitlab
docker rm gitlab
docker run --name gitlab-postgresql -d \
    --env 'DB_NAME=gitlabhq_production' \
    --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
    --env 'DB_EXTENSION=pg_trgm' \
    --volume ${cur_dir}/postgresql:/var/lib/postgresql \
    sameersbn/postgresql:10
docker run --name gitlab-redis -d \
    --volume ${cur_dir}/redis:/var/lib/redis \
    sameersbn/redis:4.0.9-1
docker run --name gitlab -d \
    --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
    --publish 10022:22 --publish 10080:80 \
    --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
    --env 'GITLAB_ROOT_PASSWORD=123456789qwe' \
    --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
    --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
    --volume ${cur_dir}/gitlab:/home/git/data \
    sameersbn/gitlab[root@gitlab ~]# 
  • 啟動(dòng)gitlab

重點(diǎn)說(shuō)下 不要用rz來(lái)上傳我提供的start.sh腳本sh start.sh的時(shí)候會(huì)報(bào)錯(cuò)。sh start.sh需要執(zhí)行兩遍仅孩,不要問(wèn)我為啥托猩,我也不知道,第一遍執(zhí)行玩容器自己就掛掉了辽慕,在啟動(dòng)一遍就好了

sh start.sh
sh start.sh

66.101 jenkins安裝

這個(gè)不使用容器京腥,相對(duì)來(lái)說(shuō)安裝比較復(fù)雜些。這個(gè)機(jī)器不光需要安裝jenkins溅蛉,還需要安裝maven公浪,git,jdk1.8

  • 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋船侧,寫(xiě)了個(gè)腳本
# @Author: liming
# @Date:   2018-11-26 23:14:59
# @Last Modified by:   liming
# @Last Modified time: 23:15:05
# @urlblog idig8.com
# 個(gè)人公眾號(hào)  編程坑太多

#!/bin/bash
SOFT_PATH=/opt/soft

if [ ! -d $SOFT_PATH ];then
mkdir $SOFT_PATH
else
echo "文件夾已經(jīng)存在"
fi

yum install -y wget 
#install jdk1.8
cd $SOFT_PATH
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
tar -zxvf jdk* -C $SOFT_PATH
cd jdk*
JAVA_HOME=`pwd` 

#install maven3.2.3
cd $SOFT_PATH
wget https://archive.apache.org/dist/maven/maven-3/3.2.3/binaries/apache-maven-3.2.3-bin.tar.gz
tar -zxvf apache-maven-3.2.3-bin.tar.gz -C $SOFT_PATH
mv apache-maven-3.2.3 maven-3.2.3
cd maven*
MAVEN_HOME=`pwd`

#install git 2.8.0
cd $SOFT_PATH
yum -y install zlib-devel openssl-devel cpio expat-devel gettext-devel curl-devel perl-ExtUtils-CBuilder perl-ExtUtils- MakeMaker
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.8.0.tar.gz
tar -zxvf git-2.8.0.tar.gz -C $SOFT_PATH
cd git*
./configure
make install
ln -s /usr/local/bin/git /usr/bin/git

#追加環(huán)境變量
echo "export JAVA_HOME=${JAVA_HOME}" >> /etc/profile
echo "export PATH=$""JAVA_HOME/bin:$""PATH" >> /etc/profile
echo "export MAVEN_HOME=${MAVEN_HOME}" >> /etc/profile
echo "export PATH=$""MAVEN_HOME/bin:$""PATH" >> /etc/profile
source /etc/profile
#輸出信息
echo "-----source update-----"
echo "java version"
java -version
echo "maven version"
mvn -v
echo "-----path-----"
echo "JAVA_HOME:"$JAVA_HOME
echo "MAVEN_HOME:"$MAVEN_HOME
source /etc/profile
  • 查看環(huán)境變量

如果環(huán)境變量不生效請(qǐng)執(zhí)行:source /etc/profile

source /etc/profile
git --version
java -version
mvn -v   
  • 下載jenkins

官網(wǎng):https://jenkins.io/

下載jenkins

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war
# 先這樣啟動(dòng)目的是直接可以看到秘鑰因?yàn)榈谝淮伟惭b需要秘鑰
java -jar jenkins.war --ajp13Port=-1 --httpPort=8888
#這是后臺(tái)啟動(dòng)
nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &
  • pipline的插件全部安裝
  • 之前我也用docker安裝過(guò)jenkins插件老安裝失敗各種錯(cuò)誤欠气。這次我不用docker插件全部安裝成功

66.102 nexus安裝

管理員:admin
密碼:admin123

mkdir nexus
cd nexus
vi start.sh
mkdir data && chown -R 200 data
  • start.sh
#!/bin/bash
cur_dir=`pwd`
docker stop nexus
docker rm nexus
docker run -d -p 8081:8081 --name nexus -v  ${cur_dir}/data:/sonatype-work sonatype/nexus
  • 啟動(dòng)腳本
sh start.sh

66.103 tomcat安裝

tomcat 還講什么?不懂镜撩?干就完了 兄弟预柒!

mkdir tomcat
cd tomcat
vi start.sh
  • 腳本
#!/bin/bash
cur_dir=`pwd`
docker stop tomcat
docker rm tomcat
docker run --name tomcat -p 8080:8080 -v ${cur_dir}/tomcat-persistence:/bitnami bitnami/tomcat:latest
  • 啟動(dòng)腳本
sh start.sh
  • war包放在這里

以上所有的程序安裝已經(jīng)完畢,開(kāi)始進(jìn)行自動(dòng)化的部署流程

應(yīng)用 IP地址 服務(wù) 端口 安裝應(yīng)用 安裝方式
gitlab 192.168.66.100 gitlab 10080 gitlab docker
jenkins 192.168.66.101 jenkins 8888 jdk8 maven3.2 git2.8 shell
nexus 192.168.66.102 nexus 8081 nexus docker
tomcat 192.168.66.103 tomcat 8080 tomcat docker

PS:下一步將關(guān)聯(lián)這4臺(tái)服務(wù)器袁梗,進(jìn)行本地代碼的提交到gitlab宜鸯,然后由jenkins操作命令的形式進(jìn)行自動(dòng)化的部署。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末围段,一起剝皮案震驚了整個(gè)濱河市顾翼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌奈泪,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灸芳,死亡現(xiàn)場(chǎng)離奇詭異涝桅,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)烙样,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門冯遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人谒获,你說(shuō)我怎么就攤上這事蛤肌。” “怎么了批狱?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵裸准,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我赔硫,道長(zhǎng)炒俱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮权悟,結(jié)果婚禮上砸王,老公的妹妹穿的比我還像新娘。我一直安慰自己峦阁,他們只是感情好谦铃,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著榔昔,像睡著了一般荷辕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上件豌,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天疮方,我揣著相機(jī)與錄音,去河邊找鬼茧彤。 笑死骡显,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的曾掂。 我是一名探鬼主播惫谤,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼珠洗!你這毒婦竟也來(lái)了溜歪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤许蓖,失蹤者是張志新(化名)和其女友劉穎蝴猪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體膊爪,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡自阱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了米酬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片沛豌。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赃额,靈堂內(nèi)的尸體忽然破棺而出加派,到底是詐尸還是另有隱情,我是刑警寧澤跳芳,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布芍锦,位于F島的核電站,受9級(jí)特大地震影響筛严,放射性物質(zhì)發(fā)生泄漏醉旦。R本人自食惡果不足惜饶米,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望车胡。 院中可真熱鬧檬输,春花似錦、人聲如沸匈棘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)主卫。三九已至逃默,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間簇搅,已是汗流浹背完域。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘩将,地道東北人吟税。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姿现,于是被迫代替她去往敵國(guó)和親肠仪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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