准备工作
以 Centos7 为例,准备一台至少内存为 4G 的机器,并安装好 docker 和 docker-compose。
安装好部署工具: Gitlab + Gitlab-CI + Rancher
安装 Gitlab
启动容器
# 域名形式
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22: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 \
--env GITLAB_OMNIBUS_CONFIG="external_url 'https://gitlab.example.com';" \
gitlab/gitlab-ce:latest
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
# ip 形式(记得修改成你自己服务器的公网 ip)
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 \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://114.132.199.187:1880';" \
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
失败。
2、端口号映射为 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,所以这里同样是拉不到代码的,需要去修改配置文件。
配置 SSH
因为做了挂载,所以这里我们可以直接修改宿主机中的 /srv/gitlab/config/gitlab.rb 文件。
vim /srv/gitlab/config/gitlab.rb
添加如下配置
gitlab_rails['gitlab_ssh_host'] = '114.132.199.187'
gitlab_rails['gitlab_shell_ssh_port'] = 1222
重启 gitlab 容器
docker restart gitlab
root 用户登录
root 用户的默认密码放在了 initial_root_password 中,可以通过 cat 命令查看(root 用户登陆后,记得改默认密码,这个默认密码文件在24小时后会自动删除。)
cat /srv/gitlab/config/initial_root_password
安装 Gitlab Runner
启动容器
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
常用命令
# 进入容器
docker exec -it gitlab-runner /bin/bash
# 注册新的 runner
gitlab-runner register
# 删除无效 runner
gitlab-runner verify --delete --name xxx
# 查看已经注册的 runner
gitlab-runner list
待完善…
写在最后
关于前端自动化部署其实有很多方案,上述的方案属于较简单的一种。感兴趣也可以研究下面这些方案:
- Gitlab + Jenkins + Ansible
- Gitlab + Gitlab-CI+ Rancher