前提工作
购买linux服务器(建议Centos)
把代码提交到远程仓库
流程
CI/CD服务有
CI持续集成
CD持续交付
配置过程
配置github Asscess Token
- 生成: https://github.com/settings/tokens (创建token勾选所有与repo相关的,点击generatoe,并复制令牌记得保存到本地text文件中因为只能查看一次)
- 配置到项目的Secrets中: (进入远程项目中,然后如下图)
realworld的token: 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
配置github执行脚本
mian.yml配置可以参考这个项目(链接)
#在当前仓库下创建这些Secrets,见上面的操作(github Asscess Token)
USERNAME -> root
PORT -> 22
HOST -> 106.75.12.59
PASSWORD -> 密码自己写
/.github/workflows/main.yml 参考如下
# 不是每一次push都会触发部署,当提交以v开头的标签就会触发自动部署, 如v1.0 v1.1
name: Publish And Deploy Demo
on:
push:
tags:
- '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 -czvf release.tgz .nuxt static nuxt.config.js package.json package-lock.json pm2.config.json
# 发布 Release
- name: Create Release
id: create_release
uses: actions/create-release@master
env:
GITHUB_TOKEN: ${{ secrets.TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: Release ${{ github.ref }}
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
# 部署到服务器(scripT下的命令是运行在远程服务器的)
# 需要准备的是(HOST USERNAME PASSWORD PORT)
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
script:
cd /root/realworld-nuxtjs
wget https://github.com/xiaoqiang007-github/realworld/releses/latest/download/release.tgz -0 release.tgz
tar zxvf release.tgz
npm install --production
pm2 reload pm2.config.json
提交这些新创建的工作流配置文件到远程仓库
git add .
git tag v0.1.0
git push origin v0.1.0
报错
actions/setup-node@master: No such file or directory
exit code 127.