0%

gitlab仓库搭建

承广大开发者的无私,目前开源免费的 git 仓库管理项目已经越来越多,也越来越好,例如giteagogs以及gitlab。这篇文章主要是简单介绍一下通过 docker 搭建gitlab以及gitlab runner 自动CI工具。

在启用 CI/CD 之前,我一直在使用 gitea ,对性能友好,界面也比较简洁,但功能也相当完善,但是由于一些原因,CI/CD 未搭建起来,遂改用 gitlab,之后再研究一下giteaCI/CD搭建吧。

搭建 gitlab 的第一件事情,当然就是:打开搜索引擎,搜索docker gitlab( (* ̄︶ ̄) )。

参考了一部分站点内容后,做了一下整合。

gitlab-ce 搭建

  1. 下来gitlab镜像:gitlab/gitlab-ce

    1
    2
    # gitlab-ce为稳定版本,后面不填写版本则默认pull最新latest版本
    docker pull gitlab/gitlab-ce
  2. 运行gitlab镜像:

    1
    2
    3
    4
    5
    6
    docker run -d  -p 443:443 -p 80:80 -p 222:22 --name gitlab --hostname=git.example.com --restart always -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce
    # -d:后台运行
    # -p:将容器内部端口向外映射
    # --hostname:设置容器的 hostname
    # --name:命名容器名称
    # -v:将容器内数据文件夹或者日志、配置等文件夹挂载到宿主机指定目录

    根据自己的需要,将对应端口映射出来,因为我主机上已经搭配好了nginx,并且不需要 ssh进行操作,所以我这边仅仅将80端口进行映射。各位可以根据需要,自行修改。

  3. 配置

    在这个时候,已经搭建完成,可以直接打开浏览器,输入对应地址进行查看。

    如果发现某些地址不对,url路径有点问题,则有可能是配置的问题,可以先将/home/gitlab/config/gitlab.rb(如果修改过映射路径,请自行更改,下同)。

    打开配置文件,然后加入 external_url 'http://192.168.1.2'(加入你的地址是192.168.1.2,如果不是,请自行修改)。

    然后重启容器,再次进入即正常。

    (如果还是出现不正常的情况,则检查 --hostname 参数是否指定为192.168.1.2,如果不是,删掉gitlab镜像(docker stop gitlab && docker rm gitlab),重新run运行gitlab镜像)。

  4. 外部 NGINX https

    如果是通过nginx反向代理,并且使用了 https 功能,则可能会发现,某些功能不正常了,例如项目主页的README.md没有自动加载。

    这时候需要给配置文件在增加一点配置:

    1
    2
    3
    4
    5
    6
    nginx['listen_port'] = 80
    nginx['listen_https'] = false
    nginx['proxy_set_headers'] = {
    "X-Forwarded-Proto" => "https",
    "X-Forwarded-Ssl" => "on"
    }

    max_body_size配置(根据自己需要):

    1
    nginx['client_max_body_size'] = '20m'
  5. 邮件通知

    gitlab 支持邮件通知,这里使用 smtp 协议进行配置。

    在配置文件里面,新增配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    gitlab_rails['gitlab_email_enabled'] = true
    gitlab_rails['gitlab_email_from'] = '邮件地址'
    gitlab_rails['gitlab_email_display_name'] = '发送昵称'
    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.exmail.qq.com,这里用的是腾讯企业邮"
    gitlab_rails['smtp_port'] = 465
    gitlab_rails['smtp_user_name'] = "账号"
    gitlab_rails['smtp_password'] = "密码"
    gitlab_rails['smtp_domain'] = "smtp_domain"
    gitlab_rails['smtp_authentication'] = "login"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    # 使用 tls 加密
    gitlab_rails['smtp_tls'] = true

    配置没有问题之后,重启gitlab,执行 docker exec -it gitlab gitlab-rake gitlab:incoming_email:check,应该可以得到 finish

    如果失败了,则检查一下账户密码。

  6. Gitlab CI介绍

    CI:持续集成,我们通常使用CI来做一些自动化工作,
    比如程序的打包,单元测试,部署等,
    这种构建方式避免了打包环境差异引起的错误,
    提高了工作效率。Gitlab-CIGitlab官方提供的持续集成服务,
    我们可以在仓库的根目录下新建.gitlab-ci.yml文件,
    自己定义持续集成流程模板,并且在Gitlab中配置runner
    在之后的每次提交合并中将会触发构建,并且可以通过Gitlabhook,
    在代码提交的各个环节自动地完成一系列的构建工作,
    总之对于一些非复杂性的集成需求,都是可以满足的。

  7. Gitlab CI (gitlab-runner) 部署

    使用 docker 进行部署,相对简单很多:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    # 拉取镜像
    sudo docker pull gitlab/gitlab-runner:latest
    # 添加 gitlab-runner container
    sudo 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
    # 注册runner
    sudo docker exec -it gitlab-runner gitlab-ci-multi-runner register
    # gitlab-runner register

    Please enter the gitlab-ci coordinator URL:
    # 示例:https://git.example.com/
    Please enter the gitlab-ci token for this runner:
    # xxxxxx
    Please enter the gitlab-ci description for this runner:
    # 示例:ubuntu
    Please enter the gitlab-ci tags for this runner (comma separated):
    # 示例:*,ubuntu
    Whether to run untagged builds [true/false]:
    # true
    Please enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker+machine, docker-ssh+machine:
    # docker
    Please enter the default Docker image (e.g. ruby:2.1):
    # ubuntu

    若是runner注册成功,
    此时到我们项目首页右侧 设置
    —》CI/CD Pipelines
    —》Runners activated for this project
    就可以看到我们刚注册的qd_api_runner了。

    测试

    我们新建一个 vue 项目,可以直接 vue create test_ci
    然后进入目录,新增文件.gitlab-ci.yml(注意 “.“ 不要漏了.),
    添加以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    image: node:alpine

    stages:
    - build

    cache:
    key: ${CI_COMMIT_REF_NAME}
    paths:
    - node_modules/

    job-build:
    stage: build
    only:
    - master
    tags:
    - shell
    script:
    - npm set registry https://registry.npm.taobao.org
    - npm install --progress=false
    - npm run build
    artifacts:
    expire_in: 1 week
    paths:
    - dist

    使用 node:alpine 镜像自动部署。并且可以将 dist 打包下载。

  8. 结束

    结束。

参考资料

docker下gitlab安装配置使用(完整版)

使用Nginx搭建并代理GitLab服务器

Gitlab配置邮件通知

Docker搭建自己的Gitlab CI Runner