蘇州做網(wǎng)站外包的公司有哪些win7優(yōu)化
1 今日內(nèi)容介紹
1.1 什么是持續(xù)集成
持續(xù)集成( Continuous integration , 簡(jiǎn)稱 CI )指的是,頻繁地(一天多次)將代碼集成到主干
持續(xù)集成的組成要素
一個(gè)自動(dòng)構(gòu)建過(guò)程, 從檢出代碼、 編譯構(gòu)建、 運(yùn)行測(cè)試、 結(jié)果記錄、 測(cè)試統(tǒng)計(jì)等都是自動(dòng)完成的, 無(wú)需人工干預(yù)。
一個(gè)代碼存儲(chǔ)庫(kù),即需要版本控制軟件來(lái)保障代碼的可維護(hù)性,同時(shí)作為構(gòu)建過(guò)程的素材庫(kù),一般使用SVN或Git。
一個(gè)持續(xù)集成服務(wù)器, Jenkins 就是一個(gè)配置簡(jiǎn)單和使用方便的持續(xù)集成服務(wù)器。
1.2 持續(xù)集成的好處
1、降低風(fēng)險(xiǎn),由于持續(xù)集成不斷去構(gòu)建,編譯和測(cè)試,可以很早期發(fā)現(xiàn)問(wèn)題,所以修復(fù)的代價(jià)就少; 2、對(duì)系統(tǒng)健康持續(xù)檢查,減少發(fā)布風(fēng)險(xiǎn)帶來(lái)的問(wèn)題; 3、減少重復(fù)性工作; 4、持續(xù)部署,提供可部署單元包; 5、持續(xù)交付可供使用的版本; 6、增強(qiáng)團(tuán)隊(duì)信心;
1.3 今日內(nèi)容
2 軟件開(kāi)發(fā)模式
2.1 軟件開(kāi)發(fā)生命周期
軟件開(kāi)發(fā)生命周期又叫做SDLC(Software Development Life Cycle),它是集合了計(jì)劃、開(kāi)發(fā)、測(cè)試和部署過(guò)程的集合。如下圖所示 :
-
需求分析
這是生命周期的第一階段,根據(jù)項(xiàng)目需求,團(tuán)隊(duì)執(zhí)行一個(gè)可行性計(jì)劃的分析。項(xiàng)目需求可能是公司內(nèi)部或者客戶提出的。這階段主要是對(duì)信息的收集,也有可能是對(duì)現(xiàn)有項(xiàng)目的改善和重新做一個(gè)新的項(xiàng)目。還要分析項(xiàng)目的預(yù)算多長(zhǎng),可以從哪方面受益及布局,這也是項(xiàng)目創(chuàng)建的目標(biāo)。
-
設(shè)計(jì)
第二階段就是設(shè)計(jì)階段,系統(tǒng)架構(gòu)和滿意狀態(tài)(就是要做成什么樣子,有什么功能),和創(chuàng)建一個(gè)項(xiàng)目計(jì)劃。計(jì)劃可以使用圖表,布局設(shè)計(jì)或者文字的方式呈現(xiàn)。
-
實(shí)現(xiàn)
第三階段就是實(shí)現(xiàn)階段,項(xiàng)目經(jīng)理創(chuàng)建和分配工作給開(kāi)者,開(kāi)發(fā)者根據(jù)任務(wù)和在設(shè)計(jì)階段定義的目標(biāo)進(jìn)行開(kāi)發(fā)代碼。依據(jù)項(xiàng)目的大小和復(fù)雜程度,可以需要數(shù)月或更長(zhǎng)時(shí)間才能完成。
-
測(cè)試
測(cè)試人員進(jìn)行代碼測(cè)試 ,包括功能測(cè)試、代碼測(cè)試、壓力測(cè)試等。
-
進(jìn)化
最后進(jìn)階段就是對(duì)產(chǎn)品不斷的進(jìn)化改進(jìn)和維護(hù)階段,根據(jù)用戶的使用情況,可能需要對(duì)某功能進(jìn)行修改,bug修復(fù),功能增加等。
2.2 軟件開(kāi)發(fā)瀑布模型
瀑布模型是最著名和最常使用的軟件開(kāi)發(fā)模型。瀑布模型就是一系列的軟件開(kāi)發(fā)過(guò)程。它是由制造業(yè)繁衍出來(lái)的。一個(gè)高度化的結(jié)構(gòu)流程在一個(gè)方向上流動(dòng),有點(diǎn)像生產(chǎn)線一樣。在瀑布模型創(chuàng)建之初,沒(méi)有其它開(kāi)發(fā)的模型,有很多東西全靠開(kāi)發(fā)人員去猜測(cè),去開(kāi)發(fā)。這樣的模型僅適用于那些簡(jiǎn)單的軟件開(kāi)發(fā), 但是已經(jīng)不適合現(xiàn)在的開(kāi)發(fā)了。
下圖對(duì)軟件開(kāi)發(fā)模型的一個(gè)闡述。
優(yōu)勢(shì) | 劣勢(shì) |
---|---|
簡(jiǎn)單易用和理解 | 各個(gè)階段的劃分完全固定,階段之間產(chǎn)生大量的文檔,極大地增加了工作量。 |
當(dāng)前一階段完成后,您只需要去關(guān)注后續(xù)階段。 | 由于開(kāi)發(fā)模型是線性的,用戶只有等到整個(gè)過(guò)程的末期才能見(jiàn)到開(kāi)發(fā)成果,從而增加了開(kāi)發(fā)風(fēng)險(xiǎn)。 |
為項(xiàng)目提供了按階段劃分的檢查節(jié)點(diǎn) | 瀑布模型的突出缺點(diǎn)是不適應(yīng)用戶需求的變化。 |
2.3 軟件的敏捷開(kāi)發(fā)
-
什么是敏捷開(kāi)發(fā)?
敏捷開(kāi)發(fā)(Agile Development) 的核心是迭代開(kāi)發(fā)(Iterative Development) 與 增量開(kāi)發(fā)(Incremental Development)。
-
何為迭代開(kāi)發(fā)?
對(duì)于大型軟件項(xiàng)目,傳統(tǒng)的開(kāi)發(fā)方式是采用一個(gè)大周期(比如一年)進(jìn)行開(kāi)發(fā),整個(gè)過(guò)程就是一次"大開(kāi)發(fā)";迭代開(kāi)發(fā)的方式則不一樣,它將開(kāi)發(fā)過(guò)程拆分成多個(gè)小周期,即一次"大開(kāi)發(fā)"變成多次"小開(kāi)發(fā)",每次小開(kāi)發(fā)都是同樣的流程,所以看上去就好像重復(fù)在做同樣的步驟。
舉例來(lái)說(shuō),SpaceX 公司想造一個(gè)大推力火箭,將人類送到火星。但是,它不是一開(kāi)始就造大火箭,而是先造一個(gè)最簡(jiǎn)陋的小火箭 Falcon 1。結(jié)果,第一次發(fā)射就爆炸了,直到第四次發(fā)射,才成功進(jìn)入軌道。然后,開(kāi)發(fā)了中型火箭 Falcon 9,九年中發(fā)射了70次。最后,才開(kāi)發(fā) Falcon 重型火箭。如果SpaceX 不采用迭代開(kāi)發(fā),它可能直到現(xiàn)在還無(wú)法上天。
-
何為增量開(kāi)發(fā)?
軟件的每個(gè)版本,都會(huì)新增一個(gè)用戶可以感知的完整功能。也就是說(shuō),按照新增功能來(lái)劃分迭代。
舉例來(lái)說(shuō),房產(chǎn)公司開(kāi)發(fā)一個(gè)10棟樓的小區(qū)。如果采用增量開(kāi)發(fā)的模式,該公司第一個(gè)迭代就是交付一號(hào)樓,第二個(gè)迭代交付二號(hào)樓......每個(gè)迭代都是完成一棟完整的樓。而不是第一個(gè)迭代挖好10棟樓的地基,第二個(gè)迭代建好每棟樓的骨架,第三個(gè)迭代架設(shè)屋頂......
-
敏捷開(kāi)發(fā)如何迭代?
雖然敏捷開(kāi)發(fā)將軟件開(kāi)發(fā)分成多個(gè)迭代,但是也要求,每次迭代都是一個(gè)完整的軟件開(kāi)發(fā)周期,必須按照軟件工程的方法論,進(jìn)行正規(guī)的流程管理。
-
敏捷開(kāi)發(fā)有什么好處?
-
早期交付
敏捷開(kāi)發(fā)的第一個(gè)好處,就是早期交付,從而大大降低成本。 還是以上一節(jié)的房產(chǎn)公司為例,如果按照傳統(tǒng)的"瀑布開(kāi)發(fā)模式",先挖10棟樓的地基、再蓋骨架、然后架設(shè)屋頂,每個(gè)階段都等到前一個(gè)階段完成后開(kāi)始,可能需要兩年才能一次性交付10棟樓。也就是說(shuō),如果不考慮預(yù)售,該項(xiàng)目必須等到兩年后才能回款。 敏捷開(kāi)發(fā)是六個(gè)月后交付一號(hào)樓,后面每?jī)蓚€(gè)月交付一棟樓。因此,半年就能回款10%,后面每個(gè)月都會(huì)有現(xiàn)金流,資金壓力就大大減輕了。
-
降低風(fēng)險(xiǎn)
敏捷開(kāi)發(fā)的第二個(gè)好處是,及時(shí)了解市場(chǎng)需求,降低產(chǎn)品不適用的風(fēng)險(xiǎn)。 請(qǐng)想一想,哪一種情況損失比較小:10棟樓都造好以后,才發(fā)現(xiàn)賣不出去,還是造好第一棟樓,就發(fā)現(xiàn)賣不出去,從而改進(jìn)或停建后面9棟樓?
-
3 Jenkins安裝配置
3.1 Jenkins介紹
Jenkins 是一款流行的開(kāi)源持續(xù)集成(Continuous Integration)工具,廣泛用于項(xiàng)目開(kāi)發(fā),具有自動(dòng)化構(gòu)建、測(cè)試和部署等功能。官網(wǎng):?http://jenkins-ci.org/。
Jenkins的特征:
- 開(kāi)源的 Java語(yǔ)言開(kāi)發(fā)持續(xù)集成工具,支持持續(xù)集成,持續(xù)部署。
- 易于安裝部署配置:可通過(guò) yum安裝,或下載war包以及通過(guò)docker容器等快速實(shí)現(xiàn)安裝部署,可方便web界面配置管理。
- 消息通知及測(cè)試報(bào)告:集成 RSS/E-mail通過(guò)RSS發(fā)布構(gòu)建結(jié)果或當(dāng)構(gòu)建完成時(shí)通過(guò)e-mail通知,生成JUnit/TestNG測(cè)試報(bào)告。
- 分布式構(gòu)建:支持 Jenkins能夠讓多臺(tái)計(jì)算機(jī)一起構(gòu)建/測(cè)試。
- 文件識(shí)別: Jenkins能夠跟蹤哪次構(gòu)建生成哪些jar,哪次構(gòu)建使用哪個(gè)版本的jar等。
- 豐富的插件支持:支持?jǐn)U展插件,你可以開(kāi)發(fā)適合自己團(tuán)隊(duì)使用的工具,如 git,svn,maven,docker等。
Jenkins安裝和持續(xù)集成環(huán)境配置
1 )首先,開(kāi)發(fā)人員每天進(jìn)行代碼提交,提交到Git倉(cāng)庫(kù)
2)然后,Jenkins作為持續(xù)集成工具,使用Git工具到Git倉(cāng)庫(kù)拉取代碼到集成服務(wù)器,再配合JDK,Maven等軟件完成代碼編譯,代碼測(cè)試與審查,測(cè)試,打包等工作,在這個(gè)過(guò)程中每一步出錯(cuò),都重新再執(zhí)行一次整個(gè)流程。
3)最后,Jenkins把生成的jar或war包分發(fā)到測(cè)試服務(wù)器或者生產(chǎn)服務(wù)器,測(cè)試人員或用戶就可以訪問(wèn)應(yīng)用。
3.2 Jenkins環(huán)境搭建
3.2.1 Jenkins安裝配置
可以導(dǎo)入資料中的鏡像:
服務(wù)器用戶名:root 密碼:itcastjenkins 用戶名:itcast 密碼:itcast
Copy to clipboardErrorCopied
-
采用YUM方式安裝
加入jenkins安裝源:
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo --no-check-certificatesudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
Copy to clipboardErrorCopied執(zhí)行yum命令安裝:
yum -y install jenkins
Copy to clipboardErrorCopied -
采用RPM安裝包方式
Jenkins安裝包下載地址
wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
Copy to clipboardErrorCopied執(zhí)行安裝:
rpm -ivh jenkins-2.190.1-1.1.noarch.rpm
Copy to clipboardErrorCopied -
配置:
修改配置文件:
vi /etc/sysconfig/jenkins
Copy to clipboardErrorCopied修改內(nèi)容:
# 修改為對(duì)應(yīng)的目標(biāo)用戶, 這里使用的是root $JENKINS_USER="root" # 服務(wù)監(jiān)聽(tīng)端口 JENKINS_PORT="16060"
Copy to clipboardErrorCopied目錄權(quán)限:
chown -R root:root /var/lib/jenkins chown -R root:root /var/cache/jenkins chown -R root:root /var/log/jenkins
Copy to clipboardErrorCopied重啟:
systemctl restart jenkins
Copy to clipboardErrorCopied如果啟動(dòng)失敗, 出現(xiàn)錯(cuò)誤信息:
Starting Jenkins bash: /usr/bin/java: No such file or directory
Copy to clipboardErrorCopied創(chuàng)建JAVA環(huán)境的軟鏈接:
ln -s /usr/local/jdk/bin/java /usr/bin/java
Copy to clipboardErrorCopied -
管理后臺(tái)初始化設(shè)置
http://192.168.200.100:16060/
需要輸入管理密碼, 在以下位置查看:
cat /var/lib/jenkins/secrets/initialAdminPassword
Copy to clipboardErrorCopied按默認(rèn)設(shè)置,把建議的插件都安裝上
這一步等待時(shí)間較長(zhǎng), 安裝完成之后, 創(chuàng)建管理員用戶:
配置訪問(wèn)地址:
配置完成之后, 會(huì)進(jìn)行重啟, 之后可以看到管理后臺(tái):
3.2.2 Jenkins插件安裝
在實(shí)現(xiàn)持續(xù)集成之前, 需要確保以下插件安裝成功。
- Maven Integration plugin: Maven 集成管理插件。
- Docker plugin: Docker集成插件。
- GitLab Plugin: GitLab集成插件。
- Publish Over SSH:遠(yuǎn)程文件發(fā)布插件。
- SSH: 遠(yuǎn)程腳本執(zhí)行插件。
安裝方法:
-
進(jìn)入【系統(tǒng)管理】-【插件管理】
-
點(diǎn)擊標(biāo)簽頁(yè)的【可選插件】
在過(guò)濾框中搜索插件名稱
-
勾選插件, 點(diǎn)擊直接安裝即可。
注意,如果沒(méi)有安裝按鈕,需要更改配置
在安裝插件的高級(jí)配置中,修改升級(jí)站點(diǎn)的連接為:http://updates.jenkins.io/update-center.json?保存
3.2.3 Git安裝配置
-
yum 安裝方式
yum -y install git
Copy to clipboardErrorCopied -
采用源碼包方式安裝
-
安裝依賴包
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum -y install gcc perl-ExtUtils-MakeMaker
Copy to clipboardErrorCopied -
如果之前有安裝舊版本, 先做卸載, 沒(méi)有安裝則忽略
yum remove git
Copy to clipboardErrorCopied -
下載源碼包
cd /usr/local wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-1.8.3.1.tar.gz tar -xvf git-1.8.3.1.tar.gz
Copy to clipboardErrorCopied也可以安裝其他版本, 地址:Index of /pub/software/scm/git/
-
編譯安裝
cd git-1.8.3.1 make prefix=/usr/local/git all make prefix=/usr/local/git install echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc source /etc/bashrc
Copy to clipboardErrorCopied
-
-
檢查git版本
[root@localhost jenkins]# git version git version 1.8.3.1
Copy to clipboardErrorCopied
3.2.4 Maven安裝配置
-
下載安裝包
下載地址:?Maven – Download Apache Maven
-
解壓安裝包
cd /usr/local unzip -o apache-maven-3.6.1.zip
Copy to clipboardErrorCopied上傳本地倉(cāng)庫(kù)并解壓
-
配置
環(huán)境變量配置
vi /etc/profile
Copy to clipboardErrorCopied增加:
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.1 export PATH=$PATH:$MAVEN_HOME/bin
Copy to clipboardErrorCopied如果權(quán)限不夠,則需要增加當(dāng)前目錄的權(quán)限
chmod 777 /usr/local/maven/apache-maven-3.6.1/bin/mvn
Copy to clipboardErrorCopied修改鏡像倉(cāng)庫(kù)配置:
vi /usr/local/maven/apache-maven-3.6.1/conf/settings.xml
Copy to clipboardErrorCopied需要把本機(jī)的倉(cāng)庫(kù)打包上傳到服務(wù)器上(不上傳會(huì)自動(dòng)下載)
然后指定上傳后的倉(cāng)庫(kù)配置
3.2.5 Docker安裝配置
-
更新軟件包版本
yum -y update
Copy to clipboardErrorCopied -
卸載舊版本
yum -y remove docker docker-common docker-selinux docker-engine
Copy to clipboardErrorCopied -
安裝軟件依賴包
yum install -y yum-utils device-mapper-persistent-data lvm2
Copy to clipboardErrorCopied -
設(shè)置yum源為阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Copy to clipboardErrorCopied -
安裝后查看docker版本
docker -v
Copy to clipboardErrorCopied -
啟動(dòng)
設(shè)置開(kāi)機(jī)啟動(dòng):
systemctl enable docker
Copy to clipboardErrorCopied啟動(dòng)docker
systemctl start docker
Copy to clipboardErrorCopied
3.2.6 Docker Registry私有倉(cāng)庫(kù)安裝配置
3.3 Jenkins工具配置
-
進(jìn)入【系統(tǒng)管理】--> 【全局工具配置】
-
MAVEN配置全局設(shè)置
-
指定JDK配置
-
指定MAVEN 目錄
-
指定DOCKER目錄
如果不清楚docker的安裝的目錄,可以使用
whereis docker
?命令查看docker的安裝的目錄
4 后端項(xiàng)目部署
4.1 多環(huán)境切換
在項(xiàng)目開(kāi)發(fā)部署的過(guò)程中,一般都會(huì)有三套項(xiàng)目環(huán)境
-
Development :開(kāi)發(fā)環(huán)境
-
Production :生產(chǎn)環(huán)境
-
Test :測(cè)試環(huán)境
例如:開(kāi)發(fā)環(huán)境的mysql連接的是本地,生產(chǎn)環(huán)境需要連接線上的mysql環(huán)境
4.2 多環(huán)境切換-微服務(wù)中多環(huán)境配置
1.在微服務(wù)中的bootstrap.yml中新增配置
server:port: 51801
spring:application:name: leadnews-usercloud:nacos:discovery:server-addr: 192.168.200.130:8848config:server-addr: 192.168.200.130:8848file-extension: ymlprofiles:active: dev
Copy to clipboardErrorCopied
2.在nacos的配置中心中新增各個(gè)環(huán)境的配置文件,例如user微服務(wù)中新增
修改bootstrap.yml 添加內(nèi)容
spring:profiles:active: dev
Copy to clipboardErrorCopied
創(chuàng)建對(duì)應(yīng)的nacos的多環(huán)境配置:
注意事項(xiàng):
其中DataID屬性命名有規(guī)范:
- prefix,默認(rèn)使用${spring.application.name},也可以通過(guò)spring.cloud.nacos.config.prefix來(lái)配置。
- spring.profile.active,即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring Boot文檔。 注意:當(dāng) spring.profile.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}
- file-exetension,為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 properties 和 yaml 類型。
4.3 整體思路
目標(biāo):把黑馬頭條的app端相關(guān)的微服務(wù)部署到192.168.200.100這臺(tái)服務(wù)器上
4.4 服務(wù)集成Docker配置
目標(biāo):部署的每一個(gè)微服務(wù)都是先創(chuàng)建docker鏡像后創(chuàng)建對(duì)應(yīng)容器啟動(dòng)
方式一:本地微服務(wù)打包以后上傳到服務(wù)器,編寫(xiě)Dockerfile文件完成。
方式二:使用dockerfile-maven-plugin插件,可以直接把微服務(wù)創(chuàng)建為鏡像使用(更省事)
服務(wù)集成Docker配置
每個(gè)微服務(wù)都引入該依賴,以heima-leadnews-user微服務(wù)為例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>heima-leadnews-service</artifactId><groupId>com.heima</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>heima-leadnews-user</artifactId><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><docker.image>docker_storage</docker.image></properties><build><finalName>heima-leadnews-user</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.7.0</version><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><plugin><groupId>com.spotify</groupId><artifactId>dockerfile-maven-plugin</artifactId><version>1.3.6</version><configuration><repository>${docker.image}/${project.artifactId}</repository><buildArgs><JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE></buildArgs></configuration></plugin></plugins></build></project>
Copy to clipboardErrorCopied
服務(wù)集成Dockerfile文件
# 設(shè)置JAVA版本
FROM java:8
# 指定存儲(chǔ)卷, 任何向/tmp寫(xiě)入的信息都不會(huì)記錄到容器存儲(chǔ)層
VOLUME /tmp
# 拷貝運(yùn)行JAR包
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
# 設(shè)置JVM運(yùn)行參數(shù), 這里限定下內(nèi)存大小,減少開(kāi)銷
ENV JAVA_OPTS="\
-server \
-Xms256m \
-Xmx512m \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=512m"
#空參數(shù),方便創(chuàng)建容器時(shí)傳參
ENV PARAMS=""
# 入口點(diǎn), 執(zhí)行JAVA運(yùn)行命令
ENTRYPOINT ["sh","-c","java -jar $JAVA_OPTS /app.jar $PARAMS"]
Copy to clipboardErrorCopied
4.5 jenkins基礎(chǔ)依賴打包配置
在微服務(wù)運(yùn)行之前需要在本地倉(cāng)庫(kù)中先去install所依賴的jar包,所以第一步應(yīng)該是從git中拉取代碼,并且把基礎(chǔ)的依賴部分安裝到倉(cāng)庫(kù)中
1,父工程heima-leadnews
2,找到自己指定的git倉(cāng)庫(kù),設(shè)置用戶名和密碼
3,把基礎(chǔ)依賴信息安裝到服務(wù)器上的本地倉(cāng)庫(kù)
4,執(zhí)行
執(zhí)行日志,部分截圖,下面是從git中拉取代碼
執(zhí)行日志,部分截圖,編譯打包
執(zhí)行日志,部分截圖,執(zhí)行成功
4.6 jenkins微服務(wù)打包配置
所有微服務(wù)打包的方式類似,以heima-leadnews-user微服務(wù)為例
1,新建任務(wù)
2,找到自己指定的git倉(cāng)庫(kù),設(shè)置用戶名和密碼
3,執(zhí)行maven命令
clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-user/pom.xml
Copy to clipboardErrorCopied
注意:根據(jù)自己的實(shí)際代碼路徑配置
-Dmaven.test.skip=true 跳過(guò)測(cè)試
dockerfile:build 啟動(dòng)dockerfile插件構(gòu)建容器
-f heima-leadnews-user/pom.xml 指定需要構(gòu)建的文件(必須是pom)
4,并執(zhí)行shell腳本
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#刪除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理鏡像
docker image prune -f # 啟動(dòng)docker服務(wù)
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME docker_storage/$JOB_NAME
Copy to clipboardErrorCopied
5,執(zhí)行日志
拉取代碼
編譯打包
構(gòu)建鏡像
清理容器,創(chuàng)建新的容器
4.7 部署服務(wù)到遠(yuǎn)程服務(wù)器上
目標(biāo):使用jenkins(192.168.200.100)把微服務(wù)打包部署到192.168.200.130服務(wù)器上
4.7.1 安裝配置私有倉(cāng)庫(kù)
對(duì)于持續(xù)集成環(huán)境的配置,Jenkins會(huì)發(fā)布大量的微服務(wù), 要與多臺(tái)機(jī)器進(jìn)行交互, 可以采用docker鏡像的保存與導(dǎo)出功能結(jié)合SSH實(shí)現(xiàn), 但這樣交互繁瑣,穩(wěn)定性差, 而且不便管理, 這里我們通過(guò)搭建Docker的私有倉(cāng)庫(kù)來(lái)實(shí)現(xiàn), 這個(gè)有點(diǎn)類似GIT倉(cāng)庫(kù), 集中統(tǒng)一管理資源, 由客戶端拉取或更新。
-
下載最新Registry鏡像
docker pull registry:latest
Copy to clipboardErrorCopied -
啟動(dòng)Registry鏡像服務(wù)
docker run -d -p 5000:5000 --name registry -v /usr/local/docker/registry:/var/lib/registry registry:latest
Copy to clipboardErrorCopied映射5000端口; -v是將Registry內(nèi)的鏡像數(shù)據(jù)卷與本地文件關(guān)聯(lián), 便于管理和維護(hù)Registry內(nèi)的數(shù)據(jù)。
-
查看倉(cāng)庫(kù)資源
訪問(wèn)地址:http://192.168.200.100:5000/v2/_catalog
啟動(dòng)正常, 可以看到返回:
{"repositories":[]}
Copy to clipboardErrorCopied目前并沒(méi)有上傳鏡像, 顯示空數(shù)據(jù)。
如果上傳成功, 可以看到數(shù)據(jù):?
-
配置Docker客戶端
正常生產(chǎn)環(huán)境中使用, 要配置HTTPS服務(wù), 確保安全,內(nèi)部開(kāi)發(fā)或測(cè)試集成的局域網(wǎng)環(huán)境,可以采用簡(jiǎn)便的方式, 不做安全控制。
先確保持續(xù)集成環(huán)境的機(jī)器已安裝好Docker客戶端, 然后做以下修改:
vi /lib/systemd/system/docker.service
Copy to clipboardErrorCopied修改內(nèi)容:
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.200.100:5000
Copy to clipboardErrorCopied指向安裝Registry的服務(wù)IP與端口。
重啟生效:
systemctl daemon-reolad systemctl restart docker.service
Copy to clipboardErrorCopied
4.7.2 jenkins中安裝插件
4.7.3 jenkins系統(tǒng)配置遠(yuǎn)程服務(wù)器鏈接
位置:Manage Jenkins-->Configure System
需要添加憑證
位置:Manage Jenkins-->Manage CreDentials
添加鏈接到130服務(wù)器的用戶名和密碼
4.7.4 jenkins項(xiàng)目創(chuàng)建與其他微服務(wù)相同
創(chuàng)建項(xiàng)目參考之前創(chuàng)建過(guò)的用戶微服務(wù)
4.7.5 設(shè)置參數(shù)
4.7.6 構(gòu)建執(zhí)行Execute shell
maven命令
clean install -Dmaven.test.skip=true dockerfile:build -f heima-leadnews/heima-leadnews-service/heima-leadnews-article/pom.xml
Copy to clipboardErrorCopied
shell腳本
image_tag=$docker_registry/docker_storage/$JOB_NAME
echo '================docker鏡像清理================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#刪除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理鏡像
docker image prune -f # 創(chuàng)建TAG
docker tag docker_storage/$JOB_NAME $image_tag
echo '================docker鏡像推送================'
# 推送鏡像
docker push $image_tag
# 刪除TAG
docker rmi $image_tag
echo '================docker tag 清理 ================'
Copy to clipboardErrorCopied
4.7.7 在遠(yuǎn)程服務(wù)器上執(zhí)行腳本
遠(yuǎn)程服務(wù)器執(zhí)行的shell腳本
echo '================拉取最新鏡像================'
docker pull $docker_registry/docker_storage/$JOB_NAMEecho '================刪除清理容器鏡像================'
if [ -n "$(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )" ]then#刪除之前的容器docker rm -f $(docker ps -a -f name=$JOB_NAME --format '{{.ID}}' )
fi# 清理鏡像
docker image prune -f echo '===============啟動(dòng)容器================'
docker run -d --net=host -e PARAMS="--spring.profiles.active=prod" --name $JOB_NAME $docker_registry/docker_storage/$JOB_NAME
Copy to clipboardErrorCopied
4.7.8 構(gòu)建完成以后,可以登錄130服務(wù)器,查看是否有相關(guān)的鏡像和容器
鏡像
容器
4.8 聯(lián)調(diào)測(cè)試
1.參考jenkins中heima-leadnews-user微服務(wù)把a(bǔ)pp端網(wǎng)關(guān)部署起來(lái)
2.修改本地nginx中的配置反向代理地址為100這臺(tái)服務(wù)器:heima-leadnews-app.conf
upstream heima-app-gateway{server 192.168.200.100:51601;
}
Copy to clipboardErrorCopied
3.啟動(dòng)nginx,打開(kāi)頁(yè)面進(jìn)行測(cè)試
5 jenkins觸發(fā)器配置
5.1 URL觸發(fā)遠(yuǎn)程構(gòu)建
觸發(fā)遠(yuǎn)程構(gòu)建,修改jenkins的配置,如下
觸發(fā)構(gòu)建url:?http://192.168.200.100:16060/job/leadnews-admin/build?token=88888888
5.2 其他工程構(gòu)建后觸發(fā)
配置需要觸發(fā)的工程
5.3 定時(shí)構(gòu)建
定時(shí)構(gòu)建( Build periodically)
定時(shí)字符串從左往右分別為: 分 時(shí) 日 月 周
定時(shí)構(gòu)建-定時(shí)表達(dá)式
定時(shí)字符串從左往右分別為: 分 時(shí) 日 月 周
組成部分 | 含義 | 取值范圍 |
---|---|---|
第一部分 | minute (分) | 0~59 |
第二部分 | hour(小時(shí)) | 0~23 |
第三部分 | day(天) | 1~31 |
第四部分 | month(月) | 1~12 |
第五部分 | week(周) | 0~7,0 和 7 都是表示星期天 |
-
符號(hào)H 表示一個(gè)隨機(jī)數(shù)
-
符號(hào)* 取值范圍的任意值
案例:
-
每30分鐘構(gòu)建一次:H/30 * * * * 10:02 10:32
-
每2個(gè)小時(shí)構(gòu)建一次: H H/2 * * *
-
每天的8點(diǎn),12點(diǎn),22點(diǎn),一天構(gòu)建3次: (多個(gè)時(shí)間點(diǎn)中間用逗號(hào)隔開(kāi)) 0 8,12,22 * * *
-
每天中午12點(diǎn)定時(shí)構(gòu)建一次 H 12 * * *
-
每天下午18點(diǎn)定時(shí)構(gòu)建一次 H 18 * * *
5.4 輪詢
輪詢 SCM(Poll SCM)
輪詢SCM,是指定時(shí)掃描本地代碼倉(cāng)庫(kù)的代碼是否有變更,如果代碼有變更就觸發(fā)項(xiàng)目構(gòu)建。
Jenkins會(huì)定時(shí)掃描本地整個(gè)項(xiàng)目的代碼,增大系統(tǒng)的開(kāi)銷,不建議使用。