docker 部署 gitlab gitlab-runner 实现 CI
GitLab私服搭建
GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的Web服务
参考官方Doc: GitLab Docker images | GitLab
1 |
|
在/data/docker/gitlab/
目录下创建 docker-compose.yml
文件,内容如下
1 |
|
执行docker-compose
命令,进行安装和容器启动,开通端口8998
和 2224
的防火墙
1 |
|
启动成功后,ip:8998
访问web端进行 Gitlab 设置新密码,使用root
账号登录进行使用
GitLab邮箱配置
前置条件:准备一个邮箱(以网易举例,需要在网易邮箱设置中开启 POP3/SMTP 服务,获得授权码)
1 |
|
修改gitlab.rb
的以下配置
1 |
|
配置后,请删除镜像后重新用docker-compose
命令启动容器,启动成功后
1 |
|
GitLab创建和拉取项目
- 登录
GitLab
创建项目myblog
,建议勾选创建README.md
,创建完成后建议再新建一个dev
分支(因GitLab
默认master
分支受保护,只能拉取无法推送)
- 点击进入个人设置
SSH KEYS
,添加本地id_rsa.pub
公钥(公钥生成方式可参考《基于hexo的个人博客搭建》
中的配置本地git仓库
)
- 本地创建一个myblog目录,右键点击
git bash
执行以下命令
1 |
|
- 在
GitLab
项目页面获取ssh链接
,可使用git clone
拉取项目,切换分支后使用git push
命令推送(或使用vscode等IDE工具的插件对仓库进行操作)
GitLab-CI 自动化部署
1. 安装及注册 gitlab-runner
首先,安装 gitlab-runner
1 |
|
在创建的config
目录下创建文件config.toml
,内容如下
1 |
|
在 GitLab 的 docker-compose.yml
中增加下列内容,注意缩进
1 |
|
执行docker-compose
命令,容器启动成功后注册 runner
,
其中,注册流程可参考: docker安装gitlab-runner自动化部署过程
1 |
|
注册成功后,可在GitLab—设置—CI/CD
中查看 runner
状态是否可用
2. 在项目根目录下编写
.gitlab-ci.yml
脚本
内容如下(第一次写,看不明白没关系,弄懂 stage
,job
的概念就行),后续会详细解析该脚本的配置
1 |
|
脚本编写完成后,可以将内容放到 GitLab
进行语法检测,看能否正确识别出各个步骤操作
3. 设置SSH免密登录
上述脚本中使用了一个变量 SSH_KEY
,该变量为 gitlab-runner
服务器的 ssh私钥
信息。
这里简单解释一下,我们知道 git-runner
要使用 SSH 登录项目部署的服务器,需要创建一对公私钥,将其公钥添加到 部署服务器
的 ssh 公钥配置中,登录时再通过私钥去做验证
因此我们在 gitlab-runner
安装的服务器上,输入如下命令
1 |
|
- 将
~/.ssh
目录下的公钥id_rsa.pub
的内容添加至 部署项目的服务器~/.ssh/anthorized_keys
中 - 将目录下私钥
id_rsa
的内容添加至变量SSH_KEY
中
4. push 脚本到 Gitlab
验证无误后,就将 .gitlab-ci.yml
脚本 push 到远程仓库,在GitLab—项目—CI/CD
下就可以查看自动化作业执行的情况了
点击每个作业步,也可以查看具体的命令执行信息
5. 验证执行结果
流水线显示执行成功后,可通过浏览器验证内容是否更新,也可上服务器看文件是否更新
至此,大功告成!
将 GitLab 提交同步至 Github
- 参考: GitLab和GitHub的双向同步
- 提高
Github
访问速度: github域名解析优化
- 在
github
上创建一个token
登录 Github,找到 settings - Developer settings - Personal access tokens
设置,创建包含repo
权限的新token
,生成的 token
记录下来,网站不会保存
- 获取要同步的 Github 库
在 Github 上找到要同步的项目库,获取版本库链接
将该链接内容改动如下,在github.com
前拼接 用户名:步骤1的token@
1 |
|
- Gitlab配置Github库
登录 Gitlab,选择要同步的项目 设置 - 仓库 - 推送到远程仓库
,填写上面得到的链接后保存修改
点击 现在更新
立即进行同步,更新成功后查看 github,成功同步
至此,结合 基于Hexo的个人博客搭建 可实现通过本地提交代码至
Gitlab
同时触发以下自动化流程
Gitlab CI
自动部署至云服务器Gitlab
提交同步Github
自动部署至Github Pages