安裝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
下載后放到一個(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ò)配置有誤