从0到1实现前后端分离项目的gitlab-ci流程

作者:微信小助手

发布时间:2020-08-16T19:30:28

欢迎关注公众号“码农架构

专注于高可用、高性能、高并发类技术分享!

从0到1把gitlab-ci弄好了, 彻底抛弃travis-ci, 最大的坑还是墙外的东西太慢了, 总是timeout

整个过程分为如下几步:
  • 如何在一个1核2G的云服务器上搭建gitlab: 十分钟搭建Gitlab
  • 使用 gitlab-runner , 并选择正确的 executor
  • 如何构建前端镜像
  • 如何构建后端镜像
  • 编写 gitlab-ci.yml , 实现一个完整的前端后分离项目的构建部署

1. 使用gitlab-runner

gitlab-runner gitlab-ci 是连体婴, 主要为 gitlab-ci 打工, 使用镜像的安装方式如下:
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
其中挂载卷 /srv/gitlab-runner/config/config.toml 包含了所有 runner 的配置信息.
通过挂载 /var/run/docker.sock:/var/run/docker.sock ,使得容器中的进程可以通过它与Docker守护进程通信


1.1 选择Docker作为runner的executor

在启动了gitlab-runner容器后, 执行如下命令进入容器, 注册runner

docker exec -it gitlab-runner /bin/bash
root@492ce6ab72f9:/# gitlab-runner register

接下来需要填写的信息如下:

Please enter the gitlab-ci coordinator URL:
你的Gitlab地址: http(s)://gitlab.xxx.com
Please enter the gitlab-ci token for this runner:
你的Gitlab admin/runners页面中的token
Please enter the gitlab-ci description for this runner:
填写描述, 无关紧要
Please enter the gitlab-ci tags for this runner (comma separated):
填写标签, 没有标签谁都可以用, 是shared-runner, 有标签需要声明才可用, 回车就对了
Please enter the executor: docker-ssh, ssh, docker+machine, kubernetes, docker-ssh+machine, docker, parallels, shell, virtualbox:
选择你的executor: Docker应该是我观察到最常用的吧
Please enter the default Docker image (e.g. ruby:2.6):
选择一个默认镜像: 例如 docker:stable-alpine

不出意外, 就能在gitlab中看到了

1.2 为什么使用docker作为executor

参考官方文档 - executor

  • shell executor: 最简单的executor, 所有依赖都必须手动安装

    • 不能保证每次构建都是相同的环境

    • 不方便迁移

    • 需要手动配置

  • Virtual Machine Executor: 创建虚拟机用于构建, 如果你希望在不同的操作系统上构建, 可以选择它

    • 占用资源大

    • 调试构建问题困难

    • 迁移较不方便

  • Docker Executor: 最佳的选择QAQ

  • Docker Machine: Docker的拓展, 工作方式与Docker类似, 不过需要额外的一些安装步骤

最后只尝试了DockerDocker + Machine, 只是Docker + Machinerunner一直没有连接成功

1.3 什么是Docker in Docker(dind)

参考官方文档 - dind

使用dind的背景是: 需要在容器内执行docker命令,

1.1中注册好了一个docker executor之后, 只需要完成两个操作, 即可使用

  • gitlab-ci.yml中添加:

imgage: docker:stable
service:
  - docker:dind
# 测试
before_script:
  - docker info
  • 确保config.toml中该runner中设置了privileged = true

1.4 可能遇见的问题: 拉取镜像缓慢

讲道理, 我没有在官方文档中找到: 当使用docker作为runner executor时, 如何设置registry-mirror

如果使用docker + machine的话,