使用 gitlab CI/CD 部署静态站点
李二花 / 2020-05-16
分类: 博客 / 标签: 博客 / 字数: 1513
关键词:GitLab CI/CD 静态站点
前面两篇文章我分别介绍了如何使用 GitHub Project Pages 部署静态站点,如何将静态站点部署到阿里云的 OSS,这一篇我们讲解如何在 GitLab 的私有仓库通过使用 CI/CD 部署我们的静态站点到 EC2 上去。
基本介绍
使用 GitLab ,我们可以自己搭建自己的服务器部署 GitLab 服务,也可以使用互联网提供的 GitLab 服务,我选择了后者,如果你是团队办公,对代码仓库的私密性要求很高,推荐直接自己在服务器搭建你的 GitLab 服务。
我们依旧使用 Hugo 作为例子,我们将整个目录都作为版本控制的对象
public 目录就是我们生成的静态文件的存放位置。
GitLab CI/CD 介绍
CI/CD 的意思是持续集成和持续部署,我们其实想用的是里面的持续部署,GitLab 的这部分简单来讲是由这几部分构成的,首先需要有 GitLab 仓库,然后需要我们有台机器部署 GitLab-runner,他们二者不能部署到一台机器中,我们可以在任意一台 EC2 机器上部署 GitLab-runner,部署文档请参考这里
在项目根目录下添加 .gitlab-ci.yml 文件,整个持续集成系统是 Gitlab 自带的,添加的这个 Runner 就是用来到系统里解析文件中的 script 部分。
安装 GitLab-runner
以 Ubuntu 为例,直接使用 apt 安装即可,apt install gitlab-runner
注册 runner
如果你的 .gitlab-ci.yml 涉及到 docker 部分,请先在机器上安装 docker 环境,如果不需要,则直接开始注册即可。
注册前必须做的一步是获取 GitLab 的 token,位置为 Settings -> CI/CD -> Runners
下面开始进行注册的步骤,一个小例子:
运行下面的命令:
sudo gitlab-runner register
输入 Gitlab 实例的 URL:
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
https://gitlab.com
输入用来注册 Runner 的 token:
Please enter the gitlab-ci token for this runner
xxx
输入 Runner 的描述,随后可在 GitLab 界面中修改:
Please enter the gitlab-ci description for this runner
[hostame] tencentyun
输入与 Runner 绑定的标签(可修改):
Please enter the gitlab-ci tags for this runner (comma separated):
cicd
选择 Runner 的执行方式:
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
ssh
如果选择的执行方式是 ssh,会要求填写对应一些配置,例子如下:
# 你可以认为 runner 机器就是一个跳板机,而你选择了 ssh 执行方式之后,就相当于这个跳板机要去控制另一台机器
# 所以需要在跳板机上配置需要提供服务的机器的用户名和 key 或者配置密码,以便于可以跳板机可以登录机器进行
# 操作配置等相关操作
concurrent = 1
check_interval = 0
# 第一个例子,这个使用的是 ssh 的用户名和密码
[[runners]]
name = "tencentyun"
url = "https://gitlab.com"
token = "你从 GitLab 拿到的 token"
executor = "ssh"
[runners.ssh]
user = "root" # 需要搭建静态网站的机器的用户名
password = "xxxxxx" # 网站机器的密码
host = "207.246.122.100"
port = "22"
[runners.cache]
# 有一个例子,这里使用的 key
[[runners]]
executor = "ssh"
[runners.ssh]
host = "example.com"
port = "22"
user = "root"
password = "password"
identity_file = "/path/to/identity/file" # 网站机器的秘钥
注册流程走完会在 ~/etc/gitlab-runner/ 目录下生成 config.toml 配置文件,这时候就可以在 Gitlab 的设置中看到激活的 Runner:
到此我们就将我们的 GitLab 注册到了这个 runner 里去了
编写 .gitlab-ci.yml
下面我们开始编写 .gitlab-ci.yml 这个需要放到项目仓库的根目录下,里面是 yml 的脚本,一旦发生 push 或者打 tag 等的操作,就会触发 .gitlab-ci.yml,如果这个配置里的 tag 刚好关联到的 runner,这个 runner 就会执行我们这个脚本文件里的 script,实现持续集成和持续部署的操作
下面是我这个项目编写的 .gitlab-ci.yml 内容
stages:
- deploy
# 定义 deploy 阶段的一个 job
deploy:
stage: deploy
tags:
- cicd
script:
- echo "nihao ~~" > ~/test.txt # 可以通过这个脚本测试,看看是否在跳板机执行到脚本了
- rm -rf /opt/public
- cp -r public /opt/public
需要注意的是 tags,需要和注册 runner 时配置的一致,这样才会选择那个 runner 执行下面的 script 操作,我的 script 里的操作比较简单,就是通过 runner 机器,删除对应目录下的内容,然后将我 GitLab 里的新发布的 public 目录拷贝到原来的地址,这样就完成了文档的更新。
触发自动部署
当我们进行仓库的 push 操作或者打 tag 操作时(什么时候触发也是需要我们自己配置),如果跟我们配置的触发条件一致了,就会进行自动部署,执行 script 操作。
这是个失败的操作图:
这是个成功的图:
附录:
提供服务的机器安装了 NGINX,下面是 NGINX 对于这个静态站点服务的配置
server {
listen 80;
#设置站点域名
server_name 这里是你的域名;
#指向hugo public 文件夹
root /opt/public/;
location / {
}
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}