CI/CD--actions自动化部署工具

190 阅读1分钟

一个项目从开发到部署的整个流程如下:

image.png

实现自动化部署,首先在github上有一个远程仓库,然后还有一台云服务器。

配置github access token
1.生成个人token,这个token最好找个地方存储起来,因为登陆github的密码现在也变成token了

image.png

2.回到项目代码的仓库里,设置对应的密钥

image.png

需要设置如下的参数。 host:远程服务器的IP地址 port:远程服务器的端口号,一般是22,SSH的端口 token:就是上面生成的个人密钥 username:远程服务器的登陆账号,一般默认root password:远程服务器的登陆密码

image.png

3.项目代码中需要创建一个main.yml文件,注意路径 .github/workflows/main.yml

image.png

4.main.yml文件内容

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 -zcvf release.tgz .nuxt static nuxt.config.js package.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

    # 部署到服务器
    - name: Deploy
      uses: appleboy/ssh-action@master
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          cd /www/wwwroot/realworld-demo
          wget https://github.com/yqw19920724/realworld-nuxt-demo/releases/latest/download/release.tgz -O release.tgz
          tar zxvf release.tgz
          npm install --production
          pm2 reload pm2.config.json

注意到没,文件中所需的secrets就是我们在github中配置的参数。

之后当我们提交代码后,就可以完成自动打包。

// 添加当前所有更改的文件
git add .
// 提交当面更改的文件到本地
git commit -m '提交日志'
// 将代码推送到远端
git push
// 生成一个标签
git tag v0.1.0
// 将标签推送到远端,触发自动化部署
git push origin v0.1.0

注意,上述部署成功需要配置好云服务器。关于如何配置,请看我另一片文章。juejin.cn/post/704635…