故事是這樣的,有一個服務打包成docker鏡像部署在個人NAS上。git
畢竟是本身寫的東西,修修改改一天十好幾回也不意外。麻煩的就是不得不重複docker pull……github
有人說:「你怎麼不讓CI自動觸發啊?」docker
我構建鏡像用的是GitHub Actions,按理說自動觸發的方式不少。shell
但問題就出在,NAS沒公網。ubuntu
這樣的話,暴露ssh或者API都很差操做。api
先別告訴我用watchtower。緩存
因而,我想到了反向Server醬。是說,用微信發一個消息,NAS定時拉取,有消息就pull一下。微信
這就是反向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的狀態了。
趕忙試試……
在公衆號發送Agent名稱+空格+pull,docker pull就被執行了。網頁控制檯上也會顯示輸出日誌。
這就完了嗎?
固然不行。我指望的是執行完構建後自動觸發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獲取。
官網: sender.xzhsh.ch/
Agent GitHub: github.com/zhshch2002/…
就是說,僅僅只是爲了更新docker不至於這麼折騰。就像一開始說watchtower就能解決問題。
可是信達的目的不止在此。
遠程重啓服務、觸發備份、緩存清理等等,Agent自己就有不少能開發的地方。
更別說自己信達也開放API,把這個功能集成到其餘應用裏能實現更多功能。