介紹
如題,CI-CD整套部署過程及細(xì)節(jié)
教程
機(jī)器關(guān)閉selinux,firewalld。
jenkins與gitlab在同一臺(tái)機(jī)器,所用用戶均為root。
本教程所有服務(wù)均部署在一臺(tái)EC2上,但部署過程與分布式部署無異。
因所用EC2處于公網(wǎng)環(huán)境,修改Jenkins和gitlab訪問端口僅為一種安全思路。
一、創(chuàng)建EC2實(shí)例
在AWS的EC2控制臺(tái)中選擇啟動(dòng)實(shí)例,然后依次選擇
-->系統(tǒng)版本
-->實(shí)例類型- 選擇實(shí)例硬件配置,8G內(nèi)存足夠用
-->配置實(shí)例詳細(xì)信息- 網(wǎng)絡(luò)和子網(wǎng)選擇能用的就行,IAM角色暫時(shí)不創(chuàng)建,其他選項(xiàng)默認(rèn)即可
-->添加存儲(chǔ)- 20G夠用
-->添加標(biāo)簽- 例如:name uxian
-->配置安全組- 新建安全組默認(rèn)只開放入站22端口,出站關(guān)閉所有端口
-->審核和啟動(dòng)
安全組配置根據(jù)需要開啟對(duì)應(yīng)端口,否則將會(huì)影響對(duì)該服務(wù)器的web訪問


二、部署Gitlab
1、下載gitlab-rpm
下載地址:https://packages.gitlab.com/gitlab/gitlab-ce選擇最新版本即可
2、部署gitlab
依賴關(guān)系:
yum -y install curl policycoreutils openssh-server openssh-clients
安裝命令:
rpm -ivh gitlab*******.rpm
設(shè)置端口:
vim /etc/gitlab/gitlab.rb (默認(rèn)80,改為88)

相關(guān)命令:
gitlab-ctl reconfigure 重新讀取配置文件
/usr/bin/gitlab-ctl start 啟動(dòng)
加入開機(jī)自啟:
echo "/usr/bin/gitlab-ctl start" >> /etc/rc.d/rc.local
3、登錄并創(chuàng)建項(xiàng)目
第一次登錄會(huì)要求設(shè)置管理員用戶密碼
創(chuàng)建組→創(chuàng)建項(xiàng)目(代碼的容器)


4、為jenkins配置gitlab API Token、配置gitlab公鑰
在部署jenkins的模塊中一起說
三、部署Jenkins
1、下載所需軟件包
jenkins-rpm:https://pkg.jenkins.io/redhat-stable/選擇最新版即可
jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
git:https://mirrors.edge.kernel.org/pub/software/scm/git/選擇最新版即可
maven:http://mirror.bit.edu.cn/apache/maven/maven-3/選擇最新版本即可
2、安裝jenkins,不要啟動(dòng)
安裝命令:
rpm -ivh jenkins-*****.rpm
設(shè)置端口:
vim /etc/sysconfig/jenkins (默認(rèn)8080,改為8888)
3、部署java環(huán)境
解壓jdk包:
tar xvf jdk-8u151****
mv jdk1.8.0_151 /usr/local/java
聲明環(huán)境變量:
echo "export PATH=$[PATH:/usr/local/java/bin/](http://path/usr/local/java/bin/)" >> /etc/bashrc
source /etc/bashrc


4、部署git環(huán)境
依賴關(guān)系:
yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
安裝git:
tar xf git-2.9.5.tar.gz
cd git-2.9.5/
make prefix=/usr/local/git all;make prefix=/usr/local/git install
聲明環(huán)境變量:
echo "PATH=$PATH:[/usr/local/git/bin](http://bin/usr/local/git/bin)" >> /etc/bashrc
source /etc/bashrc

5、部署maven環(huán)境
安裝maven:
tar xvzf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
聲明環(huán)境變量:
echo "export PATH=$[PATH:/usr/local/maven/bin](http://path/usr/local/maven/bin)" >> /etc/bashrc
source /etc/bashrc
測(cè)試maven:mvn -version

6、啟動(dòng)并訪問jenkins界面
啟動(dòng)jenkins并設(shè)置開啟自啟:
systemctl start jenkins;systemctl enable jenkins
生成初始密碼:
cat /var/lib/jenkins/secrets/initialAdminPassword **登陸后修改密碼**
安裝推薦插件
安裝自定義插件:AWS codedeploy、Gitlab、Maven Integration、Gitlab Hook、Email Extension Plugin
7、jenkisn全局工具配置
jenkins界面-->系統(tǒng)管理-->全局工具配置


8、創(chuàng)建jenkins憑據(jù)(Gitlab API Token、SSH Username with private key)
-Gitlab API Token





-SSH Username with private key



--將公鑰文件內(nèi)容復(fù)制到gitlab端

--在jenkins端配置私鑰憑據(jù)



四、創(chuàng)建S3桶
在AWS的S3控制臺(tái)點(diǎn)擊創(chuàng)建存儲(chǔ)桶
名稱和區(qū)域
|-存儲(chǔ)桶名稱:按需設(shè)計(jì)
|-區(qū)域:隨意,盡量與EC2一致
配置選項(xiàng)
可以設(shè)置一個(gè)name標(biāo)簽,其他選項(xiàng)默認(rèn)為空即可,勾選是需要付費(fèi)的
設(shè)置權(quán)限
默認(rèn)設(shè)置,無需更改
審核
確認(rèn)無誤后即可創(chuàng)建存儲(chǔ)桶
五、在業(yè)務(wù)服務(wù)器安裝codedeploy-agent
codedeploy-agent本該安裝在部署業(yè)務(wù)的服務(wù)器上,但在該實(shí)驗(yàn)環(huán)境,連同gitlab,jenkins裝在一臺(tái)機(jī)器上。
但部署過程與分布式部署無異。
sudo yum install ruby
sudo yum install wget
cd /home/<username>
wget https://<bucket-name>.s3.amazonaws.com/latest/install
chmod +x ./install
sudo ./install auto
要檢查服務(wù)是否正在運(yùn)行,請(qǐng)運(yùn)行以下命令:
sudo service codedeploy-agent status 或 sudo systemctl status codedeploy-agent
啟動(dòng)服務(wù):
sudo service codedeploy-agent start 或 sudo systemctl start codedeploy-agent
<username>為業(yè)務(wù)服務(wù)器所用用戶名
<bucket-name> 是包含適用于您所在區(qū)域的 CodeDeploy 資源工具包文件的 Amazon S3sds-s3-latest-bucket-name 存儲(chǔ)桶的名稱。例如,對(duì)于 美國(guó)東部(俄亥俄)區(qū)域,將 <bucket-name> 替換為 aws-codedeploy-us-east-2。有關(guān)存儲(chǔ)桶名稱的列表,請(qǐng)參閱各區(qū)域的資源工具包存儲(chǔ)桶名稱。
六、在AWS Codedeploy控制臺(tái)創(chuàng)建應(yīng)用程序
點(diǎn)擊
創(chuàng)建應(yīng)用程序
-應(yīng)用程序名稱:按需填寫
-部署組名稱:按需填寫
部署類型
選擇就地部署即可,關(guān)于就地部署/藍(lán)綠部署
環(huán)境配置
選擇Amazon EC2實(shí)例,通過標(biāo)簽鍵值對(duì)選中第一步創(chuàng)建的EC2實(shí)例
匹配的實(shí)例
選中的EC2實(shí)例基本信息將顯示在這里
負(fù)載均衡器
不需要選中
部署配置
三種部署配置選擇,隨意一個(gè)都可以
七、創(chuàng)建IAM角色配置策略并關(guān)聯(lián)EC2和AWS Codedeploy
1、IAM角色簡(jiǎn)介
以上均為服務(wù)的部署安裝階段,到目前為止:jenkins、S3、codedeploy-agent端所在業(yè)務(wù)服務(wù)器還只是相互獨(dú)立的個(gè)體。
接下來要配置的IAM角色將是鏈接各部分的紐帶,它將原本相互獨(dú)立的個(gè)體整合到一個(gè)體系中。
為實(shí)現(xiàn)服務(wù)整合,需要配置兩個(gè)IAM角色:
1、業(yè)務(wù)服務(wù)器(codedeploy-agent所在EC2實(shí)例):最少需要擁有對(duì)S3的get、list權(quán)限
2、AWS CodeDeploy應(yīng)用程序:需要擁有codedeploy的操作權(quán)限、最低的S3put權(quán)限、EC2的操作權(quán)限
2、創(chuàng)建IAM角色并配置策略
1、在IAM控制面版選擇 創(chuàng)建角色,選擇受信任實(shí)體的類型 為 AWS產(chǎn)品,根據(jù)角色提供權(quán)限的對(duì)象選擇 將使用此角色的服務(wù)
2、為該角色創(chuàng)建權(quán)限策略,選擇擁有對(duì)哪項(xiàng)服務(wù)的權(quán)限,可使用可視化編輯器或JSON兩種方式編輯權(quán)限策略,能夠達(dá)到相應(yīng)權(quán)限即可
3、權(quán)限策略設(shè)置完成后,為該角色設(shè)置標(biāo)簽
4、審核無誤后創(chuàng)建成功
3、為EC2和AWS CodeDeploy關(guān)聯(lián)角色



八、創(chuàng)建并配置Jenkins項(xiàng)目完成自動(dòng)部署
1.創(chuàng)建一個(gè)maven項(xiàng)目

2.配置gitlab項(xiàng)目url

3.配置構(gòu)建觸發(fā)器(自動(dòng)構(gòu)建/定時(shí)構(gòu)建)
定時(shí)構(gòu)建:

