Skip to content

本地基于Docker+Gitlab+Gilab CI搭建持续集成环境 #29

Open
@lqshow

Description

@lqshow

背景

前段时间在调研持续集成的框架,在本地部署过一套环境,在此记录一下

安装本地环境

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

  1. 进入gitlab runner容器

    docker exec -it docker-gitlab-runner /bin/bash
  2. 在容器内执行注册命令

    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

  1. 需在仓库根目录创建一个.gitlab-ci.yml 文件
  2. 并为该项目指派一个Runner
  3. 以上2步完成后,每次push的commit或者Merge Request代码到Git仓库, Runner就会自动运行pipeline,开始自动化集成。

样例参考: gitlab ci nodejs

参考

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions