使用无服务器技术创建 Slack 或 Discord 的部署机器人

常见的烦恼

    • slackからデプロイコマンドを叩きたい…

 

    • minecraftのサーバーコマンドをdiscord経由で実行したい…

 

    • でもbot用のサーバー建てるのはちょっと…

 

    SaaS(IFTTT, zapier)探してもssh実行してくれる方法がなど無い(iOSにはssh経由でコマンドを実行するショートカットがあるのに…)

在Zapier中,通过JS努力工作(虽然不支持npm,所以webpack的运行时是不确定的,但是我们可以努力)是可以进行SSH连接的,而我找到了一种优雅的SSH连接方法!这里以discord为例,但是Zapier可以与2000多个应用程序进行集成,同样也可以在Slack上使用!

整体结构

    1. 使用discord发言

 

    1. 使用zapier,将discord设为Trigger,将写入discord的内容写入github评论中

 

    将评论作为触发器,执行github actions

如果只考虑Java、Ruby和Go的话,AWS Lambda也是可以使用的。

准备好

    1. 创建一个专用频道在Discord上

 

    创建一个Github问题单

制作一个zap

image.png

尽管我们使用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进行评论也不会被执行。直到第二天才会生效。

请提供一份参考。

bannerAds