Windows下使用docker部署gitlab CI服務(wù)

安裝docker for windows

下載

docker官方下載
注意,docker for windows需要使用Hyper-V技術(shù)

該功能只有在除了家庭版以外的所有win10版本提供


沒有該功能的windows版本請(qǐng)使用Docker Toolbox
(話說(shuō)開發(fā)用的機(jī)器還是至少用專業(yè)版windows吧。。郁轻。淘寶20塊一個(gè)密鑰卵凑,來(lái)路不明,親測(cè)可用)

安裝

安裝完成后在cmd或者powershell輸入docker version暮胧,查看輸出的信息,檢查是否安裝好问麸。



然后在設(shè)置中打開某個(gè)分區(qū)的共享往衷,一會(huì)用于掛載docker鏡像的數(shù)據(jù)卷(volume),我這里只有C盤分區(qū)严卖,直接使用C盤席舍。



在docker中安裝gitlab-ce

在命令行中輸入:

docker pull gitlab/gitlab-ce

拉取gitlab-ce鏡像,等待完成哮笆。

然后輸入以下命令創(chuàng)建并運(yùn)行g(shù)itlab-ce容器:

docker run -d --hostname localhost -p 10080:80 -p 10443:443 --name gitlab -v /var/run/docker.sock:/var/run/docker.sock -v c:/docker/gitlab/config:/etc/gitlab -v c:/docker/gitlab/logs:/var/log/gitlab gitlab/gitlab-ce:latest

gitlab正在初始化来颤,現(xiàn)在狀態(tài)為healthy:starting。


等狀態(tài)變?yōu)閔ealthy時(shí)稠肘,就可以通過(guò)http://localhost:10080訪問gitlab服務(wù)了

默認(rèn)管理員密碼為:

Username: root
Password: 5iveL!fe

第一次登陸會(huì)要求為root設(shè)置一個(gè)新的密碼


然后為自己注冊(cè)一個(gè)賬號(hào)


成功進(jìn)入首屏


當(dāng)你做完這一步福铅,如果暫時(shí)不需要gitlab-runner,可以直接點(diǎn)擊右上角的紅叉然后開始開發(fā)使用了项阴。
API文檔:Gitlab API
PS:目前不通過(guò)gitlabUI滑黔,想要獲取授權(quán),應(yīng)該是向http://[gitlab項(xiàng)目]/oauth/token,帶上參數(shù)發(fā)送POST請(qǐng)求略荡,前面不需要加/api/version庵佣,
而其他api則需要加上api版本信息例如/api/v4


當(dāng)你馬上需要gitlab-runner時(shí)

先隨便創(chuàng)建一個(gè)Express模板項(xiàng)目,稍后用來(lái)測(cè)試gitlab-runner汛兜,


創(chuàng)建完成后在Setting => CI / CD => Runner settings 中找到registration token巴粪,記下來(lái)等下需要用,當(dāng)然粥谬,你也可以使用已有項(xiàng)目的registration token验毡。



安裝gitlab-runner


用docker in docker 的方式安裝運(yùn)行g(shù)itlab-runner

在命令行中輸入

docker pull gitlab/gitlab-runner

拉取gitlab-runner鏡像,等待完成帝嗡。

然后輸入以下命令創(chuàng)建并運(yùn)行g(shù)itlab-runner容器:
(這里注意如果你不需要在同一臺(tái)物理機(jī)上同時(shí)部署這兩個(gè)服務(wù)晶通,把--link gitlab去掉)

docker run -d --name gitlab-runner --link gitlab --restart always -v /var/run/docker.sock:/var/run/docker.sock -v c:/docker/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:latest

安裝完成

配置

在命令行中輸入以下命令注冊(cè)一個(gè)新的Runner實(shí)例

docker exec -it gitlab-runner gitlab-runner register

1.輸入gitlab項(xiàng)目的地址,在本文檔中通過(guò)--link gitlab 的方式鏈接到了 gitlab容器哟玷,直接填寫容器名字狮辽,如果你沒使用--link 參數(shù),填寫你自己gitlab項(xiàng)目的公網(wǎng)地址

Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
http://gitlab

2.填寫剛才保存的registration token

Please enter the gitlab-ci token for this runner
xxxxxxxxxxxxxxxx

3.runner的名字巢寡,隨便填

Please enter the gitlab-ci description for this runner
runner1

4.tag隨便填

Please enter the gitlab-ci tags for this runner (comma separated):
aoeu

5.這里填true喉脖,否則除了被跟蹤的事件,無(wú)法觸發(fā)runner抑月,不方便測(cè)試树叽。

Whether to run untagged jobs [true/false]:
[false]: true

6.默認(rèn)值即可

