『網際網路架構』軟體架構-jenkins搭建和 maven gitlab自動化部署流程(上)(五)
幾年前沒用過jenkins的時候,每次都需要用eclipse打個war包,然後小心翼翼的上傳到伺服器,給伺服器原有的war包改個名字,mv到bak目錄中,停止服務,刪除原有的webapps的專案,再把新上傳的war包放進到tomcat的webapp說的目錄下,啟動專案。每次改個html的標籤的名字都需要重新上傳,每次都是這麼繁瑣的操作。其實小公司還可以容忍,如果是比較大的專案,還持續停留在這個指令碼上運維人員都累死了,因為有可能一次部署幾十個專案。原始碼:https://github.com/limingios/netFuture/tree/master/jenkins/ysource/idig8
jenkins
-
歷史
>Hudson是在2004年的夏天由Sun公司開發
2005年2月開源併發布了第一個版本。
Hudson釋出的時候CruiseControl是CI界的老大哥,但是很快,在大約2007年的時候Hudson已經超越CruiseControl。2008年5月的JavaOne大會上,Hudson獲得了開發解決方案類的Duke’s Choice獎項。從此,小弟翻身做大哥,Hudson成為CI的代名詞。
2010年9月,烏龜殼公司偷偷把Hudson®™變成了註冊商標。2010年11月,Hudson社群的核心開發人員發現並angry了,雙方進行了不太友好的會談,不出意料的談崩了。聖誕節過後,
>2011年的第一場雪,比以往來的要晚一些,幾個禿頂的大叔在McDonald‘s的豪華包間裡做了一個艱難的決定:
mv -f hudson jenkins
>Hudson和Jenkins都擁有程式碼;
Hudson有Oracle和Sonatype’s corporate的支援和Hudson的註冊商標
Jenkins擁有的是大多數的核心開發者,社群,和後續更多的commit。
jenkins git 、maven gitlab 、tomcat 構建持續整合環境 流程
1> 開發者將新版本push到git server (Gitlab)。
2> Gitlab隨後觸發jenkins master結點進行一次build。(通過web hook或者定時檢測)
3> jenkins master結點將這個build任務分配給若干個註冊的slave結點中的一個,這個slave結點根據一個事先設定好的指令碼進行build。這個指令碼可以做的事情很多,比如編譯,測試,生成測試報告等等。這些原本需要手動完成的任務都可以交給jenkins來做。
4> 我們在build中要進行編譯,這裡使用了分散式編譯器distcc來加快編譯速度。
jenkins的工作原理是先將原始碼從gitlab中拷貝一份到本地,然後根據設定的指令碼進行build。我們可以看出,整個系統的關鍵就是那個build指令碼,用來告訴jenkins在一次整合中需要執行的任務。
這次將結合一個比較簡單maven聚合專案,結合之前的maven私服,git私服和將要搭建的jenkins完成自動化構建。
-
gitlab,nexus私服,jenkins,tomcat的搭建
>通過原始碼生成4個虛擬機器,準備工作。vagrant已經安裝了 對應的docker。
用docker安裝nexus就是為了避免環境變數,使用者賦權等複雜的操作。對於vagrant的如何安裝不用的系統不一樣可以參看
> mac 安裝vgarant :https://idig8.com/2018/07/29/docker-zhongji-07/
> window安裝vgaranthttps://idig8.com/2018/07/29/docker-zhongji-08/
系統型別 | IP地址 | 節點角色 | 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). 虛擬機器vagrant講述安裝的步驟
vagrant up
(2).機器window/mac開通遠端登入root使用者下
su - # 密碼 vagrant #設定 PasswordAuthentication yes vi /etc/ssh/sshd_config sudo systemctl restart sshd
四臺機器公共執行命令
su - #密碼 vagrant service docker restart yum install -y lrzsz
注意:下面除了jenkins的機器不是使用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
- 編寫指令碼
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 ~]#
-
啟動gitlab
>重點說下 不要用rz來上傳我提供的start.sh指令碼sh start.sh的時候會報錯。sh start.sh需要執行兩遍,不要問我為啥,我也不知道,第一遍執行玩容器自己就掛掉了,在啟動一遍就好了
sh start.sh sh start.sh
66.101 jenkins安裝
這個不使用容器,相對來說安裝比較複雜些。這個機器不光需要安裝jenkins,還需要安裝maven,git,jdk1.8
- 為了讓各位老鐵安裝jdk1.8 git 和maven美滋滋,寫了個指令碼
# @Author: liming # @Date:2018-11-26 23:14:59 # @Last Modified by:liming # @Last Modified time: 23:15:05 # @urlblog idig8.com # 個人公眾號程式設計坑太多 #!/bin/bash SOFT_PATH=/opt/soft if [ ! -d $SOFT_PATH ];then mkdir $SOFT_PATH else echo "資料夾已經存在" 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 #追加環境變數 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
-
檢視環境變數
> 如果環境變數不生效請執行:source /etc/profile
source /etc/profile git --version java -version mvn -v ````  * 下載jenkins >官網:https://jenkins.io/  >下載jenkins ``` bash wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.138.3/jenkins.war # 先這樣啟動目的是直接可以看到祕鑰因為第一次安裝需要祕鑰 java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 #這是後臺啟動 nohup java -jar jenkins.war --ajp13Port=-1 --httpPort=8888 &
- pipline的外掛全部安裝
- 之前我也用docker安裝過jenkins外掛老安裝失敗各種錯誤。這次我不用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
- 啟動指令碼
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
- 啟動指令碼
sh start.sh
- war包放在這裡
以上所有的程式安裝已經完畢,開始進行自動化的部署流程
應用 | IP地址 | 服務 | 埠 | 安裝應用 | 安裝方式 |
---|---|---|---|---|---|
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:下一步將關聯這4臺伺服器,進行原生代碼的提交到gitlab,然後由jenkins操作命令的形式進行自動化的部署。
>>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>>原文連結地址:上一篇:已是最新文章