使用无服务器技术创建 Slack 或 Discord 的部署机器人
常见的烦恼
-
- slackからデプロイコマンドを叩きたい…
-
- minecraftのサーバーコマンドをdiscord経由で実行したい…
-
- でもbot用のサーバー建てるのはちょっと…
- SaaS(IFTTT, zapier)探してもssh実行してくれる方法がなど無い(iOSにはssh経由でコマンドを実行するショートカットがあるのに…)
在Zapier中,通过JS努力工作(虽然不支持npm,所以webpack的运行时是不确定的,但是我们可以努力)是可以进行SSH连接的,而我找到了一种优雅的SSH连接方法!这里以discord为例,但是Zapier可以与2000多个应用程序进行集成,同样也可以在Slack上使用!
整体结构
-
- 使用discord发言
-
- 使用zapier,将discord设为Trigger,将写入discord的内容写入github评论中
- 将评论作为触发器,执行github actions
如果只考虑Java、Ruby和Go的话,AWS Lambda也是可以使用的。
准备好
-
- 创建一个专用频道在Discord上
- 创建一个Github问题单
制作一个zap

尽管我们使用git来管理执行的命令,但是无法将discord→github的连接定义保留在代码中可能会让人感到不舒服,但无代码和无服务器是不可避免的。
创建 .github/workflows/deploy.yml
由于任何discord上的帖子都会在github上被评论,所以应该在discord设置中限制发言。
还需要注意,由于Pull request也会被执行。
在官方示例中,我们使用if: ${{ github.event.issue.pull_request }}的设置,只执行issue的评论,但在下面的示例中,我们指定了问题编号,只执行特定问题的评论。
这里是可以使用的有效载荷对象(可在github.evnet中找到)。
name: deploy
# コメントで実行されたときにこのactionが実行される(Pull requestでも実行されるので注意)
on:
issue_comment:
types:
- created
jobs:
deploy:
if: ${{ github.event.issue.number == 1 && github.event.comment.user.site_admin == true }} # 作成したissueの番号を指定
runs-on: ubuntu-latest
steps:
- name: Deploy
# ここにコマンドを書く
run: echo "${{ github.event.comment.body }}"
# コマンド実行が完了したことをdiscordに通知
- name: Discord notification
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
uses: Ilshidur/action-discord@master
with:
args: "${{ github.event.comment.body }} command done"
其他注意事项等
只有在默认分支上才会执行issue_comment。
有时即使在推送到默认分支后,对issue进行评论也不会被执行。直到第二天才会生效。