介紹
本文主要通過docker+gitlab+jenkins來實(shí)現(xiàn)自動(dòng)化集成和部署的全過程唐断,并不會(huì)詳細(xì)的去介紹各種工具的功能踢京。
流程結(jié)構(gòu)
準(zhǔn)備工作
- 1臺(tái)測(cè)試服務(wù)器退客,用于安裝docker, 并在docker中配置jenkins论衍,部署代碼等。(公司準(zhǔn)備的是內(nèi)網(wǎng)測(cè)試機(jī))
- 新建一個(gè)vue項(xiàng)目掏父,然后推送到gitlab倉儲(chǔ)。
開始配置工作
docker
1. 在服務(wù)器上安裝docker
- 更新軟件庫
yum update -y
- 安裝docker
yum install docker -y
- 啟動(dòng)docker
service docker start
- docker相關(guān)命令
service docker restart // 重啟docker服務(wù)
service docker stop // 停止docker服務(wù)
1. 在docker中安裝jenkins
一般我們習(xí)慣性的從docker遠(yuǎn)程倉儲(chǔ)直接pull 鏡像的最新版秆剪,而安裝最新版的jenkins鏡像, 鏡像啟動(dòng)后, 在安裝jenkins一系列的plugin 時(shí), 重重受阻, 各種失敗, 原因是docker hub 上最新的jenkins 只有2.60.1 版本赊淑,很多plugin 都是不支持的爵政。
在jenkins 的官方docker 鏡像博客里: docker hub 里面的jenkins 鏡像已經(jīng)不再維護(hù), 建議使用: Jenkins/jenkins 陶缺。
- 拉取jenkins鏡像
docker pull jenkins/jenkins
- 啟動(dòng)jenkins
sudo docker run -d -u 0 --privileged --name jenkins_gitlab -p 49003:8080 -v /root/jenkins_gitlab:/var/jenkins_home jenkins/jenkins
- -u 0
指的是傳入root賬號(hào)ID钾挟,覆蓋容器中內(nèi)置的賬號(hào)
-v /root/jenkins_gitlab:/var/jenkins_home
指的是 將docker容器內(nèi)的目錄/var/jenkins_home映射到宿主機(jī)
/root/jenkins_gitlab目錄上--name jenkins_gitlab
將容器命名為 jenkins_gitlab
- -p 49003:8080
端口映射,將容器的8080端口映射到宿主機(jī)的49003端口
- --privileged
賦予最高權(quán)限
- 整體含意
運(yùn)行一個(gè)鏡像為jenkins/jenkinst的容器饱岸,命名為jenkins_gitlab掺出,使用賬root號(hào)覆蓋容器中的賬號(hào),賦予最高權(quán)限苫费,將容器的
/var/jenkins_home映射到宿主機(jī)的
/root/jenkins_gitlab目錄下汤锨,映射容器中8080端口到宿主機(jī)49003端口
- 查看jenkins
執(zhí)行完成后,等待幾十秒百框,等待jenkins容器啟動(dòng)初始化闲礼。
可以查看宿主機(jī) ' /root/jenkins_gitlab ' 下是否多了很多文件
這里訪問http://服務(wù)器ip:49003 查看jenkins是否啟動(dòng)成功
看到如下界面說明啟動(dòng)成功:
- 上圖需要輸入管理員密碼,以下命令查看琅翻,然后點(diǎn)擊continue繼續(xù)
cat /root/jenkins_gitlab/secrets/initialAdminPassword
-
點(diǎn)擊安裝
-
安裝成功后位仁,創(chuàng)建管理員賬戶
-
輸入賬號(hào)密碼信息后點(diǎn)擊保存(信息要填完),來到首頁
-
配置jenkins, 首先安裝相應(yīng)的插件
點(diǎn)擊系統(tǒng)配置方椎,如果這個(gè)頁面有許多錯(cuò)誤出現(xiàn)聂抢, 按照提示,去安裝缺失的插件即可棠众,如果安裝特別慢也可以選擇手動(dòng)安裝琳疏,插件安裝方法如下:
點(diǎn)擊插件管理
-
安裝ssh插件
成功安裝后,進(jìn)入系統(tǒng)管理--系統(tǒng)配置
選擇高級(jí)闸拿,輸入服務(wù)器IP空盼,用戶名,密碼新荤,然后點(diǎn)擊 Test Configuration
- 安裝gitlab揽趾、gitlab hook插件(安裝步驟同上,具體講一些配置)
Jenkins-to-GitLab authentication
點(diǎn)擊add苛骨,填寫相應(yīng)的gitlab api token
獲取gitlab的 access token
系統(tǒng)配置好后篱瞎,我們進(jìn)行項(xiàng)目的配置
-
首先,新建一個(gè)項(xiàng)目
-
創(chuàng)建成功后痒芝,進(jìn)入項(xiàng)目的配置頁面俐筋,選擇Source Code Management 進(jìn)行代碼倉庫的配置
注意
-
如果倉庫地址選擇http方式,一定要寫服務(wù)器的ip地址严衬,使用域名時(shí)會(huì)報(bào)錯(cuò)
認(rèn)證的時(shí)候澄者,可以選擇username,password或者是gitlab api token的方式進(jìn)行,點(diǎn)擊add進(jìn)行認(rèn)證配置。如果是前者粱挡,配置完成后一定要重新去選擇一下你剛才配置的用戶名和密碼赠幕,因?yàn)槟J(rèn)選中的不是你新填寫的。
用戶名询筏,密碼認(rèn)證
gitlab api token認(rèn)證
-
源碼管理配置完成后劣坊,我們可以移步 Build Environment,我們來搭建構(gòu)建環(huán)境,選擇Send files or execute commands over SSH after the build runs屈留,輸入我們需要執(zhí)行的ssh腳本局冰,同時(shí)服務(wù)器上進(jìn)行相關(guān)的nginx配置
事例的shell腳本如下
sudo docker stop nodeapp || true \
&& sudo docker rm nodeapp || true \
cd /root/jenkins_gitlab/workspace/vuejenkinsdemo \
&& ls \
&& sudo docker run -d --privileged=true --name nodeapp -p 3000:3000 -v /root/jenkins_gitlab/workspace/vuejenkinsdemo:/home/project/ node \
&& pwd \
&& cd /root/jenkins_gitlab/workspace/vuejenkinsdemo \
&& ls \
&& npm i \
&& npm run build \
&& ls \
-
配置完成后,點(diǎn)擊save灌危,進(jìn)入到項(xiàng)目的執(zhí)行頁面
到此康二,我們已經(jīng)實(shí)現(xiàn)了手動(dòng)一鍵部署
接下來我們配置GitLab webhook,實(shí)現(xiàn)自動(dòng)部署
GitLab-to-Jenkins authentication
-
進(jìn)入到項(xiàng)目配置頁面勇蝙,選擇build triggers沫勿,配置如下,gitlab webhook url 如圖所示,然后點(diǎn)擊advanced,找到secret token味混,點(diǎn)擊生成产雹,獲得secret token的值
-
移步gitlab, 找到項(xiàng)目,選擇setting-->integrations翁锡,配置完成后選擇add webhook,然后點(diǎn)擊下方test,提示成功后蔓挖,去jenkins構(gòu)建頁面可以看到有任務(wù)正在構(gòu)建,也可以根據(jù)構(gòu)建結(jié)果進(jìn)行錯(cuò)誤排查
注意
-
當(dāng)點(diǎn)擊test時(shí)馆衔,由于本地化的原因瘟判,報(bào)了500錯(cuò)誤,修改方式是應(yīng)該允許來自鉤子和服務(wù)的對(duì)本地網(wǎng)絡(luò)的請(qǐng)求角溃,
方式一:
方式二:
curl -X PUT --header "PRIVATE-TOKEN:pKt5yVfsysShHg_r4xkT" http://gitlab.univ.com/api/v4/application/settings?allow_local_requests_from_hooks_and_services=true
其中拷获,PRIVATE-TOKEN是在gitlab中獲取的access token.但是這個(gè)需要權(quán)限。如果沒有權(quán)限設(shè)置的話减细,讓gitlab的管理員幫忙設(shè)置一下就可以了匆瓜。
- 到此,我們已經(jīng)完成了一個(gè)簡單的項(xiàng)目自動(dòng)化部署過程未蝌。