本地基于Docker+Gitlab+Gilab CI搭建持续集成环境
lqshow opened this issue · 3 comments
背景
前段时间在调研持续集成的框架,在本地部署过一套环境,在此记录一下
安装本地环境
Gitlab
安装Gitlab
docker run -d \
--hostname gitlab.basebit.ai \
--publish 443:443 --publish 80:80 --publish 24:22 \
--name docker-gitlab \
--restart always \
--volume ~/workspace/docker/gitlab/config:/etc/gitlab \
--volume ~/workspace/docker/gitlab/logs:/var/log/gitlab \
--volume ~/workspace/docker/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
修改本机host文件
# vi /etc/hosts
# 加入指定自定义域名
127.0.0.1 gitlab.basebit.ai
测试本机设置是否成功
ssh -T git@gitlab.basebit.ai
使用24端口具体碰到到问题参见:gitlab docker
Gitlab Runner
安装Gitlab Runner
docker run -d --name docker-gitlab-runner --restart always \
--link docker-gitlab:gitlab.basebit.ai \
-v ~/workspace/docker/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/local/bin/docker:/usr/bin/docker \
gitlab/gitlab-runner:latest
注: linux和macOs的不同处
# linux
-v /usr/bin/docker:/usr/bin/docker
# macOs
-v /usr/local/bin/docker:/usr/bin/docker
注册Runner
-
进入gitlab runner容器
docker exec -it docker-gitlab-runner /bin/bash
-
在容器内执行注册命令
sudo gitlab-runner register -n \ --url http://gitlab.basebit.ai/ \ --registration-token xxxxxxxxxxxxxx \ --executor docker \ --description "Runner Description" \ --docker-image "docker:latest" \ --docker-volumes /var/run/docker.sock:/var/run/docker.sock \ --docker-extra-hosts "gitlab.basebit.ai:172.17.0.2"
Specific Runners和Shared Runners的区别
runner | desc |
---|---|
Specific Runners | 指定运行某一个Gitlab CI 的项目 |
Shared Runners | 运行所有的 CI 项目(只有管理员权限可配置Shared Runners) |
碰到的问题
GitLab与Runners通过API进行通信, 所以只要Runners能访问网络就能与GitLab通信
由于使用的是本地域名,如果在注册runner中未设置过host,碰到连接失败问题参见如下
Gitlab-CI: Failed to connect to gitlab.basebit.ai port 80: Connection refused
项目加入CI/CD
- 需在仓库根目录创建一个.gitlab-ci.yml 文件
- 并为该项目指派一个Runner
- 以上2步完成后,每次push的commit或者Merge Request代码到Git仓库, Runner就会自动运行pipeline,开始自动化集成。
样例参考: gitlab ci nodejs
参考
遇到问题
在runner中注册使用--executor docker,在gitlab构建时报错
bash fatal: unable to access 'http://gitlab.example.com:8929/root/test.git/': Failed to connect to gitlab.example.com port 8929: Connection refused ERROR: Job failed: exit code 1
就是git clone 找不到地址
注册
gitlab-runner register -n \
--url http://172.21.0.3:8929/ \
--registration-token xxxxxxxxxxxxxxxxx\
--executor docker \
--description "Runner Description" \
--docker-image "node:10.16.3-alpine" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-extra-hosts "gitlab.example.com:172.21.0.3"
我想应该是runner创建的docker容器是否访问不到172.21.0.3
请问有什么解决办法吗?谢谢
@pointline 需要增加一个 docker 的 host 映射,不过我看你配置里是加过的,问题应该出在 --url 上,你将 value 调整成 gitlab.example.com 试下看
@lqshow 感谢
gitlab-runner register -n \
--url http://gitlab.example.com:8929/ \
--registration-token dFaZ-PdbPX_xBybUkjq4 \
--executor docker \
--description "Runner Description" \
--docker-image "node:10.16.3-alpine" \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-extra-hosts "gitlab.example.com:172.21.0.3" \
--docker-network-mode gitlab_gitlab-network
我查到到问题,发现在runner过程中创建的新的container是独立,没有建立在与gitlab和gitlab-runner同一网络。所以导致clone是无法访问,需要这个新container指定--docker-network-mode
同一网络就可访问了