最近尝试了一下 GitHub 提供的自动化工具 Actions,简单实现了一下 CI/CD。
配置文件需要放在项目对应的目录下:.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 NAME_OF_YOUR_APP 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 中也有许多人遇到这个问题,其实配置完整的私钥就可以了。