把任意SHELL意指令改爲API,還能微信調用?這必定是魔法……

故事是這樣的,有一個服務打包成docker鏡像部署在個人NAS上。git

畢竟是本身寫的東西,修修改改一天十好幾回也不意外。麻煩的就是不得不重複docker pull……github

有人說:「你怎麼不讓CI自動觸發啊?」docker

我構建鏡像用的是GitHub Actions,按理說自動觸發的方式不少。shell

但問題就出在,NAS沒公網。ubuntu

這樣的話,暴露ssh或者API都很差操做。api

先別告訴我用watchtower。緩存

因而,我想到了反向Server醬。是說,用微信發一個消息,NAS定時拉取,有消息就pull一下。微信

有請「信達」

image-20210420165638131

這就是反向Server醬。markdown

信達 - sender.xzhsh.ch/ssh

先在控制檯建立一個Agent。

在NAS上安裝Agent。

sudo sh -c "$(curl -sSL https://raw.githubusercontent.com/zhshch2002/sender-agent/master/install.sh)"
複製代碼

而後設置docker pull的觸發指令。

sudo nano /etc/sender/agent/config.yaml
複製代碼
name: # 建立Agent時寫的名字
secretkey: # 信達網頁控制檯給的sk

signalings:
  pull:
    cmd: docker-compose pull && docker-compose up -d
    dir: /home/ubuntu/sender
複製代碼

重啓信達Agent服務。

sudo systemctl restart sender
複製代碼

一分鐘後在網頁上Agent就是up的狀態了。

趕忙試試……

1618909610-5E0ETC

在公衆號發送Agent名稱+空格+pull,docker pull就被執行了。網頁控制檯上也會顯示輸出日誌。

1618909700-gHoqze

這就完了嗎?

固然不行。我指望的是執行完構建後自動觸發Agent拉取。

給GitHub Actions加一個workflow。

Depoly:
  needs:
    - Build
  runs-on: ubuntu-latest
  steps:
    - name: Call Sender
      uses: fjogeleit/http-request-action@master
      with:
        url: 'https://sender.xzhsh.ch/api/v1/signaling?secretkey=${{ secrets.SENDER_SK }}&agent=s&signaling=pull'
        method: 'POST'
複製代碼

大功告成。

Actions替代了發微信消息的工做,每次構建結束,一個消息就被推送到信達,等待Agent獲取。

refs

官網: sender.xzhsh.ch/

文檔: sender.xzhsh.ch/docs

Agent GitHub: github.com/zhshch2002/…

折騰

就是說,僅僅只是爲了更新docker不至於這麼折騰。就像一開始說watchtower就能解決問題。

可是信達的目的不止在此。

遠程重啓服務、觸發備份、緩存清理等等,Agent自己就有不少能開發的地方。

更別說自己信達也開放API,把這個功能集成到其餘應用裏能實現更多功能。

相關文章
相關標籤/搜索