现代化的部署方式(CI/CD)
持续集成,持续部署
CI/CD服务
- Jenkins
- GitHub Actions
- Gitlab CI
- Travis CI
- Circle CI
这里用到的是GitHub Actions
环境准备:Linux服务器,把代码提交到GitHub远程仓库
配置GitHub Access Token
作用:在CI/CD中使用Git Hub身份令牌来访问操作你的Git Hub仓库,否则没有操作这个的权限
生成
打开开发者设置 - 选择Personal access tokens - 生成新的token(如果以前有也可以用以前的token)
勾上(这个token对仓库的权限)
生成的令牌待会会用到,且只显示一次,建议保存下来(如果忘了就重写生成一个吧)
配置到项目的Secrets中
来到远程仓库(本地代码托管的仓库这里), 设置
点击Secrets - New secrets
这里的名称必须和脚本名称一致
配置 GitHub Actions 执行脚本
1. 在项目根目录创建.github/workflows目录
2. 下载main.yml到workflows目录中
name: Publish And Deploy Demo # 自动化部署的名称
on:
push:
tags:
- 'v*' # 当我们提交标签的时候,相当于版本(v开头触发)
jobs:
build-and-deploy:
runs-on: ubuntu-latest # 运行环境
steps:
# 下载源码 (将远程仓库的代码拉取到本地)
- name: Checkout
uses: actions/checkout@master
# 打包构建
- name: Build
uses: actions/setup-node@master
- run: npm install
- run: npm run build
- run: tar -zcvf release.tgz .nuxt static nuxt.config.js package.json package-lock.json pm2.config.json
# 发布 Release (创建Release)
- name: Create Release
id: create_release
uses: actions/create-release@master
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }} # 仓库下的token
with:
tag_name: ${{ github.ref }} # 标签名称
release_name: Release ${{ github.ref }} # Release名称
draft: false # 是否是草稿
prerelease: false # 是否是预发布
# 上传构建结果到 Release
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@master
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./release.tgz # 上传的文件
asset_name: release.tgz # 上传的文件名
asset_content_type: application/x-tgz
# 部署到服务器
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }} # 机器的host
username: ${{ secrets.USERNAME }} # 远程仓库的用户名
password: ${{ secrets.PASSWORD }} # 远程仓库的密码
port: ${{ secrets.PORT }} # 远程仓库的端口号
script: | # 执行命令构建 (在远程服务器中)1.进入到该目录(前提创建好)2.下载Release发布包 3.解压 4.安装生产 5.重启服务
cd /root/realworld-nuxtjs
wget https://github.com/lipengzhou/realworld-nuxtjs/releases/latest/download/release.tgz -O release.tgz
tar zxvf release.tgz
npm install --production
pm2 reload pm2.config.json
3. 修改配置
新建secrets (HOST,USERNAME ,PASSWORD ,PORT )
4. 配置pm2配置文件
在项目下创建pm2.config.json文件
{
"apps": [
{
"name": "RealWorld",
"script": "npm",
"args": "start"
}
]
}
5. 提交更新
git add
git tag v0.1.0
git push origin v0.1.0
6. 查看自动部署状态
7. 访问网站
成功,访问网站查看
8. 提交更新
git tag
git tag v0.1.1
git push origin v0.1.1