Gitlab+Jenkins+Maven+Codedeploy部署文檔

介紹

如題,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訪問

image
image

二、部署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)
image

相關(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)目(代碼的容器)

image
image

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
image
image

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
image

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

image

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)管理-->全局工具配置

image
image

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

-Gitlab API Token

image
image
image
image
image

-SSH Username with private key

image
image
image

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

image

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

image
image
image

四、創(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è)都可以

\color{red}{服務(wù)角色}
\color{red}{選擇已配置好對(duì)應(yīng)策略的IAM角色,下一目錄會(huì)有說到}

七、創(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)角色

EC2


AWS CodeDeploy控制臺(tái)選擇角色: 使用的是IAM的ARN,在該角色的詳細(xì)界面可以看到

八、創(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)建:

在高級(jí)選項(xiàng)中,取消勾選允許所有分支觸發(fā)構(gòu)建

在gitlab配置webhook

測(cè)試

測(cè)試成功即可在Jenkins控制臺(tái)看到構(gòu)建信息

配置webhook遇到的問題:

403權(quán)限問題,將jenkins系統(tǒng)配置中Gitlab模塊的 Enable authentication for '/project' end-point 去掉勾選

若出現(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容