GitHub Actions使用需知
GitHub Actions的工作流文件存储在/.github/workflows/XXX.yml
,XXX
表示任意文件名,只要在该目录下创建任何的文件,并且文件后缀是.yml
默认是GitHub Actions
。
${
{ secrets.XXX }}
表示的是私有变量,需要自己手动添加,该变量可以保证变量的值暴露给他人,保证安全。
发送邮件
使用场景
用于项目构建结果通知,我的Hexo博客放在GitHub Actions构建,在工作流最后使用邮件通知,如果在博客构建过程中出错,则不会发送邮件通知,如果构建成功,则会通过邮件通知我构建成功。
代码实现
项目地址:https://github.com/dawidd6/action-send-mail
- name: 发送邮件
uses: dawidd6/action-send-mail@v2
with:
server_address: smtp.163.com # 发送端的服务器地址
server_port: 465 # 发送端服务器的端口号
# 账号 授权码
username: ${
{
secrets.EMAIL_USERNAME}} # 发送的邮箱号(发送端)
password: ${
{
secrets.EMAIL_PASSWORD}} # 发送的邮箱授权码(发送端)
subject: ${
{
secrets.EMAIL_TITLE}} # 邮件内容标题
body: ${
{
secrets.EMAIL_BODY}} # 邮件内容,支持HTML
to: ${
{
secrets.EMAIL_TO}} # 接收邮件账号(接收端)
from: ${
{
secrets.EMAIL_FROM}} # 发送的邮箱号(发送端)
content_type: text/html #内容请求类型
不知道发送服务器地址和端口号看这篇文章 https://blog.hikki.site/dd7ff60b.html
发送邮件的GitHub Actions有很多现成的案例,比如:https://github.com/marketplace/actions/send-mailer,根据自己的喜好选择自己的。
将Actions虚拟机文件部署到服务器
使用场景
在Hexo博客构建时生成的HTML文件在/public
下,将该文件夹内容同步到服务器。
代码实现
项目地址:https://github.com/Burnett01/rsync-deployments
- name: 部署到服务器
uses: burnett01/rsync-[email protected]
with:
# 这里是 rsync 的参数 switches: -avzh --delete --exclude="" --include="" --filter=""
switches: -avzh
path: public/ # 将public文件夹同步到服务器下的 PATH 路径
remote_path: ${
{
secrets.PATH }} #服务器的文件存放绝对路径
remote_host: ${
{
secrets.DOMAIN }} #服务器域名或者IP地址
remote_port: ${
{
secrets.EXPORT }} # ssh远程端口(如果没修改过ssh远程端口,默认是22)
remote_user: ${
{
secrets.USER }} # 使用ssh登录的用户
remote_key: ${
{
secrets.PC_PRIVATE_KEY }} #能够远程到服务器的电脑私钥
switches
:第一个用于任何初始/必需的rsync标志,例如:-avzr --delete
rsh
:远程shell命令path
:源路径。默认为GITHUB_WORKSPACE,并且相对于它remote_path
:部署目标路径remote_host
: 远程主机remote_port
:远程端口。默认为22remote_user
: 远程用户remote_key
: 远程ssh私钥remote_key_pass
:远程ssh密钥密码(如果有)
执行简单的Bash命令
使用场景
用于安装npm包或者打印某某文件。
代码实现
指定亚洲时区,安装hexo-cli
。
- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g
Hexo自动构建
使用场景
使用Hexo博客都知道,我们每次更新博客文章时,都需要在本地构建再推送文章到服务器或者GitHub pages,文章越多,构建时间越长。
为此,GitHub Actions的出现可以帮我们解决这个问题,我们可以将构建这部分放在GitHub Actions自动化,构建完成自动将文章推送到服务器或者GitHub Pages。
代码实现
name: Hexo自动部署
# 当有改动推送到master分支时,启动Action
on: # 触发该actions
push: # 当提交时触发该事件
branches: # 指定提交到某分支才触发事件
- main # 指定提交到main分支触发事件
#2020年10月后github新建仓库默认分支改为main,注意更改
release:
types:
- published
jobs:
deploy:
runs-on: ubuntu-latest # 该actions运行的环境,这里指定在Ubuntu系统环境下运行
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: main
- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "16.x"
- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g
- name: 缓存 Hexo
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${
{runner.OS}}-${
{hashFiles('**/package-lock.json')}}
- name: 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm -v
node -v
npm install -g npm
npm install --save
- name: 生成静态文件
run: |
echo "开始清除html文件"
hexo clean
echo "开始生成html文件"
hexo generate
- name: 部署到服务器
uses: burnett01/[email protected]
with:
# 这里是 rsync 的参数 switches: -avzh --delete --exclude="" --include="" --filter=""
switches: -avzh
path: public/ # 将public文件夹同步到服务器下的 PATH 路径
remote_path: ${
{ secrets.PATH }} #服务器的文件存放绝对路径
remote_host: ${
{ secrets.DOMAIN }} #服务器域名或者IP地址
remote_port: ${
{ secrets.EXPORT }} # ssh远程端口(如果没修改过ssh远程端口,默认是22)
remote_user: ${
{ secrets.USER }} # 使用ssh登录的用户
remote_key: ${
{ secrets.PC_PRIVATE_KEY }}
构建Hexo博客主要是前面50行代码,后面部署到服务器,和文章上面的一样。
前面部分可以直接复制去使用。
以上文章来自我的博客:https://blog.hikki.site