准备工作

以 Centos7 为例,准备一台至少内存为 4G 的机器,并安装好 docker 和 docker-compose。
安装好部署工具: Gitlab + Gitlab-CI + Rancher

安装 Gitlab

启动容器

  1. # 域名形式
  2. sudo docker run --detach \
  3. --hostname gitlab.example.com \
  4. --publish 443:443 --publish 80:80 --publish 22:22 \
  5. --name gitlab \
  6. --restart always \
  7. --volume /srv/gitlab/config:/etc/gitlab \
  8. --volume /srv/gitlab/logs:/var/log/gitlab \
  9. --volume /srv/gitlab/data:/var/opt/gitlab \
  10. --env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com';" \
  11. gitlab/gitlab-ce:latest
  12. sudo docker run --detach --hostname 114.132.199.187 --publish 1443:443 --publish 1880:1880 --publish 1222:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:latest
  13. # ip 形式(记得修改成你自己服务器的公网 ip)
  14. sudo docker run --detach \
  15. --hostname 114.132.199.187 \
  16. --publish 1443:443 --publish 1880:1880 --publish 1222:22 \
  17. --name gitlab \
  18. --restart always \
  19. --volume /srv/gitlab/config:/etc/gitlab \
  20. --volume /srv/gitlab/logs:/var/log/gitlab \
  21. --volume /srv/gitlab/data:/var/opt/gitlab \
  22. --env GITLAB_OMNIBUS_CONFIG="external_url 'http://114.132.199.187:1880';" \
  23. gitlab/gitlab-ce:latest

填个坑

注意点:当 hostname 配置的是服务器的公网 ip 时,有一个小坑的地方,主要有下面几种情况:
1、端口号映射为 1880:80,external_url 设置为 http://114.132.199.187。这时候你可以通过访问 http://114.132.199.187:1880 这个地址访问到 Gitlab。但仓库的 git 地址却没有包含端口号, 导致 git clone失败。
截屏2022-06-07 下午5.31.33.png2、端口号映射为 1880:80,external_url 设置为 http://114.132.199.187:1880。这时候你没法访问 Gitlab。

出现上述情况的原因是 external_url 配置会显示在 git 地址中,你不设置端口号, git 地址就不会包含端口号。而一旦你设置的 external_url 带上端口号之后, 容器内部暴露端口号就不是 80 了,而是你设置的 1880。要解决这个问题,需要把宿主机和容器的端口映射改为 1880:1880。这样就能保证你能正常访问到 Gitlab,仓库的 git 地址也是正常的。

你以为这就完啦?你看看仓库的 ssh 地址,我们映射的端口是 1222:22,所以这里同样是拉不到代码的,需要去修改配置文件。

截屏2022-06-07 下午5.33.47.png

配置 SSH

因为做了挂载,所以这里我们可以直接修改宿主机中的 /srv/gitlab/config/gitlab.rb 文件。

  1. vim /srv/gitlab/config/gitlab.rb

添加如下配置

  1. gitlab_rails['gitlab_ssh_host'] = '114.132.199.187'
  2. gitlab_rails['gitlab_shell_ssh_port'] = 1222

重启 gitlab 容器

  1. docker restart gitlab

root 用户登录

root 用户的默认密码放在了 initial_root_password 中,可以通过 cat 命令查看(root 用户登陆后,记得改默认密码,这个默认密码文件在24小时后会自动删除。)

  1. cat /srv/gitlab/config/initial_root_password

安装 Gitlab Runner

启动容器

  1. docker run -d --name gitlab-runner --restart always \
  2. -v /srv/gitlab-runner/config:/etc/gitlab-runner \
  3. -v /var/run/docker.sock:/var/run/docker.sock \
  4. gitlab/gitlab-runner:latest

常用命令

  1. # 进入容器
  2. docker exec -it gitlab-runner /bin/bash
  3. # 注册新的 runner
  4. gitlab-runner register
  5. # 删除无效 runner
  6. gitlab-runner verify --delete --name xxx
  7. # 查看已经注册的 runner
  8. gitlab-runner list

待完善…

写在最后

关于前端自动化部署其实有很多方案,上述的方案属于较简单的一种。感兴趣也可以研究下面这些方案:

  • Gitlab + Jenkins + Ansible
  • Gitlab + Gitlab-CI+ Rancher