Github Actions自动部署Nuxt2项目

394 阅读2分钟

自动部署

至此,我们已经将nuxt项目成功部署到服务器上,可以正常访问了,但是当项目有改动时,我们不可能每次都像这样手动的去传递项目吧,为此引入CI/CD服务来帮助我自动部署项目,一般的CI/CD服务工具有JenkinsGitlab CIGithub Actions等等,为了方便,这里我选择GIthub Actions进行演示。

创建远程仓库,申请 Access token

  1. 创建仓库,提交本地代码 nuxt-demo

  2. 配置 Access token 申请身份令牌,作为访问仓库的凭证。 点击用户,找到settings/developer settings/Personal access tokens 申请一个新的token,权限这里勾选针对仓库操作(repo)就可以了,记住当前申请的token,因为之后就不可见了

  3. 配置 repository secret, 进入项目,找到setting/actions/New repository secret

image.png value中填入👆Access token申请的token

配置 GitHub Actions 执行脚本

  1. 在项目根目录创建.github/workflows目录,创建main.ymlmain.yml文件模版可以从我的项目中nuxt-demo获取,根据自己的需要来配置。

  2. 修改main.yml配置 我这里设置的是当提交tag时触发自动部署,主要对应修改一下这几个配置。

env:
      GITHUB_TOKEN: ${{ secrets.NUXT_TOKEN }}
 # 部署到服务器
  - name: Deploy
    uses: appleboy/ssh-action@master
    with:
      host: ${{ secrets.HOST }}
      username: ${{ secrets.USERNAME }}
      password: ${{ secrets.PASSWORD }}
      port: ${{ secrets.PORT }}
      # key: ${{ secrets.MY_CENTOS_RSA_PRIVATE_KEY }}
      script: |
        ls -al
        cd /home/nuxt
        wget https://github.com/murph-1999/nuxt-demo/releases/latest/download/release.tgz -O release.tgz
        tar zxvf release.tgz
        npm install --omit=dev
        pm2 reload pm2.config.json

对应的secrets字段👇 image.png

  1. 创建pm2.config.json文件,这个文件也需要上传到服务器中,因为它的功能是执行npm run start,配置这个文件的目的就是我们不需要手动在服务器中启动应用。最后使用pm2 reload重启服务。
{
  "apps":[
    {
      "name":"nuxt-demo",
      "script":"npm",
      "args":"start"
    }
  ]
}

测试部署

git tag v0.1.0
git push origin v0.1.0

执行后,查看项目中 Actions当前正在执行的action

image.png

遇到的问题

  1. npm
    第一次执行到npm install报错npm command not found,pm2 command not found,但是我在远程服务器上是可以执行成功的啊。搜索了一下发现ssh直接执行远程命令和脚本的时候并未找到我在/etc/profile的自定义node环境变量,而是直接去用户的home目录检查.bashrc并加载,因此我们需要在.bashrc添加需要的环境变量,或者直接执行/etc/profile文件,我这里在.bashrc文件中直接添加了:
source /etc/profile

image.png

  1. 资源未更新
    当我们更改了内容后,需要先执行npm run build,再执行npm run start

👉🏻上一篇 Nuxt2 项目部署详细流程(nginx + pm2)