想要自動更新Gitea
你好,我是無能。
今天也像往常一樣打錯字了,但我就這樣繼續了。
基本上,我不想過多地操作Git伺服器,也不想考慮太多運營方面的事情,所以我想讓它自動更新。
甚至可以說,這既是Gitea的優點也是缺點,Gitea是一個單一二進位檔,可以簡化前端和後端。
所以只要拉取二進位檔就行了。
如何穩定地保存二進位檔
因此,我想穩定地保存二進位檔,看來可以從Releases獲取。 Releases · go-gitea/gitea · GitHub
也就是說,從這裡拉取保存目標URL應該就可以了。
嘗試調用API
可以通過以下方式獲取下載目標URL。
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'
理想情況是從這裡用jq進一步篩選,但看json的key:value似乎做不到,所以只能在這之後一直用grep來查找目標二進位檔。※1
※1 經 hymkor (HAYAMA_Kaoru) · GitHub 先生提醒,說「不可能吧」,於是我回想起最近工作中使用jq的時候,成功地只提取了目標對象。
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '
或者
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '
所以,說做不到是錯的 (吐舌頭)
剩下的請當作我的胡言亂語吧
因此我這樣做了。
$ curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url' | grep linux-amd64$
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 171k 0 171k 0 0 291k 0 --:--:-- --:--:-- --:--:-- 291k
https://github.com/go-gitea/gitea/releases/download/v1.23.4/gitea-1.23.4-linux-amd64
與當前版本的差異
如果每次都部署新的二進位檔,會浪費流量,所以需要從這裡判斷。
最簡單的方法是檢查當前Gitea的版本,然後對其進行grep -qi。
$ gitea -v | awk '{printf $3}'
1.22.4
將其存儲到變數中。
完成
所以就變成這樣了。
#!/bin/bash
# give me root
BINARY_URL=$(curl https://api.github.com/repos/go-gitea/gitea/releases/latest |\
jq -r '.assets[].browser_download_url' |\
grep linux-amd64$ )
NOW_GITEA_V=$(gitea -v | awk '{printf $3}')
DAEMON_RESTART="service gitea restart"
if ! echo $BINARY_URL | grep -qi $NOW_GITEA_V ; then
wget -O gitea $BINARY_URL
chmod +x gitea || exit 2
mv gitea /usr/local/bin/gitea
$DAEMON_RESTART
else
exit 0
fi
如果將其放入root的crontab中,它將作為定期腳本執行。
再說,如果chmod失敗,它會exit 2並退出,所以應該不會出現奇怪的行為。
雖然嘴上說Gitea功能太豐富了,但自己卻一直在使用,感覺自己還是不夠成熟。