前言
Github Actions是什么?是 GitHub 提供的一种持续集成/持续部署(CI/CD)工作流程自动化服务,助力项目的自动化构建、测试和部署。
依托于平台,本文将分享使用 GitHub Actions 完成对一个.Net Core+Vue 的前后端分离项目 zhontai 的构建,并使用 docker 部署到云服务器(阿里云)
使用说明
经过一番尝试学习,个人感受是其功能齐全,文档完善,使用 GitHub 托管仓库完成自己的 CI/CD,不再需要自己搞构建服务了。
关于使用费用问题:每个用户/组织都有免费的使用额度:2000 分钟/月, 不同的项目归类到不同的组织,完全足够使用了。
本文环境
- GitHub 项目
- .Net Core 项目:https://github.com/yimogit/Admin.Core fork 自 zhontai/Admin.Core
- Vue 项目:https://github.com/yimogit/admin.ui.plus fork 自 zhontai/admin.ui.plus
- 安装了 docker 的 Linux 服务器
后端 asp.net core7.0 项目的部署
执行步骤及重点
- 仓库地址:https://github.com/yimogit/Admin.Core
- 部署文件:
.github\workflows\test-deploy.yml
- 目录结构
├─.github │ └─workflows │ └─test-deploy.yml ├─docker │ ├─Dockerfile │ - publish_output publish生成的文件会复制到此,rsync上传到linux服务器 ├─src │ ├─hosts ├─...
-
新建 github actions 配置文件:
.github\workflows\test-deploy.yml
- 仓库的 .github/workflows 目录中定义将会被 github actions 识别
- 测试可以用,生产则可以用
on: workflow_dispatch
指定手动构建
-
拉取分支
- actions 库:
actions/checkout@v3
- actions 库:
-
安装 Dotnet7
- actions 库:
actions/setup-dotnet@v3
- actions 库:
-
执行打包生成 publish_output 目录
dotnet publish ./src/hosts/ZhonTai.Host -c Release -o ./publish_output --self-contained true --runtime linux-x64 --framework net7.0
-
使用 ssh 部署到服务器
- actions 库:
easingthemes/ssh-deploy@v4.1.8
- 将 publish_output 复制到 docker 目录,在将 docker 目录,将其上传到服务器后执行脚本
- ssh 连接后需要创建挂载目录,一个数据库的目录,一个上传目录
- 默认 ZhonTai.Host 的端口是 8000
- 创建挂载目录:
mkdir /root/zhontai/volumns/upload -p
- docker 运行:
docker run --name my-zhontai-apihost -d -p 9902:8000 -e -v /root/zhontai/volumns/admindb.db:/app/admindb.db -v /root/zhontai/volumns/upload:/app/wwwroot/upload zhontai/apihost:latest
- actions 库:
-
ssh 使用需要配置的环境变量
${ { secrets.SSH_PRIVATE_KEY }}
:服务器的 ssh 密钥:~/.ssh/id_rsa 内容${ { secrets.REMOTE_HOST }}
:服务器 IP: xxx.xxx.xxx.xxx${ { secrets.REMOTE_USER }}
:用户名 root${ { secrets.REMOTE_TARGET }}
:远程目录 /root/zhontai/api
-
配置需要的环境变量
- 配置路径:项目->Settings->Security->Secrets and variables->Actions->New repository secret
- ssh 的生成参考ssh-deploy 配置部分
ssh-keygen -m PEM -t rsa -b 4096
生成 ssh,然后复制公钥到 authorized_keys (cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys
)- 设置完最好是重启下
-
构建完成
- 记得开启云服务器的防火墙端口:9902,即可在浏览器中访问到前台页面
.github/workflows/test-deploy.yml
# test-deploy.yml
name: 后端测试环境直接部署
# 手动构建
#on: workflow_dispatch
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps