基于Github Action打二进制包且自动部署 - swiftdo/vapor-blog GitHub Wiki

在项目的根目录下,创建 .github/workflows/build.yml,内容如下:

name: Swift Vapor CI/CD

on:
  push:
    branches:
      - dev  # 更改为你的默认分支,例如master或main
      - main 

jobs:
  build:
    runs-on: ubuntu-20.04

    steps:
    - name: 拉取代码
      uses: actions/checkout@v3
    
    - name: 安装 SwiftEnv
      run: git clone https://github.com/kylef/swiftenv.git ~/.swiftenv

    - name: Setup environment
      run: |
        export SWIFTENV_ROOT="$HOME/.swiftenv"
        export PATH="$SWIFTENV_ROOT/bin:$PATH"
        eval "$(swiftenv init -)"
        echo "$PATH" >> $GITHUB_PATH
        echo $SWIFTENV_ROOT
        
    - name: 安装Swift
      run: |
        swiftenv install 5.8.1 --skip-existing
        swiftenv global 5.8.1

    - name: 编译项目
      run: |
        swift build -c release --static-swift-stdlib
        mv .build/x86_64-unknown-linux-gnu/release/App ./
        chmod +x ./App

    - name: 收集产物
      run: |
        zip -r output_filename.zip App Public Resources

    - name: 保存产物
      uses: actions/upload-artifact@v2
      with:
        name: vapor-app-artifact
        path: output_filename.zip

    - name: 上传产物
      uses: appleboy/[email protected]
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        source: output_filename.zip
        target: ${{secrets.TARGET_FOLD}}

    - name: 部署服务
      uses: appleboy/[email protected]
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        password: ${{ secrets.PASSWORD }}
        port: ${{ secrets.PORT }}
        script: |
          cd ${{secrets.TARGET_FOLD}}
          ls -all
          unzip -o output_filename.zip
          chmod +x App
          supervisorctl stop iblog-com
          supervisorctl start iblog-com

需要配置环境变量:

image

  • HOST ssh的ip
  • USERNAME ssh的用户名
  • PASSWORD ssh的密码
  • PORT ssh的端口
  • TARGET_FOLD 将产物部署到服务器的目录