gitlab ci/cd 服務(wù)自動(dòng)化探索

一、? ? ?為了優(yōu)化公司服務(wù)部署流程, 減少不必要的登錄服務(wù)器操作木西, 實(shí)現(xiàn)提交代碼直接部署最短部署路徑, 我們選擇了gitlab的ci/cd随静。

? ? 當(dāng)前公司的部署流程繁瑣八千, 以我負(fù)責(zé)的項(xiàng)目來說, 上線的步驟是:? ?

? ? 1. 提交代碼到gitlab

? ? 2. 登錄服務(wù)器燎猛, 到項(xiàng)目文件夾下拉取代碼

? ? 3. 使用supervisorctl 重啟項(xiàng)目

使用gitlab的ci/cd之后就可以恋捆, 節(jié)省后兩步的操作,把它們交給gitlab 的ci/cd執(zhí)行重绷, 這樣就可以“少做少錯(cuò)”

二沸停、我們使用的工具:

? ? 1. gitlab代碼倉庫

? ? 2.docker容器技術(shù)

? ? 3.gitlab-runner應(yīng)該屬于gitlab的一個(gè)配套插件

? ? 4. 我們的項(xiàng)目

自動(dòng)化部署的流程:

? ? 1.提交代碼gitlab, 觸發(fā)ci/cd邏輯

? ? 2.gitlab 根據(jù)gitlab-ci.yml中的命令昭卓,通知gitlab-runner進(jìn)行構(gòu)建部署

三愤钾、工具安裝(注意:gitlab和gitlab-runner是兩臺(tái)不同的服務(wù)器)

? ? 1、gitlab 安裝:??https://about.gitlab.com/installation/(官網(wǎng)文檔)

? ? 2候醒、docker安裝:?https://docs.docker.com/install/#releases(官網(wǎng)文檔能颁, 英語不好的注意左側(cè)導(dǎo)航條, 選擇對(duì)應(yīng)操作系統(tǒng))

? ? 3倒淫、gitlab-runner安裝:?https://docs.gitlab.com/runner/install/(官網(wǎng)文檔伙菊, 注意圖片中的位置)


圖一????

這里是各個(gè)操作系統(tǒng)安裝gitlab-runner教程

四、對(duì)于工具的安裝教程敌土,都是其官網(wǎng)提供的镜硕, 我們就不做過多的演示,這里我演示一下gitlab-runner注冊(cè)的過程

? ? 1纯赎、我們需要找到gitlab中某個(gè)項(xiàng)目的ci/cd的設(shè)置界面


2? ?


3

然后點(diǎn)擊展開runner找到圈出來的url和token谦疾,在gitlab-runner注冊(cè)時(shí)需要使用南蹂, 如圖4

4

然后我們?nèi)ピ趃itlab-runner中注冊(cè):

zm@zmdeMacBook-Pro: ~$ gitlab-runner register? ?# 開始注冊(cè)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

WARNING: Running in user-mode.? # 提示可以不管

WARNING: Use sudo for system-mode:?

WARNING: $ sudo gitlab-runner...

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):??# 輸入我們?cè)趃itlab中獲取的url

http://wechatservers.com/

Please enter the gitlab-ci token for this runner:? # 輸入token

5KUa3rVrYsRmPzp7CoeL

Please enter the gitlab-ci description for this runner: # 描述

[zmdeMacBook-Pro.local]: cs

Please enter the gitlab-ci tags for this runner (comma separated): # tag犬金,可以不填寫直接回車;這個(gè)是用來標(biāo)記runner六剥, 可以指定使用哪個(gè)runner進(jìn)行構(gòu)建部署

cs? # 我們輸入的是cs

Registering runner... succeeded? ? ? ? ? ? ? ? ? ? runner=5KUa3rVr

Please enter the executor: docker, parallels, shell, virtualbox, docker+machine, docker-ssh, ssh, docker-ssh+machine, kubernetes:

shell? ?# 執(zhí)行器選擇shell晚顷, 一開始選擇了docker,在部署完之后我找不到container放在哪里了疗疟, 這塊以后再補(bǔ)

Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!


這樣我們就完成了gitlab-runner的注冊(cè)该默, 我可以回到gitlab頁面看一下


5

這樣我們有了個(gè)gitlab-runner, tag為cs策彤, 狀態(tài)為不可用

因?yàn)槲覀儧]有運(yùn)行g(shù)itlab-runner栓袖, 我們可以使用

gitlab-runner run

這樣就運(yùn)行正常了


6


五匣摘、.gitlab-ci.yml和dockerfile

.gitlab-ci.yml文件和dockerfile文件需要放在項(xiàng)目中,在第一層目錄切勿深藏裹刮。

.gitlab-ci.yml是gitlab-runner管理項(xiàng)目的配置文件音榜,告訴gitlab-runner怎么做

主要用到了這個(gè)幾個(gè)關(guān)鍵字

stages

before_script

variable

script

tags

stages:階段

