GitLab私服搭建
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务
参考官方Doc: GitLab Docker images | GitLab
1 2
| mkdir -p /data/docker/gitlab/{config,data,logs}
|
在/data/docker/gitlab/ 目录下创建 docker-compose.yml 文件,内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| version: '3.6' services: gitlab: image: 'twang2218/gitlab-ce-zh' container_name: gitlab restart: always environment: GITLAB_OMNIBUS_CONFIG: | external_url 'http://ip:8998' # 此处填写所在服务器ip若有域名可以写域名 gitlab_rails['gitlab_shell_ssh_port'] = 2224 ports: - '8998:8998' - '2224:22' volumes: - ./data:/var/opt/gitlab - ./logs:/var/log/gitlab - ./config:/etc/gitlab shm_size: '256m'
|
执行docker-compose 命令,进行安装和容器启动,开通端口8998 和 2224 的防火墙
1
| docker-compose up -d gitlab
|
启动成功后,ip:8998 访问web端进行 Gitlab 设置新密码,使用root 账号登录进行使用

GitLab邮箱配置
前置条件:准备一个邮箱(以网易举例,需要在网易邮箱设置中开启 POP3/SMTP 服务,获得授权码)
1
| vim /data/docker/gitlab/config/gitlab.rb
|
修改gitlab.rb 的以下配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.163.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "dunkingcurry30@163.com" gitlab_rails['smtp_password'] = "xxxxxxxxx" gitlab_rails['smtp_domain'] = "smtp.163.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_enabled'] = true gitlab_rails['gitlab_email_from'] = 'dunkingcurry30@163.com' gitlab_rails['gitlab_email_display_name'] = 'GitLab'
|
配置后,请删除镜像后重新用docker-compose 命令启动容器,启动成功后
1 2 3 4 5 6 7 8 9 10 11
| docker exec -it gitlab /bin/bash
gitlab-rails console
ActionMailer::Base.delivery_method
ActionMailer::Base.smtp_settings
Notify.test_email('xxxxxxxxx@qq.com','Hello World', 'This is a test message').deliver_now
|
GitLab创建和拉取项目
- 登录
GitLab 创建项目 myblog ,建议勾选创建 README.md ,创建完成后建议再新建一个dev 分支(因GitLab 默认 master 分支受保护,只能拉取无法推送)

- 点击进入个人设置
SSH KEYS ,添加本地 id_rsa.pub 公钥(公钥生成方式可参考《基于hexo的个人博客搭建》 中的 配置本地git仓库 )

- 本地创建一个myblog目录,右键点击
git bash 执行以下命令
1 2
| git config user.name 用户名 git config user.email 邮箱
|
- 在
GitLab 项目页面获取 ssh链接,可使用 git clone 拉取项目,切换分支后使用 git push 命令推送(或使用vscode等IDE工具的插件对仓库进行操作)

GitLab-CI 自动化部署
1. 安装及注册 gitlab-runner
首先,安装 gitlab-runner
1 2
| mkdir -p /data/docker/gitlab/gitlab-runner/config
|
在创建的config 目录下创建文件config.toml ,内容如下
1 2 3 4 5
| concurrent = 1 check_interval = 0
[session_server] session_timeout = 1800
|
在 GitLab 的 docker-compose.yml 中增加下列内容,注意缩进
1 2 3 4 5 6
| gitlab-runner: image: 'gitlab/gitlab-runner' container_name: gitlab-runner restart: always volumes: - ./gitlab-runner/config:/etc/gitlab-runner
|
执行docker-compose 命令,容器启动成功后注册 runner ,
其中,注册流程可参考: docker安装gitlab-runner自动化部署过程
1 2 3 4 5 6
| docker-compose up -d
docker exec -it gitlab-runner bash
gitlab-runner register
|
注册成功后,可在GitLab—设置—CI/CD 中查看 runner 状态是否可用

2. 在项目根目录下编写.gitlab-ci.yml 脚本
内容如下(第一次写,看不明白没关系,弄懂 stage ,job 的概念就行),后续会详细解析该脚本的配置
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
stages: - build - deploy before_script: - echo "gitlab-ci start..." - eval `ssh-agent -s` - ssh-add <(echo "$SSH_KEY") - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan 部署服务器IP > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts build_job: stage: build tags: - build script: - npm install -g cnpm --registry=https://registry.npm.taobao.org - echo `pwd` - cnpm install -g hexo-cli - cnpm install - hexo clean && hexo g
cache: paths: - node_modules/ - public/
deploy_job: stage: deploy tags: - deploy script: - pwd - mv public html - ls - scp -r ./html/ root@部署服务器IP:/opt/docker/nginx - echo "gitlab-ci success."
|
脚本编写完成后,可以将内容放到 GitLab 进行语法检测,看能否正确识别出各个步骤操作

3. 设置SSH免密登录
上述脚本中使用了一个变量 SSH_KEY ,该变量为 gitlab-runner 服务器的 ssh私钥 信息。
这里简单解释一下,我们知道 git-runner 要使用 SSH 登录项目部署的服务器,需要创建一对公私钥,将其公钥添加到 部署服务器 的 ssh 公钥配置中,登录时再通过私钥去做验证
因此我们在 gitlab-runner 安装的服务器上,输入如下命令
1 2
| ssh-keygen -t rsa -C "niceday@163.com"
|
- 将
~/.ssh 目录下的公钥 id_rsa.pub 的内容添加至 部署项目的服务器 ~/.ssh/anthorized_keys 中
- 将目录下私钥
id_rsa 的内容添加至变量 SSH_KEY 中

4. push 脚本到 Gitlab
验证无误后,就将 .gitlab-ci.yml 脚本 push 到远程仓库,在GitLab—项目—CI/CD 下就可以查看自动化作业执行的情况了

点击每个作业步,也可以查看具体的命令执行信息

5. 验证执行结果
流水线显示执行成功后,可通过浏览器验证内容是否更新,也可上服务器看文件是否更新

至此,大功告成!
将 GitLab 提交同步至 Github
- 在
github 上创建一个 token
登录 Github,找到 settings - Developer settings - Personal access tokens 设置,创建包含repo 权限的新token ,生成的 token 记录下来,网站不会保存

- 获取要同步的 Github 库
在 Github 上找到要同步的项目库,获取版本库链接

将该链接内容改动如下,在github.com前拼接 用户名:步骤1的token@
1
| https://你的用户名:你的token@github.com/DunkingCurry30/DunkingCurry30.github.io.git
|
- Gitlab配置Github库
登录 Gitlab,选择要同步的项目 设置 - 仓库 - 推送到远程仓库 ,填写上面得到的链接后保存修改

点击 现在更新 立即进行同步,更新成功后查看 github,成功同步

至此,结合 基于Hexo的个人博客搭建 可实现通过本地提交代码至 Gitlab 同时触发以下自动化流程
Gitlab CI 自动部署至云服务器
Gitlab 提交同步 Github 自动部署至 Github Pages