持續(xù)集成(CI宛瞄,Continuous integration)逊拍。持續(xù)集成是一種開(kāi)發(fā)實(shí)踐寞忿,通過(guò)多次集成和自動(dòng)化構(gòu)建來(lái)發(fā)現(xiàn)錯(cuò)誤驰唬,使得代碼保持高質(zhì)量。這里介紹針對(duì)Ruby on Rails 項(xiàng)目罐脊,采用gitlab-ci進(jìn)行部署的基本過(guò)程以及注意事項(xiàng)定嗓。
一、gitlab的CI安裝與使用
1萍桌、安裝gitlab-ci-multi-runner
2宵溅、啟動(dòng)
gitlab-ci-multi-runner start
3、注冊(cè)runner
gitlab-cimulti-runner register
按照提示輸入相關(guān)的信息(跑runner的機(jī)器url上炎、gitlab上的token以及一些其他信息)
4恃逻、此時(shí)回到gitlab可以查看到注冊(cè)好的runner雏搂。
5、.gitlab-ci.yml文件配置CI要去做的操作
二寇损、Docker的基本操作
Docker中有鏡像(image)和容器(container)的概念凸郑。
可以在這里找到所有基礎(chǔ)的鏡像,也就是一個(gè)系統(tǒng)或服務(wù)等矛市;容器是從鏡像創(chuàng)建的運(yùn)行實(shí)例芙沥,每個(gè)容器都是相互隔離的,以此保證安全浊吏。
tip:這里有一本書(shū)幫助入門(mén)而昨。
1、運(yùn)行鏡像
如果獲得的鏡像不能夠滿足正常使用找田,可以對(duì)docker的image進(jìn)行“定制”
#docker run -t -i image:tag /bin/bash
docker run -t -i ubuntu:14.04 /bin/bash
運(yùn)行了上述命令后直接進(jìn)入到ubuntu14.04歌憨,與正常使用的系統(tǒng)沒(méi)有太大區(qū)別,可以安裝個(gè)人需要的服務(wù)或是其他墩衙,當(dāng)然很多服務(wù)是可以在.gitlab-ci.yml中進(jìn)行配置好的务嫡。
2、鏡像‘定制’好了之后需要commit漆改,保存一個(gè)最新版本(類似git版本控制)
docker commit -m 'description' -a 'something' image_id name:tag
TODO:其他docker的基本操作
三心铃、運(yùn)行流程
每次push了代碼之后,gitlab檢測(cè)到代碼的變化籽懦,自動(dòng)跑runer于个,根據(jù)runner配置文件(.gitlab-ci.yml)進(jìn)行工作,遇到失敗的步驟則終止暮顺,詳情可以在gitlab中的pipeline中看到。詳情見(jiàn)圖
by 張業(yè)生秀存!
注意事項(xiàng):
在這里列出我遇到的主要問(wèn)題:
1捶码、關(guān)于docker、gitlab和開(kāi)發(fā)者機(jī)器(mac)之間的通信:
三臺(tái)機(jī)器之間的ssh key要相互確認(rèn)好關(guān)系:mac向gitlab上push代碼或链,docker去gitlab里fetching或者clone代碼惫恼。所以,確保gitlab上擁有二者的sshkey澳盐。(如果有capistrano祈纯,并且是采用docker方式進(jìn)行deploy,則需要注意capistrano部署的目標(biāo)服務(wù)器是否有docker的sshkey)叼耙。
#拷貝ssh public key
ssh-copy-id user@host
2腕窥、docker進(jìn)入image:
docker run -t -i ubuntu:14.04
如果是要進(jìn)入到交互式操作,如shell腳本筛婉,則-t -i兩個(gè)參數(shù)必須使用簇爆,是用來(lái)申請(qǐng)一個(gè)控制臺(tái)與寄主機(jī)器進(jìn)行數(shù)據(jù)交互的,也就是可以在運(yùn)行docker的機(jī)器上看到shell腳本輸出結(jié)果。
3入蛆、.git-ci.yml文件的構(gòu)成:
(1)該文件會(huì)指定任務(wù)讓CI去執(zhí)行响蓉,images指定了一份鏡像,如果自己commit了一份哨毁,則命名應(yīng)該要注意枫甲,因?yàn)镃I會(huì)先去docker遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行查找image,如果沒(méi)找到才會(huì)找本地扼褪,所以想幻,當(dāng)本地命名與遠(yuǎn)端倉(cāng)庫(kù)沖突時(shí),是不會(huì)應(yīng)用本地image的迎捺。
(2)services:
該block下可以寫(xiě)一些需要使用到的服務(wù)举畸,如:postgres、mysql凳枝、others.
這些聲明的服務(wù)會(huì)到docker遠(yuǎn)程倉(cāng)庫(kù)進(jìn)行查找下載抄沮,并集成使用。如果使用的服務(wù)都可以找到岖瑰,則不需要‘定制’image叛买,省去很多事。
(3)如果覺(jué)得在該配置文件中寫(xiě)了很多麻煩的任務(wù)蹋订,可以考慮‘定制’一份image率挣。
(4)自己制作好的image可以提交到docker遠(yuǎn)程倉(cāng)庫(kù),供大家下載使用露戒。