定義使用的階段和使用順序, 比如有兩個(gè)階段捧弃, 一個(gè)是構(gòu)建docker images赠叼,另一個(gè)是運(yùn)行docker container, 這樣我們就需要定義這個(gè)兩個(gè)階段里每個(gè)階段都需要干什么违霞, 那個(gè)階段在前那個(gè)階段在后

variable:變量

我們可以定義變量以供在整個(gè)job(每次自動(dòng)部署gitlab runner都會(huì)啟動(dòng)一個(gè)job)工作期間使用

script:腳本

這個(gè)gitlal-runner執(zhí)行的腳本

before_script: 腳本前

在執(zhí)行腳本前執(zhí)行什么嘴办, 可以這么理解但是看了文檔之后好像不是這個(gè)意思, 留坑买鸽;

tags:標(biāo)簽

用來指定某個(gè)gitlab-runner運(yùn)行項(xiàng)目

olny:?

用來表明將要運(yùn)行的分支和標(biāo)記名稱


.gitlab-ci.yml內(nèi)容:

variables:

? PROJECT_NAME: cs? # 文件名

DOCKER_REGISTRY: wechatservers.com:5000? # docker私有倉庫

IMAGE_NAME: "${DOCKER_REGISTRY}/${PROJECT_NAME}"? # 鏡像名

? LOG_DIR: "/data/logs/"? # 日志地址

stages:? # 階段設(shè)置

? - build

? ?- deploy

build:?

? stage: build # 階段build

script: # 腳本

? ? - docker build -t "${IMAGE_NAME}:lastest" .

- docker image tag "${IMAGE_NAME}:lastest" "${IMAGE_NAME}:$CI_COMMIT_SHA"

- docker push "${IMAGE_NAME}:lastest"

- docker push "${IMAGE_NAME}:$CI_COMMIT_SHA"

dev_deploy:

? stage: deploy

tags:

? ? - dev

variables:

? ? profile_path: "/data/profile.env"? # 存放環(huán)境變量的文件

? ? port: "503"

? before_script:

? ? - docker stop "${PROJECT_NAME}_1" && docker rm "${PROJECT_NAME}_1" || true? ?# 嘗試停止并刪除容器

script:

? ? - sleep 2

- docker run --rm -v $LOG_DIR:$LOG_DIR? --env-file ${profile_path} "${IMAGE_NAME}:${CI_COMMIT_SHA}" python manage.py migrate --settings=settings.settings? ?#?

- docker run -d -p "${port}:8000" -v $LOG_DIR:$LOG_DIR --name "${PROJECT_NAME}_1" --env-file "${profile_path}" "${IMAGE_NAME}:${CI_COMMIT_SHA}"? # 創(chuàng)建容器

only:

refs:

? ? ? - /^feature\/dev-.*$/? ?# 使用正則匹配要部署分支

tags:

? ? - dev-runner? # 指定gitlab-run

這時(shí)候就可以提交代碼了

如果成功則會(huì)看到這樣的界面

7

你也可以在左側(cè)的列表中job看到涧郊,執(zhí)行情況


8

對(duì)于私有http倉庫, 需要加入insecure-registries到/etc/docker/daemon.json(因系統(tǒng)而異)

"insecure-registries": [

? ? ? ? "wechatservers:5000"

? ? ]

對(duì)于docker權(quán)限問題眼五,你可以使用 https://docs.docker.com/install/linux/linux-postinstall/ 解決


8

到此結(jié)束

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末底燎,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弹砚,更是在濱河造成了極大的恐慌双仍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件桌吃,死亡現(xiàn)場(chǎng)離奇詭異朱沃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)茅诱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門逗物,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瑟俭,你說我怎么就攤上這事翎卓。” “怎么了摆寄?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵失暴,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我微饥,道長(zhǎng)逗扒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任欠橘,我火速辦了婚禮矩肩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘肃续。我一直安慰自己黍檩,他們只是感情好叉袍,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刽酱,像睡著了一般畦韭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肛跌,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天艺配,我揣著相機(jī)與錄音,去河邊找鬼衍慎。 笑死转唉,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稳捆。 我是一名探鬼主播赠法,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乔夯!你這毒婦竟也來了砖织?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤末荐,失蹤者是張志新(化名)和其女友劉穎侧纯,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甲脏,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡眶熬,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块请。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片娜氏。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖墩新,靈堂內(nèi)的尸體忽然破棺而出贸弥,到底是詐尸還是另有隱情,我是刑警寧澤海渊,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布绵疲,位于F島的核電站,受9級(jí)特大地震影響切省,放射性物質(zhì)發(fā)生泄漏最岗。R本人自食惡果不足惜帕胆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一朝捆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懒豹,春花似錦芙盘、人聲如沸驯用。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝴乔。三九已至,卻和暖如春驮樊,著一層夾襖步出監(jiān)牢的瞬間薇正,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工囚衔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留挖腰,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓练湿,卻偏偏與公主長(zhǎng)得像猴仑,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子肥哎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容