自动部署
至此,我们已经将nuxt
项目成功部署到服务器上,可以正常访问了,但是当项目有改动时,我们不可能每次都像这样手动的去传递项目吧,为此引入CI/CD
服务来帮助我自动部署项目,一般的CI/CD
服务工具有Jenkins
,Gitlab CI
,Github Actions
等等,为了方便,这里我选择GIthub Actions
进行演示。
创建远程仓库,申请 Access token
-
创建仓库,提交本地代码 nuxt-demo
-
配置 Access token 申请身份令牌,作为访问仓库的凭证。 点击用户,找到
settings/developer settings/Personal access tokens
申请一个新的token
,权限这里勾选针对仓库操作(repo
)就可以了,记住当前申请的token
,因为之后就不可见了 -
配置 repository secret, 进入项目,找到
setting/actions/New repository secret
value
中填入👆Access token
申请的token
。
配置 GitHub Actions 执行脚本
-
在项目根目录创建.github/workflows目录,创建
main.yml
,main.yml
文件模版可以从我的项目中nuxt-demo获取,根据自己的需要来配置。 -
修改
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
字段👇
- 创建
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
。
遇到的问题
- npm
第一次执行到npm install
报错npm command not found
,pm2 command not found
,但是我在远程服务器上是可以执行成功的啊。搜索了一下发现ssh
直接执行远程命令和脚本的时候并未找到我在/etc/profile
的自定义node
环境变量,而是直接去用户的home目录检查.bashrc
并加载,因此我们需要在.bashrc
添加需要的环境变量,或者直接执行/etc/profile
文件,我这里在.bashrc
文件中直接添加了:
source /etc/profile
- 资源未更新
当我们更改了内容后,需要先执行npm run build
,再执行npm run start
。