Whether to lock Runner to current project [true/false]:
[true]: true

7.填寫該runner實(shí)例的執(zhí)行器,這里使用docker

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

8.填寫需要使用的鏡像谦絮,這里我們使用alpine:latest

Please enter the Docker image (eg. ruby:2.1):
alpine:latest

本文檔是在同一臺(tái)物理機(jī)上部署gitlab-ce以及gitlab-runner题诵,由于gitlab-runner需要在自己的容器中再開啟一個(gè)docker,如果不經(jīng)配置层皱,實(shí)際上執(zhí)行測(cè)試的時(shí)候網(wǎng)絡(luò)環(huán)境是在gitlab-runner的容器的docker環(huán)境中性锭,訪問不到gitlab-ce容器,但如果你是在公網(wǎng)上部署叫胖,可以忽略接下來(lái)的設(shè)置草冈。并且愉快地開始使用了。
如果你真的需要在同一臺(tái)物理機(jī)上同時(shí)部署這兩個(gè)服務(wù)瓮增,以下是我現(xiàn)在找到的解決辦法怎棱。

  • 1.經(jīng)過(guò)試驗(yàn)的解決辦法
    修改gitlab-runner容器里的docker的網(wǎng)絡(luò)為與宿主機(jī)共享網(wǎng)絡(luò)命名空間,并且手動(dòng)綁定gitlab-ce項(xiàng)目的ip地址绷跑。(是的有點(diǎn)拗口)
    運(yùn)行以下命令拳恋,查看gitlab-ce在虛擬子網(wǎng)中的ip
    docker exec -it gitlab-runner ping gitlab

或者docker exec -it gitlab-runner cat /etc/hosts

總之這里我們知道了gitlab-ce的ip地址為172.17.0.2

現(xiàn)在去編輯c:/docker/gitlab-runner/config下的config.toml

在[[runners]]下加入
clone_url = "http://172.17.0.2"

在[runners.docker]下加入
userns_mode = "host"

最后config.toml應(yīng)該類似這樣

concurrent = 1
check_interval = 0

[[runners]]
  name = "runner1"
  url = "http://gitlab"
  token = "db7660ae22a9b982f7bfc47d8d94ca"
  executor = "docker"
  clone_url = "http://172.17.0.2"
  [runners.docker]
    userns_mode = "host"
    tls_verify = false
    image = "alpine:latest"
    privileged = false
    disable_cache = false
    volumes = ["/cache"]
    shm_size = 0
  [runners.cache]

修改完配置,重啟gitlab-runner

docker restart gitlab-runner

runner實(shí)例已經(jīng)被添加上了


隨便來(lái)一次Pipeline試試吧



能從代碼倉(cāng)庫(kù)clone了


在windows下直接安裝gitlab-runner

下載gitlab-runner的可執(zhí)行文件

gitlab-runner 64bit版本官方下載

下載后放到一個(gè)你喜歡的目錄你踩,并重命名為gitlab-runner.exe诅岩,我這里使用的是C:\docker\gitlab-runner

并且在系統(tǒng)變量中添加該目錄到PATH


添加完成后讳苦,打開一個(gè)管理員權(quán)限的命令行,輸入gitlab-runner --version確認(rèn)版本信息

然后輸入gitlab-runner register注冊(cè)一個(gè)runner實(shí)例吩谦,解釋參照上面的配置段落


改進(jìn)

接下來(lái)要改進(jìn)就是使用docker-compose -f file -d鸳谜,只需一條命令,批量創(chuàng)建容器式廷,并且架設(shè)一個(gè)能讓這倆自由訪問的網(wǎng)絡(luò)環(huán)境咐扭。

是的就算同樣的參數(shù)寫進(jìn)docker-compost.yml,再使用能使docker run命令創(chuàng)建的容器成功跑通的配置滑废,仍然會(huì)出錯(cuò)(錯(cuò)誤信息和下面圖里的錯(cuò)誤信息一樣)蝗肪。用docker-compose這個(gè)工具創(chuàng)建的和原生CLI docker run 雖然容器一樣,子網(wǎng)類型也是birdge蠕趁,但就是不能訪問薛闪,有可能工具比起CLI還缺了一些本來(lái)會(huì)默認(rèn)生成的配置,所以暫時(shí)需要分開手動(dòng)輸入俺陋。


各種錯(cuò)誤信息提示完全沒有人性豁延,排錯(cuò)全靠猜。

報(bào)錯(cuò)信息又少腊状,報(bào)的錯(cuò)還是一樣的诱咏。

