最近尝试了一下 GitHub 提供的自动化工具 Actions,简单实现了一下 CI/CD。
配置文件需要放在 Repo 对应的目录下:.github/workflows/deploy.yml
deploy.yml 具体内容如下:
name: Deploy on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup .NET uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.x - name: Dotnet Publish run: dotnet publish CdSite -c Release -o deploy - name: Copy via ssh uses: garygrossgarten/github-action-scp@release with: local: /home/runner/work/CdSite.NetCore/CdSite.NetCore/deploy/ remote: ${{ secrets.REMOTE_TARGET }} host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }} - name: Run SSH command uses: garygrossgarten/github-action-ssh@release with: command: sudo service deferat start host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} privateKey: ${{ secrets.REMOTE_SSH_KEY }}
其中的 REMOTE_TARGET、REMOTE_HOST、REMOTE_USER、REMOTE_SSH_KEY 需要在 GitHub 当前项目的 Settings -> Secrets 中配置,用来保存一些在自动部署中使用但又不方便公开的服务器信息。
REMOTE_HOST: 服务器地址,可以是 IP 或者域名
REMOTE_TARGET: 服务器部署的文件路径
REMOTE_USER: ssh 登录的用户名
REMOTE_SSH_KEY: ssh 私钥
这里有一个坑,在配置私钥的时候,习惯性把私钥文件“id_rsa”掐头去尾,只留中间的有效部分,也就是把下面私钥中的第一行和最后一行去掉。
-----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAyH0ha9VDm2a9TZfdb8TSlWwwvJdNkNgRnNerL27zUlcv/wH7 6gdL12u0Mt3Vx6d4EJjWrHDrUVmmGAQTNt+XtE+tmEjrH3LVojNFkSzmvGBwXXcU ... lYbYtA0CgYEAgCHSSDmEPHHgSaycqQQYRAz4EL4rgiDkzGZhRg0RrzRfQE//lWqJ BKq+LYp3+1dpCoChGGrCoz6W0+eIALb5QkuT+uXrOPb/0ipm79VGCTZJ+CWmT7q8 mUzhJQg3LTm7fusSKvRRwUhG+vTkLyWNSU2dfFzEHPvZ5CCKEI7f22o= -----END RSA PRIVATE KEY-----
但在执行的过程中会出现
Error: config.privateKey does not exist at given fs path
的错误。在相关 Issue 中也有许多人遇到这个问题,其实配置完整的私钥就可以了。