原創(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
四臺(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)化的部署。