這個(gè)錯(cuò)誤應(yīng)該是在git clone的時(shí)候報(bào)出來(lái)的,于是我進(jìn)行了一次試驗(yàn)
這次試驗(yàn)是在windows下安裝了gitlab-runner缴挖,再把docker.runner里設(shè)置網(wǎng)絡(luò)為與宿主機(jī)共享網(wǎng)絡(luò)命名空間袋狞,并且把clone_url設(shè)置為http:/localhost:10080此時(shí)訪問http:/localhost:10080應(yīng)該能正常訪問,但是仍然出現(xiàn)同樣的錯(cuò)誤映屋。

也嘗試過(guò)把gitlab容器和runner容器直接放在同一個(gè)ip下苟鸯,runner下通過(guò)localhost可以訪問gitlab了,然而runner下與宿主機(jī)共享網(wǎng)絡(luò)環(huán)境的docker容器訪問的localhost依然與runner的localhost所指的ip不是同一個(gè)秧荆。

而在gitlab-runner容器中倔毙,通過(guò)gitlab容器名和ip地址都可以正常clone,兩組對(duì)照出現(xiàn)不一樣的地方是乙濒,這時(shí)候是要求登陸的。

但是成功跑通卵蛉,clone成功的時(shí)候颁股,并沒有出現(xiàn)登陸信息。


可能出現(xiàn)問題的地方:

1.git clone可能需要登陸
2.gitlab的默認(rèn)配置無(wú)法處理這種情況(在)
3.gitlab容器和runner容器之間的網(wǎng)絡(luò)配置有誤

如果有哪位大俠曾經(jīng)干過(guò)同樣的事情傻丝,希望能在評(píng)論告知解決辦法甘有。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市葡缰,隨后出現(xiàn)的幾起案子亏掀,更是在濱河造成了極大的恐慌忱反,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件滤愕,死亡現(xiàn)場(chǎng)離奇詭異温算,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)间影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門注竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人魂贬,你說(shuō)我怎么就攤上這事巩割。” “怎么了付燥?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵宣谈,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我键科,道長(zhǎng)闻丑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任萝嘁,我火速辦了婚禮梆掸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牙言。我一直安慰自己酸钦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布咱枉。 她就那樣靜靜地躺著卑硫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚕断。 梳的紋絲不亂的頭發(fā)上欢伏,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音亿乳,去河邊找鬼硝拧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛葛假,可吹牛的內(nèi)容都是我干的障陶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼聊训,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼抱究!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起带斑,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤鼓寺,失蹤者是張志新(化名)和其女友劉穎勋拟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妈候,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡敢靡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了州丹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片醋安。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖墓毒,靈堂內(nèi)的尸體忽然破棺而出吓揪,到底是詐尸還是另有隱情,我是刑警寧澤所计,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布柠辞,位于F島的核電站,受9級(jí)特大地震影響主胧,放射性物質(zhì)發(fā)生泄漏叭首。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一踪栋、第九天 我趴在偏房一處隱蔽的房頂上張望焙格。 院中可真熱鬧,春花似錦夷都、人聲如沸眷唉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冬阳。三九已至,卻和暖如春党饮,著一層夾襖步出監(jiān)牢的瞬間肝陪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工刑顺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氯窍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓蹲堂,卻偏偏與公主長(zhǎng)得像荞驴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子贯城,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 最近在忙著搭建游戲私服的事情,因此前面的關(guān)于游戲業(yè)務(wù)篇師徒系統(tǒng)的內(nèi)容會(huì)遲一點(diǎn)寫霹娄,這個(gè)坑怎么說(shuō)都還是要填的能犯,不要錯(cuò)過(guò)...
    codjust閱讀 10,995評(píng)論 0 14
  • 以下原文轉(zhuǎn)載于(https://docs.docker.com/docker-for-mac/)(想找中文版的最新...
    Veekend閱讀 7,562評(píng)論 0 17
  • 一切優(yōu)秀的框架都是為程序員服務(wù)的:reactjs提供更優(yōu)雅的前端代碼書寫方式和更優(yōu)的界面更新機(jī)制鲫骗,react-na...
    DumpCicada閱讀 22,521評(píng)論 0 22
  • 昨天姨媽說(shuō)訂個(gè)唱K的音箱叫屁顛蟲,結(jié)果今天一早就到了踩晶。這個(gè)世界速度不要太快哦执泰! 很簡(jiǎn)單就裝上了,音箱效果一般渡蜻,但是...
    肖麗敏2018閱讀 242評(píng)論 0 2
  • 關(guān)于死亡术吝,在我記憶里里一直是禁忌。在兒時(shí)茸苇,媽媽甚至不許我提到“死”字排苍,仿佛這個(gè)幽靈一旦被叫到名字就會(huì)現(xiàn)身。我們的...
    Yovich閱讀 151評(píng)論 0 0