與linux的計(jì)劃任務(wù)類似,五個(gè)參數(shù)分別為“分 時(shí) 日 月 周”,以空格為分隔符。示例如下:
--H/5 0-3 1,3 10,11 * 直譯:每5分鐘 0時(shí)到3時(shí)每隔1小時(shí) 周1與周3 10月與11月 所有周 翻譯:在10月和11月的 每周的 周1和周3的 0點(diǎn)到3點(diǎn)之間 每5分鐘 執(zhí)行構(gòu)建
觸發(fā)器構(gòu)建:







若出現(xiàn)其他報(bào)錯(cuò),極大可能為請(qǐng)求未能找到j(luò)enkins服務(wù)器,請(qǐng)檢查url或代理設(shè)置或相關(guān)安全策略等。。
4.配置BUILD(構(gòu)建)步驟

關(guān)于編譯命令:
-e 控制maven的日志級(jí)別,產(chǎn)生執(zhí)行錯(cuò)誤相關(guān)信息
-T 線程數(shù),可以并行地構(gòu)建那些相互間沒有依賴關(guān)系的模塊,充分利用多核CPU資源
此處隱藏了開頭的mvn命令,因?yàn)閖enkins會(huì)自動(dòng)補(bǔ)上,加上反而會(huì)報(bào)錯(cuò)
4.1 maven構(gòu)建步驟(擴(kuò)展)
在進(jìn)行配置maven的構(gòu)建選項(xiàng)前,先了解一下源碼文件通過maven編譯打包的過程:
首先,開發(fā)人員根據(jù)項(xiàng)目需要編寫的pom.xml文件,pom.xml會(huì)詳細(xì)地為maven指明編譯打包過程的所需資源和步驟(例如打包類型、所需依賴...)。pom.xml文件參考:https://blog.csdn.net/qq_33363618/article/details/79438044
然后,maven會(huì)通過jenkins上配置的構(gòu)建操作命令依據(jù)pom.xml文件完成編譯打包。運(yùn)維人員要負(fù)責(zé)的就是根據(jù)需要選擇使用編譯命令,并在jenkins配置好相關(guān)設(shè)置。
以下為常用的maven編譯命令和區(qū)別:
~mvn clean 將以前編譯得到的舊的 class 字節(jié)碼文件刪除
~mvn clean package依次執(zhí)行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7個(gè)階段。
~mvn clean install依次執(zhí)行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install等8個(gè)階段。
~mvn clean deploy依次執(zhí)行了clean、resources、compile、testResources、testCompile、test、jar(打包)、install、deploy等9個(gè)階段。
由上面的分析可知主要區(qū)別如下,
package命令完成了項(xiàng)目編譯、單元測(cè)試、打包功能,但沒有把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù)和遠(yuǎn)程maven私服倉(cāng)庫(kù)
install命令完成了項(xiàng)目編譯、單元測(cè)試、打包功能,同時(shí)把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù),但沒有布署到遠(yuǎn)程maven私服倉(cāng)庫(kù)
deploy命令完成了項(xiàng)目編譯、單元測(cè)試、打包功能,同時(shí)把打好的可執(zhí)行jar包(war包或其它形式的包)布署到本地maven倉(cāng)庫(kù)和遠(yuǎn)程maven私服倉(cāng)庫(kù)
原文:https://blog.csdn.net/zhaojianting/article/details/80324533
關(guān)于maven倉(cāng)庫(kù):
默認(rèn)本地倉(cāng)庫(kù):通常在用戶家目錄的 ~/.m2/repository/ 路徑下。最直接的配置庫(kù)方式是在項(xiàng)目中的pom.xml文件中,通過<repositories>配置。
可以存放從遠(yuǎn)程庫(kù)中下載到本地的部分構(gòu)依賴構(gòu)件、構(gòu)建完成后的項(xiàng)目文件。
遠(yuǎn)程倉(cāng)庫(kù):類似yum倉(cāng)庫(kù)的存在,為項(xiàng)目編譯所需的依賴構(gòu)件提供下載地址。
分公有倉(cāng)庫(kù)和私有倉(cāng)庫(kù)??梢宰越ㄋ接袔?kù)用來存放構(gòu)件和構(gòu)建完成后的項(xiàng)目文件。
阿里等大廠的倉(cāng)庫(kù)也屬于自建的私有庫(kù),不過相對(duì)延遲較低,使用人群較多,屬于公有庫(kù)規(guī)模的私有庫(kù)。
如果一個(gè)項(xiàng)目需要依賴一個(gè)構(gòu)件,Maven編譯的時(shí)候會(huì)首先從本地庫(kù)查找該構(gòu)件。如果本地庫(kù)中沒有,再根據(jù)配置的遠(yuǎn)程庫(kù)信息,逐個(gè)去遠(yuǎn)程庫(kù)中查找該構(gòu)件。
5.構(gòu)建后操作----將應(yīng)用程序部署到 AWS CodeDeploy


6.構(gòu)建后操作----可編輯的電子郵件通知
使用jenkins更強(qiáng)大的郵件通知功能,需要下載插件 Email Extension Plugin。然后
在系統(tǒng)設(shè)置中配置電子郵件通知功能
系統(tǒng)管理 --> 系統(tǒng)設(shè)置 --> Extended E-mail Notification