摘要:本文的目的最主要是備忘其次是分享療效并不能讓你一下子掌握這只是一個(gè)比較完整的解決方案其他基礎(chǔ)知識自行補(bǔ)充基調(diào)首先這不是屠龍刀不要奢望一篇文章可以走遍天下這里只是提供一個(gè)具體的落地方案一個(gè)具體的技術(shù)選型階段代碼倉庫關(guān)于代碼倉庫本文選取的方案是
本文的目的:最主要是備忘, 其次是分享
療效:
并不能讓你一下子掌握CI/CD, 這只是一個(gè)比較完整的解決方案,其他基礎(chǔ)知識,自行補(bǔ)充.
首先,這不是屠龍刀,不要奢望一篇文章可以走遍天下.這里只是提供一個(gè)具體的落地方案, 一個(gè)具體的技術(shù)選型.
關(guān)于 代碼倉庫, 本文選取的方案是 gitlab
gitlab的搭建:
以目前的情況來說, 推薦使用docker來搭建你的系統(tǒng), 不然你會陷入各種膜明其妙的問題.
docker的知識, 請自行補(bǔ)充一下,篇幅有限不能展開細(xì)說.
在這里我推薦一個(gè):
https://hub.docker.com/r/sameersbn/gitlab/
打開以后直接搜索Quick Start, 按照docker-compose的方式啟動你的gitlab.
不要對英文心存恐懼 ---- 孔子
下載好 docker-compose.yml之后不要急著啟動, 需要修改幾個(gè)參數(shù):
需要學(xué)習(xí)一點(diǎn)點(diǎn)yml的知識, 大約5分鐘, 自行g(shù)oogle
GITLAB_SECRETS_DB_KEY_BASE,
GITLAB_SECRETS_SECRET_KEY_BASE,
GITLAB_SECRETS_OTP_KEY_BASE
上面三個(gè)是gitlab用于加密時(shí)用的key, 隨便給個(gè)長度64的字符串, 這塊不做 深究.
GITLAB_ROOT_EMAIL
GITLAB_ROOT_PASSWORD
上面兩個(gè)就是初始化時(shí)管理員賬號的賬號密碼, 按自己的需要填寫
GITLAB_HOST
這是 gitlab 內(nèi)部使用的地址, 這關(guān)系到你gitlab頁面上的項(xiàng)目地址,沒設(shè)置的話, 到時(shí)候顯示的是127.0.0.1, 這個(gè)鬼才能clone下來.
這個(gè) host 一旦設(shè)置, 初始化完就改不了了, 所以一定要在第一次啟動之前 就設(shè)置好.
docker-compose up
一系列的初始化信息以后, 你就能訪問你的gitlab了.
默認(rèn)是 http://{你的IP}:10080
其他關(guān)于gitlab的使用技巧, 就不深入了. 能關(guān)注這篇文章的都不是萌新了,這些內(nèi)容自己補(bǔ)充吧.
接上文.
gitlab-ci在最新版的gitlab已經(jīng)是內(nèi)置的了, 只要項(xiàng)目里有.gitlab-ci.yml,同時(shí)有對應(yīng)的gitlab-runner, 就能實(shí)現(xiàn)CI, 相比之下不需要太多的配置.
名詞解釋:.gitlab-ci.yml:
這是gitlab-ci使用的任務(wù)描述文件, 里面主要是定義CI的過程需要執(zhí)行哪些行為, 簡單說就是, 要進(jìn)行哪幾個(gè)步驟, 每個(gè)步驟是哪些命令.
gitlab-runner:
另一個(gè)程序, 也可以用docker啟動, 就是負(fù)責(zé)執(zhí)行 CI 任務(wù)的機(jī)器人, runner這塊后面會展開講.
啟動并注冊gitlab-runner
我們還是使用docker來啟動,這是一個(gè)大方向
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
想深入了解的話, 請看https://docs.gitlab.com/runne...
敲黑板!!
在這里, 我們將宿主機(jī)的docker.sock映射進(jìn)去,讓runner可以跟宿主用同一個(gè)daemon, (意味著你進(jìn)去runner內(nèi)部執(zhí)行docker images是可以看到外面的鏡像列表的), 這樣做是埋下一個(gè)伏筆, 以便后面階段使用dind(docker in docker)時(shí), 獲得更好的體驗(yàn).
繼續(xù)
好了, 這個(gè)時(shí)候你啟動了一個(gè)runner, 你要告訴它應(yīng)該到哪里去"服役",
這一步叫做: 注冊
注冊runner的方式請看https://docs.gitlab.com/runne...
不過, 還是請你使用以下命令來注冊:
docker exec -it gitlab-runner gitlab-runner register --docker-volumes /var/run/docker.sock:/var/run/docker.sock --docker-privileged
這里使用了兩個(gè)參數(shù), 都是為了 docker in docker 能得到更好的體驗(yàn)而服務(wù)的.
輸入以上命令后, 根據(jù)提示填寫信息, 其中:
host,token 這些, 請打開你剛裝好的gitlab, 進(jìn)入 Admin area-Runners ,然后照著填寫就是了
特別注意期間會讓你選一個(gè)executor 類型, 個(gè)人推薦最好的方式是docker , 至于shell這種方式, 玩玩可以,實(shí)際使用時(shí)副作用太多.
更多參數(shù)的細(xì)節(jié), 自行研究.
完成以上步驟之后, 你在gitlab - Admin area-Runners 頁面就能看到注冊好的runner了, 當(dāng)然你現(xiàn)在還是感覺不到它的作用.
這個(gè)環(huán)節(jié)內(nèi)容比較多, 操作比較多, 走到這里建議休息一下喝杯茶.
這個(gè)階段, 是指代碼提交以后, gitlab-runner會自動讀取項(xiàng)目的.gitlab-ci.yml, 運(yùn)行里面定義的每個(gè)Job.
這里給出一個(gè)極簡的.gitlab-ci.yml例子,
它做的就是, 在提交代碼以后, 自動的測試, 自動的構(gòu)建, 自動的發(fā)布 :
stages: - test - build - deploy job_01: stage: test image: dev_tool/node_builder:1.0.0 script: - npm install --registry=https://registry.npm.taobao.org - node server.js & - node test_api.js job_02: stage: build image: gitlab/dind script: - docker build -t ci-demo:latest . job_03: stage: deploy image: dev_tool/rancher-cli:latest script: - rancher-tool init - rancher up -d --pull --force-upgrade --confirm-upgrade
一目了然, 上面的第一個(gè)定義: stages 數(shù)組,
意思是這個(gè)項(xiàng)目的CI/CD過程要執(zhí)行三個(gè)步驟(stage),
分別是test測試-build編譯-deploy發(fā)布
然后下面的三個(gè)job_*,名字是隨意的, 重點(diǎn)是里面的stage屬性,
告訴gitlab-ci這個(gè)任務(wù)是在哪個(gè)stage執(zhí)行的,
一個(gè)stage你可以寫很多個(gè)job
敲黑板!!!
需要注意的是, 我們之前選擇了docker executor, job里面就要聲明image屬性,指定這個(gè)Job的scripts要在哪個(gè)image里面運(yùn)行.
重點(diǎn)說明!! 再次大力敲黑板!!
這里第二步使用了gitlab/dind , 仔細(xì)看script, 這是在一個(gè)容器里面去構(gòu)建一個(gè)鏡像, 為了整體體驗(yàn)與構(gòu)建效率著想, 我們之前注冊runner的時(shí)候,將宿主機(jī)的docker.sock映射進(jìn)去是十分必要的!!
(重新翻上去看吧)
看到這里, 聰明的朋友已經(jīng)發(fā)現(xiàn)了,
我們需要自己打造一批用于運(yùn)行Job的基礎(chǔ)鏡像, 這些鏡像里要預(yù)先安裝好我們需要的依賴環(huán)境.
舉個(gè)栗子:
你要在build這一步做webpack打包的話, 你要準(zhǔn)備好一個(gè)內(nèi)部安裝好webpack的鏡像(相關(guān)的node,npm之類就更不用說了)
聽起來好麻煩?
也不是, 這是個(gè) 功在當(dāng)代,利在千秋 的行為, 前期打造好基礎(chǔ)鏡像, 后面的項(xiàng)目就可以很容易寫CI Job了.
更多 gitlab-ci.yml 的高級寫法,還是建議看官方文檔
https://docs.gitlab.com/ee/ci...
如果按照上面的步驟把這個(gè)系統(tǒng)搭建起來以后, 你應(yīng)該已經(jīng)能夠感受到gitlab-ci帶來的好處了.
現(xiàn)在你只管提交代碼, 就能快速看到新功能集成到相應(yīng)的環(huán)境了.
此后, 你只要寫好每一步的Job 就可以了.
尤其是測試這個(gè)環(huán)節(jié).
尤其是測試這個(gè)環(huán)節(jié).
尤其是測試這個(gè)環(huán)節(jié).
gitlab 真的很吃資源, 虛擬機(jī)玩夠嗆, 團(tuán)隊(duì)用的話, 建議裝一臺PC來搭建.
基礎(chǔ)鏡像別偷懶, 多打磨,讓你的scripts可以更簡潔
更進(jìn)一步的話, 自己開發(fā)一系列的命令行工具, 讓你的scripts更強(qiáng)大.
有事找我, 包教會.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28033.html
摘要:因?yàn)榭梢园惭b到不同的機(jī)器上,所以在構(gòu)建任務(wù)運(yùn)行期間并不會影響到的性能。注冊打開中的項(xiàng)目頁面,在項(xiàng)目設(shè)置中找到在運(yùn)行的機(jī)器上,用命令行注冊,比如按照提示一步一步安裝就可以了。任務(wù)將按此順序執(zhí)行。當(dāng)然,這是不符合語義的。 在介紹.gitlab-ci.yml之前,我們先看幾個(gè)概念: GitLab Runner 一般來說,構(gòu)建任務(wù)都會占用很多的系統(tǒng)資源 (譬如編譯代碼),而 GitLab CI...
摘要:所以在此給大家分享一下不使用構(gòu)建工具實(shí)現(xiàn)項(xiàng)目自動化打包發(fā)布的思路。對于一個(gè)前端項(xiàng)目來說,自動化的構(gòu)建是很有必要的,同時(shí)我們也可以通過實(shí)現(xiàn)更多的功能比如代碼檢測,單元測試等等。另外這種思路同樣適用于其他項(xiàng)目等前端項(xiàng)目,等移動端項(xiàng)目。 今天這篇文章的目的是在rn項(xiàng)目的構(gòu)建,并不會涉及到rn框架或者使用的講解,說起構(gòu)建,特別是前端構(gòu)建大家應(yīng)該很快會想到webpack、Grunt、 Gulp等...
摘要:什么是持續(xù)集成持續(xù)集成,簡稱指的是,頻繁地一天多次將代碼集成到主干。如圖什么是一次其實(shí)相當(dāng)于一次構(gòu)建任務(wù),里面可以包含多個(gè)流程,如安裝依賴運(yùn)行測試編譯部署測試服務(wù)器部署生產(chǎn)服務(wù)器等流程。參考鏈接用進(jìn)行持續(xù)集成 什么是持續(xù)集成 ? 持續(xù)集成(Continuous integration,簡稱CI)指的是,頻繁地(一天多次)將代碼集成到主干。 GitLab CI 什么是 GitLab CI...
摘要:滾動條兩端的按鈕。內(nèi)層軌道,滾動條中間部分除去。有如下功能若是水平滾動條,則屬性不起作用,屬性用來控制滾動條相應(yīng)部分豎直方向高度若是豎直滾動條,則屬性不起作用,屬性用來控制相應(yīng)部分的寬度。 CSS ::-webkit-scrollbar { /* 1 */ } ::-webkit-scrollbar-button { /* 2 */ } :...
摘要:滾動條兩端的按鈕。內(nèi)層軌道,滾動條中間部分除去。有如下功能若是水平滾動條,則屬性不起作用,屬性用來控制滾動條相應(yīng)部分豎直方向高度若是豎直滾動條,則屬性不起作用,屬性用來控制相應(yīng)部分的寬度。 CSS ::-webkit-scrollbar { /* 1 */ } ::-webkit-scrollbar-button { /* 2 */ } :...
閱讀 3074·2021-11-19 09:40
閱讀 1559·2021-11-15 11:39
閱讀 662·2021-10-08 10:05
閱讀 2273·2021-09-03 10:29
閱讀 3406·2021-08-12 13:22
閱讀 2151·2019-08-30 15:54
閱讀 3706·2019-08-30 14:03
閱讀 2654·2019-08-30 13:45