使用 GitHub Actions 打包项目并部署到远程主机

本教程将项目通过 GitHub Actions 打包,缓存依赖,并将打包后的文件同步到远程主机的 ~/testParcelActions/ 目录

来源 https://github.com/WangShuXia...

示例仓库https://github.com/WangShuXian6/parcelWithGithubActions

工具依赖 rsync deployments
https://github.com/marketplac...

rsync deployments 需要使用远程主机的 rsync

远程主机安装 rsync [centos]

# rpm -qa|grep rsync   #检查是否安装过rsync,whereis rsync也可以
# yum install rsync       #如果未安装,使用yum安装rsync

本地生成密钥对

备份之前的密钥对[如果存在]

mkdir key_backup mv id_isa* key_backup

生成新的Key:(引号内的内容替换为你自己的邮箱)

ssh-keygen -t rsa -C "[email protected]"

直接回车,不要修改默认路劲

设置一个密码短语,在每次远程操作之前会要求输入密码短语!闲麻烦可以直接回车,不设置

将公钥放入远程部署机 authorized_keys 文件中

打开本机 .ssh 文件夹,用文本编辑器打开 id_rsa.pub 文件,复制内容到剪贴板。

进入远程主机

远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了

在远程主机根目录下创建.ssh文件夹

mkdir .ssh
创建authorized_keys文件
cd .ssh
touch authorized_keys
将公钥 id_rsa.pub 内容追加到 authorized_keys 末尾
vi authorized_keys
wq!
centos 7 重启远程主机的ssh服务
systemctl restart sshd
注:如遇到无法登陆,删除当前用户的.ssh文件夹后重建

登陆测试密钥是否生效

ssh -i ~/.ssh/id_rsa -p xxxxx [email protected]

项目目录下新建 .github/workflows/ci.yml

ci.yml 只要求后缀为 yml,名称无限制

在 github 项目的设置页面添加自定义密钥供 actions 配置文件引用

新建键值例如 MY_V2_SERVER_PRIVATE_KEY

将本机私钥文件 id_isa 重的内容全部复制到 键值中

在 actions 中引用格式为 ${{ secrets.MY_V2_SERVER_PRIVATE_KEY }}

配置 actions

parcel.yml
on:
  push: # 当发生推送事件时
    tags: # 当推送 tag 时
      - v*
    branches: # 当推送分支时
      - master
  pull_request: # 当发生合并事件时
    branches:
      - master

env:
  MY_V2_SERVER_PRIVATE_KEY: ${{ secrets.MY_V2_SERVER_PRIVATE_KEY }} # 服务器私钥
  MY_V2_USER: ${{ secrets.MY_V2_USER }}
  MY_V2_IP: ${{ secrets.MY_V2_IP }}
  cache-name: 2020

jobs:
  build-production: # 构建安装依赖,构建文件
    name: Build 
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2 # 拉去分支

    - name: Cache node modules #缓存依赖
      uses: actions/cache@v1
      env:
        cache-name: cache-node-modules
      with:
        path: ./node_modules # npm cache files are stored in `~/.npm` on Linux/macOS
        key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('./package.json') }}
        restore-keys: |
          ${{ runner.os }}-build-${{ env.cache-name }}-
          ${{ runner.os }}-build-
          ${{ runner.os }}-

    - name: Install Dependencies
      run: npm i

    - name: Build
      run: npm run build

    - name: Upload result
      uses: actions/upload-artifact@v1
      with:
        name: dist
        path: dist

  deploy:
    name: Deploy
    needs: build-production
    runs-on: ubuntu-latest
    steps:
    - name: Download result
      uses: actions/download-artifact@v1
      with:
        name: dist

    - name: rsync deployments
      uses: contention/[email protected]
      env:
        DEPLOY_KEY: ${{ secrets.MY_V2_SERVER_PRIVATE_KEY }}
      with:
        args: "-avzr --delete ${{ env.MY_V2_USER }}@${{ env.MY_V2_IP }}:~/testParcelActions/"

添加构建状态标签

屏幕快照 2020-03-26 下午2 14 56

你可能感兴趣的:(github-actions,运维,自动化,前端)